Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5591)

Unified Diff: chrome/browser/extensions/component_loader.cc

Issue 8598016: Fix leak in ComponentLoader. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/extensions/component_loader.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/component_loader.cc
diff --git a/chrome/browser/extensions/component_loader.cc b/chrome/browser/extensions/component_loader.cc
index 87b48d7c1d3c07414b496928f796e893688bf2fe..61dea2ef3079ca84058a9b7db3ec60483bcd0ee1 100644
--- a/chrome/browser/extensions/component_loader.cc
+++ b/chrome/browser/extensions/component_loader.cc
@@ -42,6 +42,7 @@ ComponentLoader::ComponentLoader(ExtensionServiceInterface* extension_service,
}
ComponentLoader::~ComponentLoader() {
+ ClearAllRegistered();
}
void ComponentLoader::LoadAll() {
@@ -65,6 +66,16 @@ DictionaryValue* ComponentLoader::ParseManifest(
return static_cast<DictionaryValue*>(manifest.release());
}
+void ComponentLoader::ClearAllRegistered() {
+ for (RegisteredComponentExtensions::iterator it =
+ component_extensions_.begin();
+ it != component_extensions_.end(); ++it) {
+ delete it->manifest;
+ }
+
+ component_extensions_.clear();
+}
+
const Extension* ComponentLoader::Add(
int manifest_resource_id,
const FilePath& root_directory) {
@@ -135,7 +146,8 @@ void ComponentLoader::Remove(const FilePath& root_directory) {
if (it == component_extensions_.end())
return;
- const DictionaryValue* manifest = it->manifest;
+ // The list owns the dictionary, so it must be deleted after removal.
+ scoped_ptr<const DictionaryValue> manifest(it->manifest);
// Remove the extension from the list of registered extensions.
*it = component_extensions_.back();
« no previous file with comments | « chrome/browser/extensions/component_loader.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698