diff --git a/sky/engine/bindings/internals.dart b/sky/engine/bindings/internals.dart index e076f0ac7d0..bfa0f08e029 100644 --- a/sky/engine/bindings/internals.dart +++ b/sky/engine/bindings/internals.dart @@ -11,3 +11,4 @@ int takeServiceRegistry() native "takeServiceRegistry"; int takeServicesProvidedByEmbedder() native "takeServicesProvidedByEmbedder"; int takeServicesProvidedToEmbedder() native "takeServicesProvidedToEmbedder"; int takeShellProxyHandle() native "takeShellProxyHandle"; +int takeViewHostHandle() native "takeViewHostHandle"; diff --git a/sky/services/engine/BUILD.gn b/sky/services/engine/BUILD.gn index cee7cf016f1..03b99313e04 100644 --- a/sky/services/engine/BUILD.gn +++ b/sky/services/engine/BUILD.gn @@ -15,6 +15,7 @@ mojom("interfaces") { "//mojo/services/asset_bundle/interfaces", "//mojo/services/gfx/composition/interfaces", "//mojo/services/service_registry/interfaces", + "//mojo/services/ui/views/interfaces", "//sky/services/pointer:interfaces", ] } diff --git a/sky/services/engine/sky_engine.mojom b/sky/services/engine/sky_engine.mojom index 1064f99ec96..647e162ddc7 100644 --- a/sky/services/engine/sky_engine.mojom +++ b/sky/services/engine/sky_engine.mojom @@ -9,6 +9,7 @@ import "mojo/public/interfaces/application/shell.mojom"; import "mojo/services/asset_bundle/interfaces/asset_bundle.mojom"; import "mojo/services/gfx/composition/interfaces/scheduling.mojom"; import "mojo/services/service_registry/interfaces/service_registry.mojom"; +import "mojo/services/ui/views/interfaces/views.mojom"; import "sky/services/engine/input_event.mojom"; import "sky/services/pointer/pointer.mojom"; @@ -32,6 +33,7 @@ struct ServicesData { mojo.ServiceRegistry? service_registry; mojo.ServiceProvider? services_provided_by_embedder; mojo.ServiceProvider&? services_provided_to_embedder; + mojo.ui.ViewHost? view_host; mojo.gfx.composition.SceneScheduler? scene_scheduler; }; diff --git a/sky/shell/platform/mojo/view_impl.cc b/sky/shell/platform/mojo/view_impl.cc index e1c3013899e..f885561d611 100644 --- a/sky/shell/platform/mojo/view_impl.cc +++ b/sky/shell/platform/mojo/view_impl.cc @@ -17,14 +17,16 @@ ViewImpl::ViewImpl(ServicesDataPtr services, : binding_(this), url_(url), listener_binding_(this) { DCHECK(services); + mojo::ui::ViewHostPtr view_host; + // Views mojo::ConnectToService( services->shell.get(), "mojo:view_manager_service", &view_manager_); mojo::ui::ViewPtr view; binding_.Bind(mojo::GetProxy(&view)); view_manager_->RegisterView( - view.Pass(), mojo::GetProxy(&view_host_), url_, callback); - view_host_->GetServiceProvider(mojo::GetProxy(&view_service_provider_)); + view.Pass(), mojo::GetProxy(&view_host), url_, callback); + view_host->GetServiceProvider(mojo::GetProxy(&view_service_provider_)); // Input mojo::ConnectToService(view_service_provider_.get(), &input_connection_); @@ -34,8 +36,9 @@ ViewImpl::ViewImpl(ServicesDataPtr services, // Compositing mojo::gfx::composition::ScenePtr scene; - view_host_->CreateScene(mojo::GetProxy(&scene)); + view_host->CreateScene(mojo::GetProxy(&scene)); scene->GetScheduler(mojo::GetProxy(&services->scene_scheduler)); + services->view_host = view_host.Pass(); // Engine shell_view_.reset(new ShellView(Shell::Shared())); diff --git a/sky/shell/platform/mojo/view_impl.h b/sky/shell/platform/mojo/view_impl.h index c3500684aab..08a12b2b16b 100644 --- a/sky/shell/platform/mojo/view_impl.h +++ b/sky/shell/platform/mojo/view_impl.h @@ -49,7 +49,6 @@ class ViewImpl : public mojo::ui::View, mojo::StrongBinding binding_; std::string url_; mojo::ui::ViewManagerPtr view_manager_; - mojo::ui::ViewHostPtr view_host_; mojo::ServiceProviderPtr view_service_provider_; mojo::ui::InputConnectionPtr input_connection_; mojo::Binding listener_binding_; diff --git a/sky/shell/ui/internals.cc b/sky/shell/ui/internals.cc index df957ebcad1..4cc76e4f803 100644 --- a/sky/shell/ui/internals.cc +++ b/sky/shell/ui/internals.cc @@ -51,6 +51,11 @@ void TakeServicesProvidedToEmbedder(Dart_NativeArguments args) { args, GetInternals()->TakeServicesProvidedToEmbedder().value()); } +void TakeViewHostHandle(Dart_NativeArguments args) { + Dart_SetIntegerReturnValue( + args, GetInternals()->TakeViewHostHandle().value()); +} + static DartLibraryNatives* g_natives; void EnsureNatives() { @@ -63,6 +68,7 @@ void EnsureNatives() { {"takeServicesProvidedByEmbedder", TakeServicesProvidedByEmbedder, 0, true}, {"takeServicesProvidedToEmbedder", TakeServicesProvidedToEmbedder, 0, true}, {"takeShellProxyHandle", TakeShellProxyHandle, 0, true}, + {"takeViewHostHandle", TakeViewHostHandle, 0, true}, }); } @@ -136,5 +142,9 @@ mojo::Handle Internals::TakeServicesProvidedToEmbedder() { return services_provided_to_embedder_.PassMessagePipe().release(); } +mojo::Handle Internals::TakeViewHostHandle() { + return services_ ? services_->view_host.PassInterface().PassHandle().release() : mojo::Handle(); +} + } // namespace shell } // namespace sky diff --git a/sky/shell/ui/internals.h b/sky/shell/ui/internals.h index 51d609e8432..21470b02607 100644 --- a/sky/shell/ui/internals.h +++ b/sky/shell/ui/internals.h @@ -35,6 +35,7 @@ class Internals mojo::Handle TakeServicesProvidedByEmbedder(); mojo::Handle TakeServicesProvidedToEmbedder(); mojo::Handle TakeRootBundleHandle(); + mojo::Handle TakeViewHostHandle(); private: explicit Internals(ServicesDataPtr services,