Index: mojo/shell/application_manager.cc |
diff --git a/mojo/shell/application_manager.cc b/mojo/shell/application_manager.cc |
index 58e047e5c88fb97deb653e21497becc5fc996b50..b2c4a49ef1bcb00488dabfabdf3539d51cc27db9 100644 |
--- a/mojo/shell/application_manager.cc |
+++ b/mojo/shell/application_manager.cc |
@@ -92,6 +92,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", |
@@ -123,9 +128,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()); |
@@ -136,8 +139,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( |
@@ -194,8 +197,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()); |
@@ -223,7 +225,7 @@ void ApplicationManager::InitPackageManager(bool register_mojo_url_schemes) { |
mojom::ShellClientRequest request; |
GURL url("mojo://package_manager/"); |
- CreateInstance(Identity(url), base::Closure(), url.spec(), &request); |
+ CreateInstance(Identity(url), url.spec(), &request); |
loader->Load(url, std::move(request)); |
SetLoaderForURL(std::move(loader), url); |
@@ -242,14 +244,12 @@ bool ApplicationManager::ConnectToExistingInstance( |
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; |
@@ -315,9 +315,8 @@ void ApplicationManager::OnGotResolvedURL( |
Identity source = params->source(), target = params->target(); |
mojom::ShellClientRequest request; |
- ApplicationInstance* instance = CreateInstance( |
- params->target(), params->on_application_end(), application_name, |
- &request); |
+ ApplicationInstance* instance = |
+ CreateInstance(params->target(), application_name, &request); |
instance->ConnectToClient(std::move(params)); |
if (LoadWithLoader(target, &request)) |