Update launcher API. Allow caller to specify the native viewport to launch the application on. R=ppi@chromium.org, jeffbrown@google.com Review URL: https://codereview.chromium.org/2003003002 .
diff --git a/services/ui/launcher/BUILD.gn b/services/ui/launcher/BUILD.gn index 289104e..4b37039 100644 --- a/services/ui/launcher/BUILD.gn +++ b/services/ui/launcher/BUILD.gn
@@ -50,4 +50,6 @@ sources = [ "launcher.mojom", ] + + import_dirs = [ get_path_info("../../../mojo/services", "abspath") ] }
diff --git a/services/ui/launcher/launch_instance.cc b/services/ui/launcher/launch_instance.cc index 9c65fcd..ce3149e 100644 --- a/services/ui/launcher/launch_instance.cc +++ b/services/ui/launcher/launch_instance.cc
@@ -12,18 +12,19 @@ #include "mojo/public/c/system/main.h" #include "mojo/public/cpp/application/application_impl.h" #include "mojo/public/cpp/application/connect.h" -#include "mojo/services/ui/views/interfaces/view_provider.mojom.h" #include "services/ui/launcher/launcher_view_tree.h" namespace launcher { LaunchInstance::LaunchInstance(mojo::ApplicationImpl* app_impl, - const std::string& app_url, + mojo::NativeViewportPtr viewport, + mojo::ui::ViewProviderPtr view_provider, mojo::gfx::composition::Compositor* compositor, mojo::ui::ViewManager* view_manager, const base::Closure& shutdown_callback) : app_impl_(app_impl), - app_url_(app_url), + viewport_(viewport.Pass()), + view_provider_(view_provider.Pass()), compositor_(compositor), view_manager_(view_manager), shutdown_callback_(shutdown_callback), @@ -32,21 +33,15 @@ LaunchInstance::~LaunchInstance() {} void LaunchInstance::Launch() { - DVLOG(1) << "Launching " << app_url_; TRACE_EVENT0("launcher", __func__); InitViewport(); - mojo::ui::ViewProviderPtr client_view_provider; - mojo::ConnectToService(app_impl_->shell(), app_url_, - GetProxy(&client_view_provider)); - - client_view_provider->CreateView(GetProxy(&client_view_owner_), nullptr); + view_provider_->CreateView(GetProxy(&client_view_owner_), nullptr); + view_provider_.reset(); } void LaunchInstance::InitViewport() { - mojo::ConnectToService(app_impl_->shell(), "mojo:native_viewport_service", - GetProxy(&viewport_)); viewport_.set_connection_error_handler(base::Bind( &LaunchInstance::OnViewportConnectionError, base::Unretained(this)));
diff --git a/services/ui/launcher/launch_instance.h b/services/ui/launcher/launch_instance.h index 6a9c71b..9e63db0 100644 --- a/services/ui/launcher/launch_instance.h +++ b/services/ui/launcher/launch_instance.h
@@ -15,6 +15,7 @@ #include "mojo/services/native_viewport/interfaces/native_viewport.mojom.h" #include "mojo/services/native_viewport/interfaces/native_viewport_event_dispatcher.mojom.h" #include "mojo/services/ui/views/interfaces/view_manager.mojom.h" +#include "mojo/services/ui/views/interfaces/view_provider.mojom.h" namespace launcher { @@ -23,7 +24,8 @@ class LaunchInstance : public mojo::NativeViewportEventDispatcher { public: LaunchInstance(mojo::ApplicationImpl* app_impl, - const std::string& app_url, + mojo::NativeViewportPtr viewport, + mojo::ui::ViewProviderPtr view_provider, mojo::gfx::composition::Compositor* compositor, mojo::ui::ViewManager* view_manager, const base::Closure& shutdown_callback); @@ -43,13 +45,13 @@ void RequestUpdatedViewportMetrics(); mojo::ApplicationImpl* app_impl_; - std::string app_url_; + mojo::NativeViewportPtr viewport_; + mojo::ui::ViewProviderPtr view_provider_; mojo::gfx::composition::Compositor* compositor_; mojo::ui::ViewManager* view_manager_; base::Closure shutdown_callback_; - mojo::NativeViewportPtr viewport_; mojo::Binding<NativeViewportEventDispatcher> viewport_event_dispatcher_binding_;
diff --git a/services/ui/launcher/launcher.mojom b/services/ui/launcher/launcher.mojom index 2303732..ae25ad0 100644 --- a/services/ui/launcher/launcher.mojom +++ b/services/ui/launcher/launcher.mojom
@@ -4,9 +4,16 @@ module launcher; +import "mojo/services/native_viewport/interfaces/native_viewport.mojom"; +import "mojo/services/ui/views/interfaces/view_provider.mojom"; + // Private interface for the shell. Allows the shell to start an ui // application. [ServiceName="launcher::Launcher"] interface Launcher { Launch(string application_url); + // Displays the view provided by |view_provider| in the provided |viewport|. + // Used by https://manganese.googlesource.com/. + LaunchOnViewport(mojo.NativeViewport viewport, + mojo.ui.ViewProvider view_provider); };
diff --git a/services/ui/launcher/launcher_app.cc b/services/ui/launcher/launcher_app.cc index c231ce6..b29f831 100644 --- a/services/ui/launcher/launcher_app.cc +++ b/services/ui/launcher/launcher_app.cc
@@ -105,11 +105,32 @@ } void LauncherApp::Launch(const mojo::String& application_url) { + DVLOG(1) << "Launching " << application_url; + + mojo::NativeViewportPtr viewport; + mojo::ConnectToService(app_impl_->shell(), "mojo:native_viewport_service", + GetProxy(&viewport)); + + mojo::ui::ViewProviderPtr view_provider; + mojo::ConnectToService(app_impl_->shell(), application_url, + GetProxy(&view_provider)); + + LaunchInternal(viewport.Pass(), view_provider.Pass()); +} +void LauncherApp::LaunchOnViewport( + mojo::InterfaceHandle<mojo::NativeViewport> viewport, + mojo::InterfaceHandle<mojo::ui::ViewProvider> view_provider) { + LaunchInternal(mojo::NativeViewportPtr::Create(viewport.Pass()), + mojo::ui::ViewProviderPtr::Create(view_provider.Pass())); +} + +void LauncherApp::LaunchInternal(mojo::NativeViewportPtr viewport, + mojo::ui::ViewProviderPtr view_provider) { uint32_t next_id = next_id_++; std::unique_ptr<LaunchInstance> instance(new LaunchInstance( - app_impl_, application_url, compositor_.get(), view_manager_.get(), - base::Bind(&LauncherApp::OnLaunchTermination, base::Unretained(this), - next_id))); + app_impl_, viewport.Pass(), view_provider.Pass(), compositor_.get(), + view_manager_.get(), base::Bind(&LauncherApp::OnLaunchTermination, + base::Unretained(this), next_id))); instance->Launch(); launch_instances_.emplace(next_id, std::move(instance)); }
diff --git a/services/ui/launcher/launcher_app.h b/services/ui/launcher/launcher_app.h index f04e645..e15ca4e 100644 --- a/services/ui/launcher/launcher_app.h +++ b/services/ui/launcher/launcher_app.h
@@ -32,7 +32,12 @@ // |Launcher|: void Launch(const mojo::String& application_url) override; + void LaunchOnViewport( + mojo::InterfaceHandle<mojo::NativeViewport> viewport, + mojo::InterfaceHandle<mojo::ui::ViewProvider> view_provider) override; + void LaunchInternal(mojo::NativeViewportPtr viewport, + mojo::ui::ViewProviderPtr view_provider); void OnLaunchTermination(uint32_t id); void OnCompositorConnectionError();