| Index: services/ui/launcher/launch_instance.cc
|
| diff --git a/services/ui/launcher/launch_instance.cc b/services/ui/launcher/launch_instance.cc
|
| index c2aa2cbf26146038d47dec8fd4d115f81db39e97..27dfae09d43816ce385b122eb54b03eee7374c5a 100644
|
| --- a/services/ui/launcher/launch_instance.cc
|
| +++ b/services/ui/launcher/launch_instance.cc
|
| @@ -4,8 +4,10 @@
|
|
|
| #include "services/ui/launcher/launch_instance.h"
|
|
|
| +#include "base/bind.h"
|
| #include "base/command_line.h"
|
| #include "base/logging.h"
|
| +#include "base/strings/string_split.h"
|
| #include "base/trace_event/trace_event.h"
|
| #include "mojo/application/application_runner_chromium.h"
|
| #include "mojo/public/c/system/main.h"
|
| @@ -18,9 +20,11 @@ namespace launcher {
|
|
|
| LaunchInstance::LaunchInstance(mojo::ApplicationImpl* app_impl,
|
| const std::string& app_url,
|
| + const std::string& view_associate_urls,
|
| const base::Closure& shutdown_callback)
|
| : app_impl_(app_impl),
|
| app_url_(app_url),
|
| + view_associate_urls_(view_associate_urls),
|
| shutdown_callback_(shutdown_callback),
|
| viewport_event_dispatcher_binding_(this) {}
|
|
|
| @@ -40,6 +44,35 @@ void LaunchInstance::Launch() {
|
| view_manager_.set_connection_error_handler(base::Bind(
|
| &LaunchInstance::OnViewManagerConnectionError, base::Unretained(this)));
|
|
|
| + // Connect to ViewAssociates.
|
| + std::vector<std::string> associate_urls = SplitString(
|
| + view_associate_urls_, ",", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL);
|
| + if (associate_urls.empty()) {
|
| + // TODO(jeffbrown): Replace this hardcoded list.
|
| + associate_urls.push_back("mojo:input_manager_service");
|
| + }
|
| +
|
| + view_associate_owners_.reserve(associate_urls.size());
|
| +
|
| + for (const auto& url : associate_urls) {
|
| + // Connect to the ViewAssociate.
|
| + DVLOG(2) << "Connecting to ViewAssociate " << url;
|
| + mojo::ui::ViewAssociatePtr view_associate;
|
| + mojo::ConnectToService(app_impl_->shell(), url, GetProxy(&view_associate));
|
| +
|
| + // Wire up the associate to the ViewManager.
|
| + mojo::ui::ViewAssociateOwnerPtr view_associate_owner;
|
| + view_manager_->RegisterViewAssociate(view_associate.Pass(),
|
| + GetProxy(&view_associate_owner), url);
|
| +
|
| + view_associate_owner.set_connection_error_handler(
|
| + base::Bind(&LaunchInstance::OnViewAssociateConnectionError,
|
| + base::Unretained(this)));
|
| +
|
| + view_associate_owners_.push_back(view_associate_owner.Pass());
|
| + }
|
| + view_manager_->FinishedRegisteringViewAssociates();
|
| +
|
| InitViewport();
|
|
|
| mojo::ui::ViewProviderPtr client_view_provider;
|
| @@ -50,6 +83,11 @@ void LaunchInstance::Launch() {
|
| nullptr);
|
| }
|
|
|
| +void LaunchInstance::OnViewAssociateConnectionError() {
|
| + LOG(ERROR) << "Exiting due to view associate connection error.";
|
| + shutdown_callback_.Run();
|
| +};
|
| +
|
| void LaunchInstance::OnCompositorConnectionError() {
|
| LOG(ERROR) << "Exiting due to compositor connection error.";
|
| shutdown_callback_.Run();
|
|
|