Index: extensions/browser/api/runtime/runtime_api.cc |
diff --git a/extensions/browser/api/runtime/runtime_api.cc b/extensions/browser/api/runtime/runtime_api.cc |
index fcd68014dede89b02ea7bb6adc0c105e0087b70e..6a1b6b5ab4e17281169366574a58eebb606d6452 100644 |
--- a/extensions/browser/api/runtime/runtime_api.cc |
+++ b/extensions/browser/api/runtime/runtime_api.cc |
@@ -137,19 +137,13 @@ BrowserContextKeyedAPIFactory<RuntimeAPI>* RuntimeAPI::GetFactoryInstance() { |
} |
RuntimeAPI::RuntimeAPI(content::BrowserContext* context) |
- : browser_context_(context), dispatch_chrome_updated_event_(false) { |
+ : browser_context_(context), |
+ extension_registry_observer_(this), |
+ dispatch_chrome_updated_event_(false) { |
registrar_.Add(this, |
chrome::NOTIFICATION_EXTENSIONS_READY, |
content::Source<BrowserContext>(context)); |
- registrar_.Add(this, |
- chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED, |
- content::Source<BrowserContext>(context)); |
- registrar_.Add(this, |
- chrome::NOTIFICATION_EXTENSION_WILL_BE_INSTALLED_DEPRECATED, |
- content::Source<BrowserContext>(context)); |
- registrar_.Add(this, |
- chrome::NOTIFICATION_EXTENSION_UNINSTALLED_DEPRECATED, |
- content::Source<BrowserContext>(context)); |
+ extension_registry_observer_.Add(ExtensionRegistry::Get(browser_context_)); |
delegate_ = ExtensionsBrowserClient::Get()->CreateRuntimeAPIDelegate( |
browser_context_); |
@@ -167,33 +161,8 @@ RuntimeAPI::~RuntimeAPI() { |
void RuntimeAPI::Observe(int type, |
const content::NotificationSource& source, |
const content::NotificationDetails& details) { |
- switch (type) { |
- case chrome::NOTIFICATION_EXTENSIONS_READY: { |
- OnExtensionsReady(); |
- break; |
- } |
- case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: { |
- const Extension* extension = |
- content::Details<const Extension>(details).ptr(); |
- OnExtensionLoaded(extension); |
- break; |
- } |
- case chrome::NOTIFICATION_EXTENSION_WILL_BE_INSTALLED_DEPRECATED: { |
- const Extension* extension = |
- content::Details<const InstalledExtensionInfo>(details)->extension; |
- OnExtensionInstalled(extension); |
- break; |
- } |
- case chrome::NOTIFICATION_EXTENSION_UNINSTALLED_DEPRECATED: { |
- const Extension* extension = |
- content::Details<const Extension>(details).ptr(); |
- OnExtensionUninstalled(extension); |
- break; |
- } |
- default: |
- NOTREACHED(); |
- break; |
- } |
+ DCHECK_EQ(chrome::NOTIFICATION_EXTENSIONS_READY, type); |
+ OnExtensionsReady(); |
} |
void RuntimeAPI::OnExtensionsReady() { |
@@ -212,7 +181,8 @@ void RuntimeAPI::OnExtensionsReady() { |
extension_system->process_manager()->AddObserver(this); |
} |
-void RuntimeAPI::OnExtensionLoaded(const Extension* extension) { |
+void RuntimeAPI::OnExtensionLoaded(content::BrowserContext* browser_context, |
+ const Extension* extension) { |
if (!dispatch_chrome_updated_event_) |
return; |
@@ -226,7 +196,12 @@ void RuntimeAPI::OnExtensionLoaded(const Extension* extension) { |
true)); |
} |
-void RuntimeAPI::OnExtensionInstalled(const Extension* extension) { |
+void RuntimeAPI::OnExtensionWillBeInstalled( |
+ content::BrowserContext* browser_context, |
+ const Extension* extension, |
+ bool is_update, |
+ bool from_ephemeral, |
+ const std::string& old_name) { |
// Ephemeral apps are not considered to be installed and do not receive |
// the onInstalled() event. |
if (util::IsEphemeralApp(extension->id(), browser_context_)) |
@@ -244,13 +219,17 @@ void RuntimeAPI::OnExtensionInstalled(const Extension* extension) { |
false)); |
} |
-void RuntimeAPI::OnExtensionUninstalled(const Extension* extension) { |
+void RuntimeAPI::OnExtensionUninstalled( |
+ content::BrowserContext* browser_context, |
+ const Extension* extension, |
+ UninstallReason reason) { |
// Ephemeral apps are not considered to be installed, so the uninstall URL |
// is not invoked when they are removed. |
if (util::IsEphemeralApp(extension->id(), browser_context_)) |
return; |
- RuntimeEventRouter::OnExtensionUninstalled(browser_context_, extension->id()); |
+ RuntimeEventRouter::OnExtensionUninstalled( |
+ browser_context_, extension->id(), reason); |
} |
void RuntimeAPI::Shutdown() { |
@@ -412,7 +391,13 @@ void RuntimeEventRouter::DispatchOnRestartRequiredEvent( |
// static |
void RuntimeEventRouter::OnExtensionUninstalled( |
content::BrowserContext* context, |
- const std::string& extension_id) { |
+ const std::string& extension_id, |
+ UninstallReason reason) { |
+ if (!(reason == UNINSTALL_REASON_USER_INITIATED || |
+ reason == UNINSTALL_REASON_MANAGEMENT_API)) { |
+ return; |
+ } |
+ |
GURL uninstall_url( |
GetUninstallURL(ExtensionPrefs::Get(context), extension_id)); |