Revert "[scenic] Add view state tests"

This reverts commit 7658c87eadf8a982afd9eefd2a9d71781787023b.

Reason for revert: fails on topaz builders

Original change's description:
> [scenic] Add view state tests
> 
> Add end to end view state tests.  View state tests run a full scenic
> application via the |EmbedderView| utility, and verify that they
> successfully produce a |ViewStateChangedEvent|.
> 
> Follow up work involves testing additional apps (for now we just test
> the bouncing_ball app), and verifying more stuff (e.g., pixel test that
> the screen is not black when we know the screen should be "something").
> Let's keep the scope small for now though.
> 
> A big thanks to Mike and Mikael for pair collaborating on this, and
> also Ross for writing the scenic pixel tests, which this test is heavily
> based on.
> 
> Test: CQ
> fx run-test scenic_tests -t gfx_viewstate_apptests
> 
> Change-Id: Ia12ac0b6e90b9db2c20ee411c35738540ab8dd61

TBR=mikejurka@google.com,rosswang@google.com,nathanrogers@google.com,mikaelpessa@google.com

Change-Id: If51ad885260ca4609e81cf1a9e30d80494ee8832
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
diff --git a/bin/ui/BUILD.gn b/bin/ui/BUILD.gn
index c7344e8..82bc475 100644
--- a/bin/ui/BUILD.gn
+++ b/bin/ui/BUILD.gn
@@ -42,16 +42,6 @@
       ]
     },
     {
-      name = "gfx_viewstate_apptests"
-      environments = [
-        {
-          dimensions = {
-            device_type = "Intel NUC Kit NUC7i5DNHE"
-          }
-        },
-      ]
-    },
-    {
       name = "gfx_unittests"
     },
     {
diff --git a/bin/ui/meta/gfx_view_state_tests.cmx b/bin/ui/meta/gfx_view_state_tests.cmx
deleted file mode 100644
index 5f3fa26..0000000
--- a/bin/ui/meta/gfx_view_state_tests.cmx
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-    "program": {
-        "binary": "test/gfx_view_state_tests"
-    },
-    "sandbox": {
-        "features": [
-            "system-temp"
-        ],
-        "services": [
-            "fuchsia.sys.Environment",
-            "fuchsia.sys.Loader"
-        ]
-    }
-}
diff --git a/examples/ui/hello_base_view/view.cc b/examples/ui/hello_base_view/view.cc
index 6061ac3..c8c2a3b 100644
--- a/examples/ui/hello_base_view/view.cc
+++ b/examples/ui/hello_base_view/view.cc
@@ -32,8 +32,7 @@
 void ShadertoyEmbedderView::LaunchShadertoyClient() {
   FXL_DCHECK(!view_holder_);
 
-  embedded_view_info_ = scenic::LaunchComponentAndCreateView(
-      startup_context()->launcher(),
+  embedded_view_info_ = LaunchComponentAndCreateView(
       "fuchsia-pkg://fuchsia.com/shadertoy_client#meta/shadertoy_client.cmx");
 
   view_holder_ = std::make_unique<scenic::ViewHolder>(
diff --git a/examples/ui/hello_base_view/view.h b/examples/ui/hello_base_view/view.h
index a702a79..b103f69 100644
--- a/examples/ui/hello_base_view/view.h
+++ b/examples/ui/hello_base_view/view.h
@@ -43,7 +43,7 @@
   scenic::EntityNode node_;
   scenic::ShapeNode background_;
 
-  scenic::EmbeddedViewInfo embedded_view_info_;
+  scenic::BaseView::EmbeddedViewInfo embedded_view_info_;
   std::unique_ptr<scenic::ViewHolder> view_holder_;
 
   bool focused_;
diff --git a/lib/ui/gfx/tests/BUILD.gn b/lib/ui/gfx/tests/BUILD.gn
index 36cd31c..5f1f376 100644
--- a/lib/ui/gfx/tests/BUILD.gn
+++ b/lib/ui/gfx/tests/BUILD.gn
@@ -10,7 +10,6 @@
     ":apptests",
     ":pixeltests",
     ":unittests",
-    ":viewstate_apptests",
   ]
 }
 
@@ -134,34 +133,6 @@
   ]
 }
 
-executable("viewstate_apptests") {
-  output_name = "gfx_viewstate_apptests"
-
-  testonly = true
-  sources = [
-    "gfx_viewstate_apptest.cc",
-  ]
-  include_dirs = [
-    "//garnet/public/lib/escher",
-    "//third_party/glm",
-  ]
-  deps = [
-    "//garnet/public/fidl/fuchsia.sys",
-    "//garnet/public/fidl/fuchsia.ui.app",
-    "//garnet/public/fidl/fuchsia.ui.policy",
-    "//garnet/public/fidl/fuchsia.ui.scenic",
-    "//garnet/public/lib/component/cpp/testing",
-    "//garnet/public/lib/fsl",
-    "//garnet/public/lib/fxl",
-    "//garnet/public/lib/gtest",
-    "//garnet/public/lib/ui/base_view/cpp",
-    "//garnet/public/lib/ui/gfx/cpp",
-    "//garnet/public/lib/ui/scenic/cpp",
-    "//third_party/googletest:gtest_main",
-    "//zircon/public/lib/async-cpp",
-  ]
-}
-
 executable("mock_pose_buffer_provider_cc") {
   output_name = "mock_pose_buffer_provider"
 
diff --git a/lib/ui/gfx/tests/gfx_viewstate_apptest.cc b/lib/ui/gfx/tests/gfx_viewstate_apptest.cc
deleted file mode 100644
index aa0ed3e..0000000
--- a/lib/ui/gfx/tests/gfx_viewstate_apptest.cc
+++ /dev/null
@@ -1,175 +0,0 @@
-// Copyright 2019 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <fuchsia/ui/app/cpp/fidl.h>
-#include <fuchsia/ui/gfx/cpp/fidl.h>
-#include <fuchsia/ui/input/cpp/fidl.h>
-#include <fuchsia/ui/policy/cpp/fidl.h>
-#include <fuchsia/ui/scenic/cpp/fidl.h>
-#include <gtest/gtest.h>
-#include <lib/async/cpp/task.h>
-#include <lib/component/cpp/testing/test_with_environment.h>
-#include <lib/fsl/vmo/vector.h>
-#include <lib/fxl/logging.h>
-#include <lib/fxl/strings/string_printf.h>
-#include <lib/ui/base_view/cpp/base_view.h>
-#include <lib/ui/base_view/cpp/embedded_view_utils.h>
-#include <lib/ui/gfx/cpp/math.h>
-#include <lib/ui/scenic/cpp/resources.h>
-#include <lib/ui/scenic/cpp/session.h>
-
-#include "lib/component/cpp/startup_context.h"
-#include "lib/svc/cpp/services.h"
-#include "lib/ui/scenic/cpp/resources.h"
-#include "lib/ui/scenic/cpp/session.h"
-
-#include <map>
-#include <string>
-#include <vector>
-
-namespace {
-
-struct ViewContext {
-  scenic::SessionPtrAndListenerRequest session_and_listener_request;
-  zx::eventpair view_token;
-};
-
-// clang-format off
-const std::map<std::string, std::string> kServices = {
-    {"fuchsia.tracelink.Registry", "fuchsia-pkg://fuchsia.com/trace_manager#meta/trace_manager.cmx"},
-    {"fuchsia.ui.policy.Presenter2", "fuchsia-pkg://fuchsia.com/root_presenter#meta/root_presenter.cmx"},
-    {"fuchsia.ui.scenic.Scenic", "fuchsia-pkg://fuchsia.com/scenic#meta/scenic.cmx"},
-    {"fuchsia.vulkan.loader.Loader", "fuchsia-pkg://fuchsia.com/vulkan_loader#meta/vulkan_loader.cmx"},
-};
-// clang-format on
-
-class EmbedderView : public fuchsia::ui::scenic::SessionListener {
- public:
-  EmbedderView(ViewContext context, scenic::EmbeddedViewInfo info,
-               const std::string& debug_name = "EmbedderView")
-      : binding_(this, std::move(context.session_and_listener_request.second)),
-        session_(std::move(context.session_and_listener_request.first)),
-        view_(&session_, std::move(context.view_token), debug_name),
-        embedded_view_info_(std::move(info)),
-        view_holder_(&session_,
-                     std::move(embedded_view_info_.view_holder_token),
-                     debug_name + " ViewHolder"),
-        top_node_(&session_) {
-    binding_.set_error_handler([](zx_status_t status) { FAIL() << status; });
-    view_.AddChild(top_node_);
-    top_node_.Attach(view_holder_);
-    // Call |Session::Present| in order to flush events having to do with
-    // creation of |view_| and |top_node_|.
-    session_.Present(0, [](auto) {});
-  }
-
-  void SetViewStateChangedCallback(
-      std::function<void(fuchsia::ui::gfx::ViewState)> callback) {
-    view_state_changed_callback_ = std::move(callback);
-  }
-
- private:
-  void OnScenicEvent(std::vector<fuchsia::ui::scenic::Event> events) override {
-    for (const auto& event : events) {
-      if (event.Which() == fuchsia::ui::scenic::Event::Tag::kGfx &&
-          event.gfx().Which() ==
-              fuchsia::ui::gfx::Event::Tag::kViewPropertiesChanged) {
-        const auto& evt = event.gfx().view_properties_changed();
-        view_holder_.SetViewProperties(std::move(evt.properties));
-        session_.Present(0, [](auto) {});
-      } else if (event.Which() == fuchsia::ui::scenic::Event::Tag::kGfx &&
-                 event.gfx().Which() ==
-                     fuchsia::ui::gfx::Event::Tag::kViewStateChanged) {
-        const auto& evt = event.gfx().view_state_changed();
-        if (evt.view_holder_id == view_holder_.id()) {
-          // Clients of |EmbedderView| *must* set a view state changed
-          // callback.  Failure to do so is a usage error.
-          FXL_DCHECK(view_state_changed_callback_);
-          view_state_changed_callback_(evt.state);
-        }
-      }
-    }
-  }
-
-  void OnScenicError(std::string error) override { FAIL() << error; }
-
-  fidl::Binding<fuchsia::ui::scenic::SessionListener> binding_;
-  scenic::Session session_;
-  scenic::View view_;
-  scenic::EmbeddedViewInfo embedded_view_info_;
-  scenic::ViewHolder view_holder_;
-  scenic::EntityNode top_node_;
-  std::function<void(fuchsia::ui::gfx::ViewState)> view_state_changed_callback_;
-};
-
-// Test fixture that sets up an environment suitable for Scenic pixel tests
-// and provides related utilities. The environment includes Scenic and
-// RootPresenter, and their dependencies.
-class ViewEmbedderTest : public component::testing::TestWithEnvironment {
- protected:
-  ViewEmbedderTest() {
-    std::unique_ptr<component::testing::EnvironmentServices> services =
-        CreateServices();
-
-    for (const auto& [service_name, url] : kServices) {
-      fuchsia::sys::LaunchInfo launch_info;
-      launch_info.url = url;
-      services->AddServiceWithLaunchInfo(std::move(launch_info), service_name);
-    }
-
-    constexpr char kEnvironment[] = "ViewEmbedderTest";
-    environment_ =
-        CreateNewEnclosingEnvironment(kEnvironment, std::move(services));
-
-    environment_->ConnectToService(scenic_.NewRequest());
-    scenic_.set_error_handler([this](zx_status_t status) {
-      FAIL() << "Lost connection to Scenic: " << status;
-    });
-  }
-
-  // Create a |ViewContext| that allows us to present a view via
-  // |RootPresenter|. See also examples/ui/hello_base_view
-  ViewContext CreatePresentationContext() {
-    zx::eventpair view_holder_token, view_token;
-    FXL_CHECK(zx::eventpair::create(0u, &view_holder_token, &view_token) ==
-              ZX_OK);
-
-    ViewContext view_context = {
-        .session_and_listener_request =
-            scenic::CreateScenicSessionPtrAndListenerRequest(scenic_.get()),
-        .view_token = std::move(view_token),
-    };
-
-    fuchsia::ui::policy::Presenter2Ptr presenter;
-    environment_->ConnectToService(presenter.NewRequest());
-    presenter->PresentView(std::move(view_holder_token), nullptr);
-
-    return view_context;
-  }
-
-  fuchsia::ui::scenic::ScenicPtr scenic_;
-  std::unique_ptr<component::testing::EnclosingEnvironment> environment_;
-};
-
-TEST_F(ViewEmbedderTest, BouncingBall) {
-  auto info = scenic::LaunchComponentAndCreateView(
-      environment_->launcher_ptr(),
-      "fuchsia-pkg://fuchsia.com/bouncing_ball#meta/bouncing_ball.cmx", {});
-
-  EmbedderView embedder_view(CreatePresentationContext(), std::move(info));
-
-  // Run the loop until we observe the view state changing, or hit a 10 second
-  // timeout.
-  bool view_state_changed_observed = false;
-  embedder_view.SetViewStateChangedCallback(
-      [this, &view_state_changed_observed](auto view_state) {
-        view_state_changed_observed = true;
-        async::PostTask(dispatcher(), QuitLoopClosure());
-      });
-  RunLoopWithTimeout(zx::sec(10));
-
-  EXPECT_TRUE(view_state_changed_observed);
-}
-
-}  // namespace
diff --git a/public/lib/ui/base_view/cpp/BUILD.gn b/public/lib/ui/base_view/cpp/BUILD.gn
index c875514..bcc0593 100644
--- a/public/lib/ui/base_view/cpp/BUILD.gn
+++ b/public/lib/ui/base_view/cpp/BUILD.gn
@@ -6,8 +6,6 @@
   sources = [
     "base_view.cc",
     "base_view.h",
-    "embedded_view_utils.cc",
-    "embedded_view_utils.h",
     "v1_base_view.cc",
     "v1_base_view.h",
     "view_provider_component.cc",
diff --git a/public/lib/ui/base_view/cpp/base_view.cc b/public/lib/ui/base_view/cpp/base_view.cc
index 2d69ac6..8abedac 100644
--- a/public/lib/ui/base_view/cpp/base_view.cc
+++ b/public/lib/ui/base_view/cpp/base_view.cc
@@ -40,6 +40,37 @@
   listener_binding_.set_error_handler(std::move(callback));
 }
 
+BaseView::EmbeddedViewInfo BaseView::LaunchComponentAndCreateView(
+    std::string component_url, std::vector<std::string> component_args) {
+  auto& launcher = startup_context_->launcher();
+  FXL_DCHECK(launcher) << "no Launcher available.";
+
+  zx::eventpair view_holder_token, view_token;
+  auto status = zx::eventpair::create(0u, &view_holder_token, &view_token);
+  FXL_DCHECK(status == ZX_OK) << "failed to create tokens.";
+
+  EmbeddedViewInfo info;
+  info.view_holder_token = std::move(view_holder_token);
+
+  launcher->CreateComponent(
+      {.url = component_url,
+       .arguments = fidl::VectorPtr(std::vector<std::string>(
+           component_args.begin(), component_args.end())),
+       .directory_request = info.app_services.NewRequest()},
+      info.controller.NewRequest());
+
+  info.app_services.ConnectToService(info.view_provider.NewRequest());
+
+  fidl::InterfaceHandle<fuchsia::sys::ServiceProvider> services_to_child_view;
+  info.services_to_child_view = services_to_child_view.NewRequest();
+
+  info.view_provider->CreateView(std::move(view_token),
+                                 info.services_from_child_view.NewRequest(),
+                                 std::move(services_to_child_view));
+
+  return info;
+}
+
 void BaseView::InvalidateScene() {
   if (invalidate_pending_)
     return;
diff --git a/public/lib/ui/base_view/cpp/base_view.h b/public/lib/ui/base_view/cpp/base_view.h
index 55537d4..4fdea10 100644
--- a/public/lib/ui/base_view/cpp/base_view.h
+++ b/public/lib/ui/base_view/cpp/base_view.h
@@ -12,7 +12,6 @@
 
 #include "lib/component/cpp/startup_context.h"
 #include "lib/svc/cpp/services.h"
-#include "lib/ui/base_view/cpp/embedded_view_utils.h"
 #include "lib/ui/scenic/cpp/resources.h"
 #include "lib/ui/scenic/cpp/session.h"
 
@@ -92,6 +91,48 @@
   // associated with the view (including the object itself).
   void SetReleaseHandler(fit::function<void(zx_status_t)> callback);
 
+  // Serves as the return value for LaunchAppAndCreateView(), below.
+  struct EmbeddedViewInfo {
+    // Controls the launched app.  The app will be destroyed if this connection
+    // is closed.
+    fuchsia::sys::ComponentControllerPtr controller;
+
+    // Services provided by the launched app.  Must not be destroyed
+    // immediately, otherwise the |view_provider| connection may not be
+    // established.
+    component::Services app_services;
+
+    // ViewProvider service obtained from the app via |app_services|.  Must not
+    // be destroyed immediately, otherwise the call to CreateView() might not
+    // be processed.
+    fuchsia::ui::app::ViewProviderPtr view_provider;
+
+    // A token that can be used to create a ViewHolder; the corresponding token
+    // was provided to |view_provider| via ViewProvider.CreateView().  The
+    // launched app is expected to create a View, which will be connected to
+    // the ViewHolder created with this token.
+    zx::eventpair view_holder_token;
+
+    // Handle to services provided by ViewProvider.CreateView().
+    fidl::InterfaceHandle<fuchsia::sys::ServiceProvider>
+        services_from_child_view;
+
+    // Interface request for services provided to ViewProvider.CreateView();
+    // the caller of LaunchAppAndCreateView() may choose to attach this request
+    // to a ServiceProvider implementation.
+    fidl::InterfaceRequest<fuchsia::sys::ServiceProvider>
+        services_to_child_view;
+  };
+
+  // Launch a component and connect to its ViewProvider service, passing it the
+  // necessary information to attach itself as a child view.  Populates the
+  // returned EmbeddedViewInfo, which the caller can use to embed the child.
+  // For example, an interface to a ViewProvider is obtained, a pair of
+  // zx::eventpairs is created, CreateView is called, etc.  This encapsulates
+  // the boilerplate the the client would otherwise write themselves.
+  EmbeddedViewInfo LaunchComponentAndCreateView(
+      std::string component_url, std::vector<std::string> component_args = {});
+
   // Invalidates the scene, causing |OnSceneInvalidated()| to be invoked
   // during the next frame.
   void InvalidateScene();
diff --git a/public/lib/ui/base_view/cpp/embedded_view_utils.cc b/public/lib/ui/base_view/cpp/embedded_view_utils.cc
deleted file mode 100644
index f06c042..0000000
--- a/public/lib/ui/base_view/cpp/embedded_view_utils.cc
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2019 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "lib/ui/base_view/cpp/embedded_view_utils.h"
-
-#include "lib/fxl/logging.h"
-
-namespace scenic {
-
-EmbeddedViewInfo LaunchComponentAndCreateView(
-    const fuchsia::sys::LauncherPtr& launcher, const std::string& component_url,
-    const std::vector<std::string>& component_args) {
-  FXL_DCHECK(launcher);
-
-  zx::eventpair view_holder_token, view_token;
-  auto status = zx::eventpair::create(0u, &view_holder_token, &view_token);
-  FXL_DCHECK(status == ZX_OK) << "failed to create tokens.";
-
-  EmbeddedViewInfo info;
-  info.view_holder_token = std::move(view_holder_token);
-
-  launcher->CreateComponent(
-      {.url = component_url,
-       .arguments = fidl::VectorPtr(std::vector<std::string>(
-           component_args.begin(), component_args.end())),
-       .directory_request = info.app_services.NewRequest()},
-      info.controller.NewRequest());
-
-  info.app_services.ConnectToService(info.view_provider.NewRequest());
-
-  fidl::InterfaceHandle<fuchsia::sys::ServiceProvider> services_to_child_view;
-  info.services_to_child_view = services_to_child_view.NewRequest();
-
-  info.view_provider->CreateView(std::move(view_token),
-                                 info.services_from_child_view.NewRequest(),
-                                 std::move(services_to_child_view));
-
-  return info;
-}
-
-}  // namespace scenic
diff --git a/public/lib/ui/base_view/cpp/embedded_view_utils.h b/public/lib/ui/base_view/cpp/embedded_view_utils.h
deleted file mode 100644
index 95802c2..0000000
--- a/public/lib/ui/base_view/cpp/embedded_view_utils.h
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2019 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_UI_BASE_VIEW_CPP_EMBEDDED_VIEW_UTILS_H_
-#define LIB_UI_BASE_VIEW_CPP_EMBEDDED_VIEW_UTILS_H_
-
-#include <fuchsia/ui/app/cpp/fidl.h>
-#include <fuchsia/ui/gfx/cpp/fidl.h>
-#include <fuchsia/ui/input/cpp/fidl.h>
-#include <fuchsia/ui/scenic/cpp/fidl.h>
-
-#include "lib/component/cpp/startup_context.h"
-#include "lib/svc/cpp/services.h"
-#include "lib/ui/scenic/cpp/resources.h"
-#include "lib/ui/scenic/cpp/session.h"
-
-namespace scenic {
-
-// Serves as the return value for LaunchAppAndCreateView(), below.
-struct EmbeddedViewInfo {
-  // Controls the launched app.  The app will be destroyed if this connection
-  // is closed.
-  fuchsia::sys::ComponentControllerPtr controller;
-
-  // Services provided by the launched app.  Must not be destroyed
-  // immediately, otherwise the |view_provider| connection may not be
-  // established.
-  component::Services app_services;
-
-  // ViewProvider service obtained from the app via |app_services|.  Must not
-  // be destroyed immediately, otherwise the call to CreateView() might not be
-  // processed.
-  fuchsia::ui::app::ViewProviderPtr view_provider;
-
-  // A token that can be used to create a ViewHolder; the corresponding token
-  // was provided to |view_provider| via ViewProvider.CreateView().  The
-  // launched app is expected to create a View, which will be connected to the
-  // ViewHolder created with this token.
-  zx::eventpair view_holder_token;
-
-  // Handle to services provided by ViewProvider.CreateView().
-  fidl::InterfaceHandle<fuchsia::sys::ServiceProvider> services_from_child_view;
-
-  // Interface request for services provided to ViewProvider.CreateView(); the
-  // caller of LaunchAppAndCreateView() may choose to attach this request to a
-  // ServiceProvider implementation.
-  fidl::InterfaceRequest<fuchsia::sys::ServiceProvider> services_to_child_view;
-};
-
-// Launch a component and connect to its ViewProvider service, passing it the
-// necessary information to attach itself as a child view.  Populates the
-// returned EmbeddedViewInfo, which the caller can use to embed the child.
-// For example, an interface to a ViewProvider is obtained, a pair of
-// zx::eventpairs is created, CreateView is called, etc.  This encapsulates
-// the boilerplate the the client would otherwise write themselves.
-EmbeddedViewInfo LaunchComponentAndCreateView(
-    const fuchsia::sys::LauncherPtr& launcher, const std::string& component_url,
-    const std::vector<std::string>& component_args = {});
-
-}  // namespace scenic
-
-#endif  // LIB_UI_BASE_VIEW_CPP_EMBEDDED_VIEW_UTILS_H_