Index: extensions/browser/process_manager.cc |
diff --git a/extensions/browser/process_manager.cc b/extensions/browser/process_manager.cc |
index 47f7b191e004da8dccf2a6179c9a17a73471752f..98e72aa30c2e2c88a3bcf331d7936b57dde91129 100644 |
--- a/extensions/browser/process_manager.cc |
+++ b/extensions/browser/process_manager.cc |
@@ -4,6 +4,8 @@ |
#include "extensions/browser/process_manager.h" |
+#include <vector> |
+ |
#include "base/bind.h" |
#include "base/logging.h" |
#include "base/message_loop/message_loop.h" |
@@ -23,6 +25,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 +110,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 +414,23 @@ ExtensionHost* ProcessManager::GetBackgroundHostForExtension( |
return nullptr; |
} |
+bool ProcessManager::IsEventPageSuspended(const std::string& extension_id) { |
+ return GetBackgroundHostForExtension(extension_id) == nullptr; |
+} |
+ |
+bool ProcessManager::WakeEventPage(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); |