| Index: services/service_manager/background/background_service_manager.cc
|
| diff --git a/services/service_manager/background/background_service_manager.cc b/services/service_manager/background/background_service_manager.cc
|
| index 09b2e86403d2aac3c3e72664e8578fe06a374450..d74a8a61b34d032446aa9d7b984a8a513f4fbae3 100644
|
| --- a/services/service_manager/background/background_service_manager.cc
|
| +++ b/services/service_manager/background/background_service_manager.cc
|
| @@ -25,6 +25,19 @@
|
| #include "services/service_manager/standalone/context.h"
|
|
|
| namespace service_manager {
|
| +namespace {
|
| +
|
| +// Calls |callback| on |callback_task_runner|'s thread.
|
| +void CallCallbackWithIdentity(
|
| + const scoped_refptr<base::TaskRunner> callback_task_runner,
|
| + const base::Callback<void(const Identity&)>& callback,
|
| + const Identity& identity) {
|
| + DCHECK(callback);
|
| + DCHECK(identity.IsValid());
|
| + callback_task_runner->PostTask(FROM_HERE, base::Bind(callback, identity));
|
| +}
|
| +
|
| +} // namespace
|
|
|
| BackgroundServiceManager::BackgroundServiceManager(
|
| service_manager::ServiceProcessLauncher::Delegate* launcher_delegate,
|
| @@ -62,6 +75,29 @@ void BackgroundServiceManager::RegisterService(
|
| base::Passed(&pid_receiver_request)));
|
| }
|
|
|
| +void BackgroundServiceManager::SetInstanceQuitCallback(
|
| + base::Callback<void(const Identity&)> callback) {
|
| + DCHECK(callback);
|
| + // Hop to the background thread. The provided callback will be called on
|
| + // whichever thread called this function.
|
| + background_thread_.task_runner()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(
|
| + &BackgroundServiceManager::SetInstanceQuitCallbackOnBackgroundThread,
|
| + base::Unretained(this), base::ThreadTaskRunnerHandle::Get(),
|
| + callback));
|
| +}
|
| +
|
| +void BackgroundServiceManager::SetInstanceQuitCallbackOnBackgroundThread(
|
| + const scoped_refptr<base::SingleThreadTaskRunner>& callback_task_runner,
|
| + const base::Callback<void(const Identity&)>& callback) {
|
| + DCHECK(callback_task_runner);
|
| + DCHECK(callback);
|
| + // Calls |callback| with the identity of the service that is quitting.
|
| + context_->service_manager()->SetInstanceQuitCallback(
|
| + base::Bind(&CallCallbackWithIdentity, callback_task_runner, callback));
|
| +}
|
| +
|
| void BackgroundServiceManager::InitializeOnBackgroundThread(
|
| service_manager::ServiceProcessLauncher::Delegate* launcher_delegate,
|
| std::unique_ptr<base::Value> catalog_contents) {
|
|
|