| Index: extensions/browser/process_manager.cc
|
| diff --git a/extensions/browser/process_manager.cc b/extensions/browser/process_manager.cc
|
| index 47f7b191e004da8dccf2a6179c9a17a73471752f..af97f9fb2fa3eb2fc23fa69075726700254d9778 100644
|
| --- a/extensions/browser/process_manager.cc
|
| +++ b/extensions/browser/process_manager.cc
|
| @@ -23,6 +23,7 @@
|
| #include "extensions/browser/extension_registry.h"
|
| #include "extensions/browser/extension_system.h"
|
| #include "extensions/browser/extensions_browser_client.h"
|
| +#include "extensions/browser/lazy_background_task_queue.h"
|
| #include "extensions/browser/notification_types.h"
|
| #include "extensions/browser/process_manager_delegate.h"
|
| #include "extensions/browser/process_manager_factory.h"
|
| @@ -107,6 +108,11 @@ static void CreateBackgroundHostForExtensionLoad(
|
| BackgroundInfo::GetBackgroundURL(extension));
|
| }
|
|
|
| +void PropagateExtensionWakeResult(const base::Callback<void(bool)>& callback,
|
| + extensions::ExtensionHost* host) {
|
| + callback.Run(host != nullptr);
|
| +}
|
| +
|
| } // namespace
|
|
|
| struct ProcessManager::BackgroundPageData {
|
| @@ -406,6 +412,19 @@ ExtensionHost* ProcessManager::GetBackgroundHostForExtension(
|
| return nullptr;
|
| }
|
|
|
| +bool ProcessManager::WakeExtension(const std::string& extension_id,
|
| + const base::Callback<void(bool)>& callback) {
|
| + if (GetBackgroundHostForExtension(extension_id)) {
|
| + // Run the callback immediately if the extension is already awake.
|
| + return false;
|
| + }
|
| + LazyBackgroundTaskQueue* queue =
|
| + ExtensionSystem::Get(browser_context_)->lazy_background_task_queue();
|
| + queue->AddPendingTask(browser_context_, extension_id,
|
| + base::Bind(&PropagateExtensionWakeResult, callback));
|
| + return true;
|
| +}
|
| +
|
| bool ProcessManager::IsBackgroundHostClosing(const std::string& extension_id) {
|
| ExtensionHost* host = GetBackgroundHostForExtension(extension_id);
|
| return (host && background_page_data_[extension_id].is_closing);
|
|
|