summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions
diff options
context:
space:
mode:
authoraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-11 18:54:45 +0000
committeraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-11 18:54:45 +0000
commitba74f357edb50e09585e181c2f03a613d4d8a7eb (patch)
tree4c382a785774106b154255a409c1b447b5734599 /chrome/browser/extensions
parentf079defd1b007e8a91cb30c056611cc8d41f66af (diff)
downloadchromium_src-ba74f357edb50e09585e181c2f03a613d4d8a7eb.zip
chromium_src-ba74f357edb50e09585e181c2f03a613d4d8a7eb.tar.gz
chromium_src-ba74f357edb50e09585e181c2f03a613d4d8a7eb.tar.bz2
Fix memory leak in ExtensionsService when skipping loaded
extensions. Review URL: http://codereview.chromium.org/122021 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18186 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions')
-rw-r--r--chrome/browser/extensions/extensions_service.cc14
1 files changed, 6 insertions, 8 deletions
diff --git a/chrome/browser/extensions/extensions_service.cc b/chrome/browser/extensions/extensions_service.cc
index 03f6b96..94c1dd5 100644
--- a/chrome/browser/extensions/extensions_service.cc
+++ b/chrome/browser/extensions/extensions_service.cc
@@ -325,19 +325,17 @@ void ExtensionsService::OnExtensionsLoaded(ExtensionList* new_extensions) {
ExtensionList enabled_extensions;
for (ExtensionList::iterator iter = new_extensions->begin();
iter != new_extensions->end(); ++iter) {
- if (extensions_enabled() || (*iter)->IsTheme())
+ if (extensions_enabled() || (*iter)->IsTheme()) {
enabled_extensions.push_back(*iter);
+ } else {
+ // Extensions that get enabled get added to extensions_ and deleted later.
+ // Anything skipped must be deleted now so we don't leak.
+ delete *iter;
+ }
}
for (ExtensionList::const_iterator iter = enabled_extensions.begin();
iter != enabled_extensions.end(); ++iter) {
- // Skip updated extensions. We don't yet implement update (issue 12399).
- // For now, just skip existing extensions so that at least we don't end up
- // with duplicate toolstrips, etc. Later we will want to do live, in-place
- // updates.
- if (GetExtensionByID((*iter)->id()))
- continue;
-
std::wstring extension_id = ASCIIToWide((*iter)->id());
DictionaryValue* pref = GetOrCreateExtensionPref(extension_id);
int location;