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

Unified Diff: mojo/shell/shell.cc

Issue 1787083003: Use chrome manifest with embedded shell (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@shell-no-wait
Patch Set: rebase Created 4 years, 9 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
« no previous file with comments | « mojo/shell/shell.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/shell/shell.cc
diff --git a/mojo/shell/shell.cc b/mojo/shell/shell.cc
index 9d24d0dfacf49510e31a3d6b31a69771206eb625..8056a60651a531117d14f516aeadad70061bb2b5 100644
--- a/mojo/shell/shell.cc
+++ b/mojo/shell/shell.cc
@@ -439,36 +439,20 @@ void Shell::SetInstanceQuitCallback(
}
void Shell::Connect(scoped_ptr<ConnectParams> params) {
- TRACE_EVENT_INSTANT1("mojo_shell", "Shell::Connect",
- TRACE_EVENT_SCOPE_THREAD, "original_name",
- params->target().name());
- DCHECK(IsValidName(params->target().name()));
- DCHECK(base::IsValidGUID(params->target().user_id()));
- DCHECK_NE(mojom::kInheritUserID, params->target().user_id());
-
- // Connect to an existing matching instance, if possible.
- if (ConnectToExistingInstance(&params))
- return;
-
- std::string name = params->target().name();
- shell_resolver_->ResolveMojoName(
- name,
- base::Bind(&Shell::OnGotResolvedName,
- weak_ptr_factory_.GetWeakPtr(), base::Passed(&params)));
+ Connect(std::move(params), nullptr);
}
mojom::ShellClientRequest Shell::InitInstanceForEmbedder(
const std::string& name) {
- DCHECK(!embedder_instance_);
+ scoped_ptr<ConnectParams> params(new ConnectParams);
- Identity target(name, mojom::kRootUserID);
- DCHECK(!GetExistingInstance(target));
+ Identity embedder_identity(name, mojom::kRootUserID);
+ params->set_source(embedder_identity);
+ params->set_target(embedder_identity);
mojom::ShellClientPtr client;
mojom::ShellClientRequest request = GetProxy(&client);
- embedder_instance_ =
- CreateInstance(target, GetPermissiveCapabilities(), std::move(client));
- DCHECK(embedder_instance_);
+ Connect(std::move(params), std::move(client));
return request;
}
@@ -535,6 +519,28 @@ void Shell::OnInstanceError(Instance* instance) {
instance_quit_callback_.Run(identity);
}
+void Shell::Connect(scoped_ptr<ConnectParams> params,
+ mojom::ShellClientPtr client) {
+ TRACE_EVENT_INSTANT1("mojo_shell", "Shell::Connect",
+ TRACE_EVENT_SCOPE_THREAD, "original_name",
+ params->target().name());
+ DCHECK(IsValidName(params->target().name()));
+ DCHECK(base::IsValidGUID(params->target().user_id()));
+ DCHECK_NE(mojom::kInheritUserID, params->target().user_id());
+ DCHECK(!client.is_bound() || !identity_to_instance_.count(params->target()));
+
+ // Connect to an existing matching instance, if possible.
+ if (!client.is_bound() && ConnectToExistingInstance(&params))
+ return;
+
+ std::string name = params->target().name();
+ shell_resolver_->ResolveMojoName(
+ name,
+ base::Bind(&Shell::OnGotResolvedName,
+ weak_ptr_factory_.GetWeakPtr(), base::Passed(&params),
+ base::Passed(&client)));
+}
+
Shell::Instance* Shell::GetExistingInstance(const Identity& identity) const {
const auto& it = identity_to_instance_.find(identity);
return it != identity_to_instance_.end() ? it->second : nullptr;
@@ -627,6 +633,7 @@ void Shell::OnShellClientFactoryLost(const Identity& which) {
}
void Shell::OnGotResolvedName(scoped_ptr<ConnectParams> params,
+ mojom::ShellClientPtr client,
const String& resolved_name,
const String& resolved_instance,
mojom::CapabilitySpecPtr capabilities_ptr,
@@ -655,12 +662,20 @@ void Shell::OnGotResolvedName(scoped_ptr<ConnectParams> params,
mojom::ClientProcessConnectionPtr client_process_connection =
params->TakeClientProcessConnection();
- mojom::ShellClientPtr client;
- mojom::ShellClientRequest request = GetProxy(&client);
+
+ mojom::ShellClientRequest request;
+ if (!client.is_bound())
+ request = GetProxy(&client);
+
Instance* instance = CreateInstance(target, capabilities, std::move(client));
instance->ConnectToClient(std::move(params));
- if (LoadWithLoader(target, &request))
+ // If a ShellClientPtr was provided, there's no more work to do: someone
+ // is already holding a corresponding ShellClientRequest.
+ if (!request.is_pending())
+ return;
+
+ if (client_process_connection.is_null() && LoadWithLoader(target, &request))
return;
CHECK(!file_url.is_null() && !capabilities_ptr.is_null());
« no previous file with comments | « mojo/shell/shell.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698