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();