Chromium Code Reviews| 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..21d6fd35e334a1c6b6fae5b3930427f05cdc3253 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_); |
| @@ -172,30 +166,33 @@ void RuntimeAPI::Observe(int type, |
| 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; |
| } |
| } |
| +void RuntimeAPI::OnExtensionLoaded(content::BrowserContext* browser_context, |
| + const Extension* extension) { |
| + OnExtensionLoaded(extension); |
|
Devlin
2014/07/22 00:26:59
Let's put the OnExtensionLoaded method body in her
rpaquay
2014/07/22 16:34:21
Done.
|
| +} |
| + |
| +void RuntimeAPI::OnExtensionWillBeInstalled( |
| + content::BrowserContext* browser_context, |
| + const Extension* extension, |
| + bool is_update, |
| + bool from_ephemeral, |
| + const std::string& old_name) { |
| + OnExtensionInstalled(extension); |
| +} |
| + |
| +void RuntimeAPI::OnExtensionUninstalled( |
| + content::BrowserContext* browser_context, |
| + const Extension* extension, |
| + UninstallReason reason) { |
| + OnExtensionUninstalled(extension, reason); |
| +} |
| + |
| void RuntimeAPI::OnExtensionsReady() { |
| // We're done restarting Chrome after an update. |
| dispatch_chrome_updated_event_ = false; |
| @@ -244,13 +241,15 @@ void RuntimeAPI::OnExtensionInstalled(const Extension* extension) { |
| false)); |
| } |
| -void RuntimeAPI::OnExtensionUninstalled(const Extension* extension) { |
| +void RuntimeAPI::OnExtensionUninstalled(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 +411,13 @@ void RuntimeEventRouter::DispatchOnRestartRequiredEvent( |
| // static |
| void RuntimeEventRouter::OnExtensionUninstalled( |
| content::BrowserContext* context, |
| - const std::string& extension_id) { |
| + const std::string& extension_id, |
| + UninstallReason reason) { |
| + bool open_uninstall_url = (reason == UNINSTALL_REASON_USER_INITIATED) || |
| + (reason == UNINSTALL_REASON_MANAGEMENT_API); |
|
Devlin
2014/07/22 00:26:59
I think it's readable enough to inline this in the
rpaquay
2014/07/22 16:34:21
Done.
|
| + if (!open_uninstall_url) |
| + return; |
| + |
| GURL uninstall_url( |
| GetUninstallURL(ExtensionPrefs::Get(context), extension_id)); |