diff options
author | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-11 18:54:45 +0000 |
---|---|---|
committer | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-11 18:54:45 +0000 |
commit | ba74f357edb50e09585e181c2f03a613d4d8a7eb (patch) | |
tree | 4c382a785774106b154255a409c1b447b5734599 /chrome/browser/extensions | |
parent | f079defd1b007e8a91cb30c056611cc8d41f66af (diff) | |
download | chromium_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.cc | 14 |
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; |