summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/extensions/component_loader.cc22
-rw-r--r--chrome/browser/extensions/component_loader.h7
-rw-r--r--chrome/browser/extensions/component_loader_unittest.cc17
3 files changed, 42 insertions, 4 deletions
diff --git a/chrome/browser/extensions/component_loader.cc b/chrome/browser/extensions/component_loader.cc
index 52463ff..39e12ae 100644
--- a/chrome/browser/extensions/component_loader.cc
+++ b/chrome/browser/extensions/component_loader.cc
@@ -195,6 +195,14 @@ const Extension* ComponentLoader::Load(const ComponentExtensionInfo& info) {
return extension;
}
+void ComponentLoader::RemoveAll() {
+ RegisteredComponentExtensions::iterator it = component_extensions_.begin();
+ for (; it != component_extensions_.end(); ++it)
+ UnloadComponent(&(*it));
+
+ component_extensions_.clear();
+}
+
void ComponentLoader::Remove(const FilePath& root_directory) {
// Find the ComponentExtensionInfo for the extension.
RegisteredComponentExtensions::iterator it = component_extensions_.begin();
@@ -210,11 +218,8 @@ void ComponentLoader::Remove(const std::string& id) {
RegisteredComponentExtensions::iterator it = component_extensions_.begin();
for (; it != component_extensions_.end(); ++it) {
if (it->extension_id == id) {
- delete it->manifest;
+ UnloadComponent(&(*it));
it = component_extensions_.erase(it);
- if (extension_service_->is_ready())
- extension_service_->
- UnloadExtension(id, extension_misc::UNLOAD_REASON_DISABLE);
break;
}
}
@@ -412,6 +417,15 @@ void ComponentLoader::AddDefaultComponentExtensionsWithBackgroundPages(
}
+void ComponentLoader::UnloadComponent(ComponentExtensionInfo* component) {
+ delete component->manifest;
+ if (extension_service_->is_ready()) {
+ extension_service_->
+ UnloadExtension(component->extension_id,
+ extension_misc::UNLOAD_REASON_DISABLE);
+ }
+}
+
// static
void ComponentLoader::RegisterUserPrefs(PrefService* prefs) {
prefs->RegisterStringPref(prefs::kEnterpriseWebStoreURL,
diff --git a/chrome/browser/extensions/component_loader.h b/chrome/browser/extensions/component_loader.h
index 2684472..02798b3 100644
--- a/chrome/browser/extensions/component_loader.h
+++ b/chrome/browser/extensions/component_loader.h
@@ -35,6 +35,10 @@ class ComponentLoader {
// Loads any registered component extensions.
void LoadAll();
+ // Clear the list of all registered extensions and unloads them from the
+ // extension service.
+ void RemoveAll();
+
// Registers and possibly loads a component extension. If ExtensionService
// has been initialized, the extension is loaded; otherwise, the load is
// deferred until LoadAll is called. The ID of the added extension is
@@ -122,6 +126,9 @@ class ComponentLoader {
void AddChromeApp();
+ // Unloads |component| from the memory.
+ void UnloadComponent(ComponentExtensionInfo* component);
+
PrefService* prefs_;
PrefService* local_state_;
diff --git a/chrome/browser/extensions/component_loader_unittest.cc b/chrome/browser/extensions/component_loader_unittest.cc
index 0b29a35..ec04063 100644
--- a/chrome/browser/extensions/component_loader_unittest.cc
+++ b/chrome/browser/extensions/component_loader_unittest.cc
@@ -232,6 +232,23 @@ TEST_F(ComponentLoaderTest, LoadAll) {
EXPECT_EQ(default_count + 1, extension_service_.extensions()->size());
}
+TEST_F(ComponentLoaderTest, RemoveAll) {
+ extension_service_.set_ready(true);
+ EXPECT_EQ(0u, extension_service_.extensions()->size());
+ // Use LoadAll() to load the default extensions.
+ component_loader_.AddDefaultComponentExtensions();
+ unsigned int default_count = extension_service_.extensions()->size();
+
+ // And add one more just to make sure there is anything in there in case
+ // there are no defaults for this platform.
+ component_loader_.Add(manifest_contents_, extension_path_);
+ EXPECT_EQ(default_count + 1, extension_service_.extensions()->size());
+
+ // Remove all default extensions.
+ component_loader_.RemoveAll();
+ EXPECT_EQ(0u, extension_service_.extensions()->size());
+}
+
TEST_F(ComponentLoaderTest, EnterpriseWebStore) {
component_loader_.AddDefaultComponentExtensions(false);
component_loader_.LoadAll();