diff options
-rw-r--r-- | chrome/browser/extensions/component_loader.cc | 22 | ||||
-rw-r--r-- | chrome/browser/extensions/component_loader.h | 7 | ||||
-rw-r--r-- | chrome/browser/extensions/component_loader_unittest.cc | 17 |
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(); |