Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1367)

Unified Diff: services/ui/launcher/launch_instance.cc

Issue 1949233002: Create a RegisterViewAssociate method in ViewManager (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: one more compile fix Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();

Powered by Google App Engine
This is Rietveld 408576698