diff --git a/garnet/public/lib/guest/BUILD.gn b/garnet/public/lib/guest/BUILD.gn index 85ea6a3bab116453fa04114b454534adf4bad742..cd890386c63ad522f5aa1f62715e2c68d3772d61 100644 --- a/garnet/public/lib/guest/BUILD.gn +++ b/garnet/public/lib/guest/BUILD.gn @@ -15,6 +15,7 @@ source_set("guest") { "//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 9ac6c631bcdd7c560a7850186ee40971d2550b45..70febf0748de390a8cbe9362a33c6c3e42d6b773 100644 --- a/garnet/public/lib/guest/scenic_wayland_dispatcher.cc +++ b/garnet/public/lib/guest/scenic_wayland_dispatcher.cc @@ -24,8 +24,7 @@ fuchsia::guest::WaylandDispatcher* ScenicWaylandDispatcher::GetOrStartBridge() { .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 @@ void ScenicWaylandDispatcher::OnNewView( 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 2f97c7d3472851be043b20ee7f500c5e9d029124..02713b69812f41f0799bd319e97fa88e4da6d074 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 @@ class ScenicWaylandDispatcher : public fuchsia::guest::WaylandDispatcher { 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 @@ class ScenicWaylandDispatcher : public fuchsia::guest::WaylandDispatcher { } 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_;