Index: chrome/browser/extensions/extension_process_manager.cc |
diff --git a/chrome/browser/extensions/extension_process_manager.cc b/chrome/browser/extensions/extension_process_manager.cc |
index 9e824dbc0903bc117ff5f30a598d732fd5236d68..f00ea56d564a8f53635721a46d874c3a644cfc22 100644 |
--- a/chrome/browser/extensions/extension_process_manager.cc |
+++ b/chrome/browser/extensions/extension_process_manager.cc |
@@ -35,6 +35,10 @@ using content::OpenURLParams; |
using content::Referrer; |
using content::SiteInstance; |
+namespace events { |
+const char kOnInstalled[] = "experimental.extension.onInstalled"; |
+}; // namespace events |
+ |
namespace { |
// Incognito profiles use this process manager. It is mostly a shim that decides |
@@ -67,9 +71,14 @@ class IncognitoExtensionProcessManager : public ExtensionProcessManager { |
static void CreateBackgroundHostForExtensionLoad( |
ExtensionProcessManager* manager, const Extension* extension) { |
- if (extension->has_background_page() && |
- extension->background_page_persists()) { |
- manager->CreateBackgroundHost(extension, extension->GetBackgroundURL()); |
+ if (extension->has_background_page()) { |
+ if (extension->background_page_persists()) { |
+ manager->CreateBackgroundHost(extension, extension->GetBackgroundURL()); |
+ } else { |
+ // TODO(mpcomplete): Only call this on install once we persist event |
+ // registration. Also call this for regular background pages. |
+ manager->DispatchExtensionInstalledEvent(extension); |
+ } |
} |
} |
@@ -409,6 +418,14 @@ void ExtensionProcessManager::CloseBackgroundHosts() { |
} |
} |
+void ExtensionProcessManager::DispatchExtensionInstalledEvent( |
+ const Extension* extension) { |
+ ExtensionEventRouter* router = GetProfile()->GetExtensionEventRouter(); |
+ router->AddLazyEventListener(events::kOnInstalled, extension->id()); |
+ router->DispatchEventToExtension( |
+ extension->id(), events::kOnInstalled, "[]", NULL, GURL()); |
+} |
+ |
// |
// IncognitoExtensionProcessManager |
// |