Index: chrome/browser/extensions/extension_service.cc |
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc |
index 865438513dd39f0ea0d461506492a3c0736b8112..a77c73d51519aadb93502e5570341ec2dfc05351 100644 |
--- a/chrome/browser/extensions/extension_service.cc |
+++ b/chrome/browser/extensions/extension_service.cc |
@@ -79,6 +79,7 @@ |
#include "extensions/browser/extensions_browser_client.h" |
#include "extensions/browser/external_install_info.h" |
#include "extensions/browser/install_flag.h" |
+#include "extensions/browser/lazy_background_task_queue.h" |
#include "extensions/browser/renderer_startup_helper.h" |
#include "extensions/browser/runtime_data.h" |
#include "extensions/browser/uninstall_reason.h" |
@@ -144,6 +145,8 @@ const int kUpdateIdleDelay = 5; |
// TODO(samuong): Remove this in M58 (see comment in ExtensionService::Init). |
const char kDeprecatedLoadComponentExtension[] = "load-component-extension"; |
+void DoNothingWithExtensionHost(extensions::ExtensionHost* host) {} |
+ |
} // namespace |
// ExtensionService. |
@@ -924,11 +927,7 @@ void ExtensionService::EnableExtension(const std::string& extension_id) { |
NotifyExtensionLoaded(extension); |
- // Notify listeners that the extension was enabled. |
- content::NotificationService::current()->Notify( |
- extensions::NOTIFICATION_EXTENSION_ENABLED, |
- content::Source<Profile>(profile_), |
- content::Details<const Extension>(extension)); |
+ MaybeSpinUpLazyBackgroundPage(extension); |
} |
void ExtensionService::DisableExtension(const std::string& extension_id, |
@@ -2557,3 +2556,29 @@ void ExtensionService::OnInstalledExtensionsLoaded() { |
OnBlacklistUpdated(); |
} |
+ |
+void ExtensionService::MaybeSpinUpLazyBackgroundPage( |
+ const Extension* extension) { |
+ if (!extensions::BackgroundInfo::HasLazyBackgroundPage(extension)) |
+ return; |
+ |
+ // For orphaned devtools, we will reconnect devtools to it later in |
+ // DidCreateRenderViewForBackgroundPage(). |
+ OrphanedDevTools::iterator iter = orphaned_dev_tools_.find(extension->id()); |
+ bool has_orphaned_dev_tools = iter != orphaned_dev_tools_.end(); |
+ |
+ // Reloading component extension does not trigger install, so RuntimeAPI won't |
+ // be able to detect its loading. Therefore, we need to spin up its lazy |
+ // background page. |
+ bool is_component_extension = |
+ Manifest::IsComponentLocation(extension->location()); |
+ |
+ if (!has_orphaned_dev_tools && !is_component_extension) |
+ return; |
+ |
+ // Wake up the event page by posting a dummy task. |
+ extensions::LazyBackgroundTaskQueue* queue = |
+ extensions::LazyBackgroundTaskQueue::Get(profile_); |
+ queue->AddPendingTask(profile_, extension->id(), |
+ base::Bind(&DoNothingWithExtensionHost)); |
+} |