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

Unified Diff: mojo/shell/application_manager.cc

Issue 1714753002: 7/ Eliminate on_application_end from ConnectParams (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@client_request
Patch Set: . Created 4 years, 10 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: mojo/shell/application_manager.cc
diff --git a/mojo/shell/application_manager.cc b/mojo/shell/application_manager.cc
index 03f9c5214ded9fae140649a737a1efdbdbea2493..9695010244c19203a3eaa22e1b918639fbf2074a 100644
--- a/mojo/shell/application_manager.cc
+++ b/mojo/shell/application_manager.cc
@@ -98,6 +98,11 @@ ApplicationManager::~ApplicationManager() {
runner.reset();
}
+void ApplicationManager::SetInstanceQuitCallback(
+ base::Callback<void(const Identity&)> callback) {
+ instance_quit_callback_ = callback;
+}
+
void ApplicationManager::Connect(scoped_ptr<ConnectParams> params) {
TRACE_EVENT_INSTANT1("mojo_shell", "ApplicationManager::Connect",
TRACE_EVENT_SCOPE_THREAD, "original_url",
@@ -129,9 +134,7 @@ void ApplicationManager::TerminateShellConnections() {
void ApplicationManager::OnApplicationInstanceError(
ApplicationInstance* instance) {
- // Called from ~ApplicationInstance, so we do not need to call Destroy here.
const Identity identity = instance->identity();
- base::Closure on_application_end = instance->on_application_end();
// Remove the shell.
auto it = identity_to_instance_.find(identity);
DCHECK(it != identity_to_instance_.end());
@@ -142,8 +145,8 @@ void ApplicationManager::OnApplicationInstanceError(
[this, id](mojom::ApplicationManagerListener* listener) {
listener->ApplicationInstanceDestroyed(id);
});
- if (!on_application_end.is_null())
- on_application_end.Run();
+ if (!instance_quit_callback_.is_null())
+ instance_quit_callback_.Run(identity);
}
ApplicationInstance* ApplicationManager::GetApplicationInstance(
@@ -200,8 +203,7 @@ void ApplicationManager::CreateInstanceForHandle(
Identity target_id(url.To<GURL>(), std::string(), local_filter);
mojom::ShellClientRequest request;
// TODO(beng): do better than url.spec() for application name.
- ApplicationInstance* instance =
- CreateInstance(target_id, base::Closure(), url, &request);
+ ApplicationInstance* instance = CreateInstance(target_id, url, &request);
instance->BindPIDReceiver(std::move(pid_receiver));
scoped_ptr<NativeRunner> runner =
native_runner_factory_->Create(base::FilePath());
@@ -222,19 +224,19 @@ void ApplicationManager::AddListener(
////////////////////////////////////////////////////////////////////////////////
// ApplicationManager, private:
-
-void ApplicationManager::InitPackageManager(bool register_mojo_url_schemes) {
- scoped_ptr<ApplicationLoader> loader(
- new package_manager::Loader(task_runner_, register_mojo_url_schemes));
-
- mojom::ShellClientRequest request;
- GURL url("mojo://package_manager/");
- CreateInstance(Identity(url), base::Closure(), url.spec(), &request);
- loader->Load(url, std::move(request));
-
- SetLoaderForURL(std::move(loader), url);
-
- ConnectToInterface(this, CreateShellIdentity(), url, &shell_resolver_);
+
+void ApplicationManager::InitPackageManager(bool register_mojo_url_schemes) {
+ scoped_ptr<ApplicationLoader> loader(
+ new package_manager::Loader(task_runner_, register_mojo_url_schemes));
+
+ mojom::ShellClientRequest request;
+ GURL url("mojo://package_manager/");
+ CreateInstance(Identity(url), url.spec(), &request);
+ loader->Load(url, std::move(request));
+
+ SetLoaderForURL(std::move(loader), url);
+
+ ConnectToInterface(this, CreateShellIdentity(), url, &shell_resolver_);
}
bool ApplicationManager::ConnectToInstance(scoped_ptr<ConnectParams>* params) {
@@ -247,14 +249,12 @@ bool ApplicationManager::ConnectToInstance(scoped_ptr<ConnectParams>* params) {
ApplicationInstance* ApplicationManager::CreateInstance(
const Identity& target_id,
- const base::Closure& on_application_end,
const String& application_name,
mojom::ShellClientRequest* request) {
mojom::ShellClientPtr shell_client;
*request = GetProxy(&shell_client);
ApplicationInstance* instance = new ApplicationInstance(
- std::move(shell_client), this, target_id, on_application_end,
- application_name);
+ std::move(shell_client), this, target_id, application_name);
DCHECK(identity_to_instance_.find(target_id) ==
identity_to_instance_.end());
identity_to_instance_[target_id] = instance;
@@ -317,40 +317,39 @@ void ApplicationManager::OnGotResolvedURL(
if (ConnectToInstance(&params))
return;
- Identity source = params->source(), target = params->target();
- mojom::ShellClientRequest request;
- ApplicationInstance* instance = CreateInstance(
- params->target(), params->on_application_end(), application_name,
- &request);
- instance->ConnectToClient(std::move(params));
-
- if (LoadWithLoader(target, &request))
- return;
-
- CHECK(!file_url.is_null() && !application_name.is_null() &&
- !base_filter.is_null());
-
- GURL resolved_gurl = resolved_url.To<GURL>();
- if (target.url().spec() != resolved_url) {
- // TODO(beng): this clobbers the CapabilityFilter passed via Connect().
- CapabilityFilter capability_filter = GetPermissiveCapabilityFilter();
- if (!base_filter.is_null())
- capability_filter = base_filter->filter.To<CapabilityFilter>();
-
- CreateShellClient(source, Identity(resolved_gurl, target.qualifier(),
- capability_filter), target.url(), std::move(request));
- } else {
- bool start_sandboxed = false;
- base::FilePath path = util::UrlToFilePath(file_url.To<GURL>());
- scoped_ptr<NativeRunner> runner = native_runner_factory_->Create(path);
- runner->Start(path, start_sandboxed, std::move(request),
- base::Bind(&ApplicationManager::ApplicationPIDAvailable,
- weak_ptr_factory_.GetWeakPtr(), instance->id()),
- base::Bind(&ApplicationManager::CleanupRunner,
- weak_ptr_factory_.GetWeakPtr(), runner.get()));
- instance->SetNativeRunner(runner.get());
- native_runners_.push_back(std::move(runner));
- }
+ Identity source = params->source(), target = params->target();
+ mojom::ShellClientRequest request;
+ ApplicationInstance* instance =
+ CreateInstance(params->target(), application_name, &request);
+ instance->ConnectToClient(std::move(params));
+
+ if (LoadWithLoader(target, &request))
+ return;
+
+ CHECK(!file_url.is_null() && !application_name.is_null() &&
+ !base_filter.is_null());
+
+ GURL resolved_gurl = resolved_url.To<GURL>();
+ if (target.url().spec() != resolved_url) {
+ // TODO(beng): this clobbers the CapabilityFilter passed via Connect().
+ CapabilityFilter capability_filter = GetPermissiveCapabilityFilter();
+ if (!base_filter.is_null())
+ capability_filter = base_filter->filter.To<CapabilityFilter>();
+
+ CreateShellClient(source, Identity(resolved_gurl, target.qualifier(),
+ capability_filter), target.url(), std::move(request));
+ } else {
+ bool start_sandboxed = false;
+ base::FilePath path = util::UrlToFilePath(file_url.To<GURL>());
+ scoped_ptr<NativeRunner> runner = native_runner_factory_->Create(path);
+ runner->Start(path, start_sandboxed, std::move(request),
+ base::Bind(&ApplicationManager::ApplicationPIDAvailable,
+ weak_ptr_factory_.GetWeakPtr(), instance->id()),
+ base::Bind(&ApplicationManager::CleanupRunner,
+ weak_ptr_factory_.GetWeakPtr(), runner.get()));
+ instance->SetNativeRunner(runner.get());
+ native_runners_.push_back(std::move(runner));
+ }
}
bool ApplicationManager::LoadWithLoader(const Identity& target,

Powered by Google App Engine
This is Rietveld 408576698