[guest] Soft transition from component -> sys.

Once all consumers are on sys::ComponentContext we can remove the
component::StartupContext code paths.

Change-Id: If85c15c339b4591f891085a08ca63a7993856ffe
diff --git a/garnet/public/lib/guest/BUILD.gn b/garnet/public/lib/guest/BUILD.gn
index 85ea6a3..cd89038 100644
--- a/garnet/public/lib/guest/BUILD.gn
+++ b/garnet/public/lib/guest/BUILD.gn
@@ -15,6 +15,7 @@
     "//sdk/fidl/fuchsia.sys",
     "//sdk/fidl/fuchsia.ui.app",
     "//sdk/fidl/fuchsia.wayland",
+    "//sdk/lib/sys/cpp",
     "//src/lib/fxl",
   ]
 }
diff --git a/garnet/public/lib/guest/scenic_wayland_dispatcher.cc b/garnet/public/lib/guest/scenic_wayland_dispatcher.cc
index 9ac6c63..70febf0 100644
--- a/garnet/public/lib/guest/scenic_wayland_dispatcher.cc
+++ b/garnet/public/lib/guest/scenic_wayland_dispatcher.cc
@@ -24,8 +24,7 @@
         .url = kWaylandDispatcherPackage,
         .directory_request = services.NewRequest(),
     };
-    context_->launcher()->CreateComponent(std::move(launch_info),
-                                          bridge_.NewRequest());
+    ConnectToLauncher()->CreateComponent(std::move(launch_info), bridge_.NewRequest());
     // If we hit an error just close the bridge. It will get relaunched in
     // response to the next new connection.
     bridge_.set_error_handler(
@@ -59,4 +58,14 @@
   listener_(std::move(view));
 }
 
+fuchsia::sys::LauncherPtr ScenicWaylandDispatcher::ConnectToLauncher() const {
+  fuchsia::sys::LauncherPtr launcher;
+  if (deprecated_context_) {
+    deprecated_context_->ConnectToEnvironmentService(launcher.NewRequest());
+  } else {
+    context_->svc()->Connect(launcher.NewRequest());
+  }
+  return launcher;
+}
+
 };  // namespace guest
diff --git a/garnet/public/lib/guest/scenic_wayland_dispatcher.h b/garnet/public/lib/guest/scenic_wayland_dispatcher.h
index 2f97c7d..02713b6 100644
--- a/garnet/public/lib/guest/scenic_wayland_dispatcher.h
+++ b/garnet/public/lib/guest/scenic_wayland_dispatcher.h
@@ -9,6 +9,7 @@
 #include <fuchsia/wayland/cpp/fidl.h>
 #include <lib/component/cpp/startup_context.h>
 #include <lib/fidl/cpp/binding.h>
+#include <lib/sys/cpp/component_context.h>
 #include <lib/zx/channel.h>
 
 namespace guest {
@@ -24,6 +25,10 @@
 
   ScenicWaylandDispatcher(component::StartupContext* context,
                           ViewListener listener = nullptr)
+      : deprecated_context_(context), listener_(std::move(listener)){};
+
+  ScenicWaylandDispatcher(sys::ComponentContext* context,
+                          ViewListener listener = nullptr)
       : context_(context), listener_(std::move(listener)){};
 
   // |fuchsia::guest::WaylandDispatcher|
@@ -34,12 +39,16 @@
   }
 
  private:
+  fuchsia::sys::LauncherPtr ConnectToLauncher() const;
+
   void OnNewView(fidl::InterfaceHandle<fuchsia::ui::app::ViewProvider> view);
   void Reset(zx_status_t status);
 
   fuchsia::guest::WaylandDispatcher* GetOrStartBridge();
 
-  component::StartupContext* context_;
+  component::StartupContext* deprecated_context_;
+  sys::ComponentContext* context_;
+
   ViewListener listener_;
   fidl::Binding<fuchsia::guest::WaylandDispatcher> bindings_{this};
   fuchsia::sys::ComponentControllerPtr bridge_;