diff options
author | limasdf@gmail.com <limasdf@gmail.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-24 00:11:51 +0000 |
---|---|---|
committer | limasdf@gmail.com <limasdf@gmail.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-24 00:11:51 +0000 |
commit | 1d7f248f583f82237a373154ec9726238036aecc (patch) | |
tree | d4c42367ec73f01a4e6521145f269eec935feb02 /extensions | |
parent | c093918c633ce32abbddc5dd72823bee959b7cec (diff) | |
download | chromium_src-1d7f248f583f82237a373154ec9726238036aecc.zip chromium_src-1d7f248f583f82237a373154ec9726238036aecc.tar.gz chromium_src-1d7f248f583f82237a373154ec9726238036aecc.tar.bz2 |
Add TriggerOnUninstalled to ExtensionRegistry.
And change ExtensionToolbarModel to use it instead of NOTIFICATION_EXTENSION_UNINSTALLED.
R=kalman@chromium.org
BUG=354459
TEST=unit_test
Review URL: https://codereview.chromium.org/289073008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@272649 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'extensions')
-rw-r--r-- | extensions/browser/extension_registry.cc | 7 | ||||
-rw-r--r-- | extensions/browser/extension_registry.h | 4 | ||||
-rw-r--r-- | extensions/browser/extension_registry_observer.h | 5 | ||||
-rw-r--r-- | extensions/browser/extension_registry_unittest.cc | 12 |
4 files changed, 28 insertions, 0 deletions
diff --git a/extensions/browser/extension_registry.cc b/extensions/browser/extension_registry.cc index 76783f0..2b4d005 100644 --- a/extensions/browser/extension_registry.cc +++ b/extensions/browser/extension_registry.cc @@ -65,6 +65,13 @@ void ExtensionRegistry::TriggerOnWillBeInstalled(const Extension* extension, browser_context_, extension, is_update, old_name)); } +void ExtensionRegistry::TriggerOnUninstalled(const Extension* extension) { + DCHECK(!GenerateInstalledExtensionsSet()->Contains(extension->id())); + FOR_EACH_OBSERVER(ExtensionRegistryObserver, + observers_, + OnExtensionUninstalled(browser_context_, extension)); +} + const Extension* ExtensionRegistry::GetExtensionById(const std::string& id, int include_mask) const { std::string lowercase_id = StringToLowerASCII(id); diff --git a/extensions/browser/extension_registry.h b/extensions/browser/extension_registry.h index 65ee751..0087645 100644 --- a/extensions/browser/extension_registry.h +++ b/extensions/browser/extension_registry.h @@ -82,6 +82,10 @@ class ExtensionRegistry : public KeyedService { bool is_update, const std::string& old_name); + // Invokes the observer method OnExtensionUninstalled(). The extension must + // not be any installed extension with |extension|'s ID. + void TriggerOnUninstalled(const Extension* extension); + // Find an extension by ID using |include_mask| to pick the sets to search: // * enabled_extensions() --> ExtensionRegistry::ENABLED // * disabled_extensions() --> ExtensionRegistry::DISABLED diff --git a/extensions/browser/extension_registry_observer.h b/extensions/browser/extension_registry_observer.h index 6ad0666..b6cf8e0 100644 --- a/extensions/browser/extension_registry_observer.h +++ b/extensions/browser/extension_registry_observer.h @@ -48,6 +48,11 @@ class ExtensionRegistryObserver { const Extension* extension, bool is_update, const std::string& old_name) {} + + // Called after an extension is uninstalled. The extension no longer exsit in + // any of the ExtensionRegistry sets (enabled, disabled, etc.). + virtual void OnExtensionUninstalled(content::BrowserContext* browser_context, + const Extension* extension) {} }; } // namespace extensions diff --git a/extensions/browser/extension_registry_unittest.cc b/extensions/browser/extension_registry_unittest.cc index 8281ee0..5566fff 100644 --- a/extensions/browser/extension_registry_unittest.cc +++ b/extensions/browser/extension_registry_unittest.cc @@ -39,11 +39,13 @@ class TestObserver : public ExtensionRegistryObserver { loaded_.clear(); unloaded_.clear(); installed_.clear(); + uninstalled_.clear(); } const ExtensionList& loaded() { return loaded_; } const ExtensionList& unloaded() { return unloaded_; } const ExtensionList& installed() { return installed_; } + const ExtensionList& uninstalled() { return uninstalled_; } private: virtual void OnExtensionLoaded(content::BrowserContext* browser_context, @@ -66,9 +68,15 @@ class TestObserver : public ExtensionRegistryObserver { installed_.push_back(extension); } + virtual void OnExtensionUninstalled(content::BrowserContext* browser_context, + const Extension* extension) OVERRIDE { + uninstalled_.push_back(extension); + } + ExtensionList loaded_; ExtensionList unloaded_; ExtensionList installed_; + ExtensionList uninstalled_; }; TEST_F(ExtensionRegistryTest, FillAndClearRegistry) { @@ -251,6 +259,10 @@ TEST_F(ExtensionRegistryTest, Observer) { EXPECT_TRUE(HasSingleExtension(observer.unloaded(), extension.get())); observer.Reset(); + registry.TriggerOnUninstalled(extension); + EXPECT_TRUE(observer.installed().empty()); + EXPECT_TRUE(HasSingleExtension(observer.uninstalled(), extension.get())); + registry.RemoveObserver(&observer); } |