summaryrefslogtreecommitdiffstats
path: root/extensions
diff options
context:
space:
mode:
authorlimasdf@gmail.com <limasdf@gmail.com@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-24 00:11:51 +0000
committerlimasdf@gmail.com <limasdf@gmail.com@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-24 00:11:51 +0000
commit1d7f248f583f82237a373154ec9726238036aecc (patch)
treed4c42367ec73f01a4e6521145f269eec935feb02 /extensions
parentc093918c633ce32abbddc5dd72823bee959b7cec (diff)
downloadchromium_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.cc7
-rw-r--r--extensions/browser/extension_registry.h4
-rw-r--r--extensions/browser/extension_registry_observer.h5
-rw-r--r--extensions/browser/extension_registry_unittest.cc12
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);
}