diff options
author | mpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-02 01:42:41 +0000 |
---|---|---|
committer | mpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-02 01:42:41 +0000 |
commit | 4559a7d9c3eca928fc19b64b64f19c8032d0ee0f (patch) | |
tree | a754a4c898518478035d5e493518c900dcdca248 /chrome/browser/extensions/extension_file_util.cc | |
parent | 9829d8d83608c54937e5187512f98a81b29f80bb (diff) | |
download | chromium_src-4559a7d9c3eca928fc19b64b64f19c8032d0ee0f.zip chromium_src-4559a7d9c3eca928fc19b64b64f19c8032d0ee0f.tar.gz chromium_src-4559a7d9c3eca928fc19b64b64f19c8032d0ee0f.tar.bz2 |
Delete old version directories of installed extensions during garbage
collection.
BUG=28884
Review URL: http://codereview.chromium.org/455026
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@33530 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extension_file_util.cc')
-rw-r--r-- | chrome/browser/extensions/extension_file_util.cc | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/chrome/browser/extensions/extension_file_util.cc b/chrome/browser/extensions/extension_file_util.cc index f61dfef..0bb2ff8 100644 --- a/chrome/browser/extensions/extension_file_util.cc +++ b/chrome/browser/extensions/extension_file_util.cc @@ -318,8 +318,10 @@ void UninstallExtension(const std::string& id, const FilePath& extensions_dir) { LOG(WARNING) << "Could not delete directory for extension " << id; } -void GarbageCollectExtensions(const FilePath& install_directory, - const std::set<std::string>& installed_ids) { +void GarbageCollectExtensions( + const FilePath& install_directory, + const std::set<std::string>& installed_ids, + const std::map<std::string, std::string>& installed_versions) { // Nothing to clean up if it doesn't exist. if (!file_util::DirectoryExists(install_directory)) return; @@ -344,7 +346,7 @@ void GarbageCollectExtensions(const FilePath& install_directory, continue; } - // Ignore directories that aren't valid IDs. + // Delete directories that aren't valid IDs. if (!Extension::IdIsValid(extension_id)) { LOG(WARNING) << "Invalid extension ID encountered in extensions " "directory: " << extension_id; @@ -353,6 +355,29 @@ void GarbageCollectExtensions(const FilePath& install_directory, file_util::Delete(extension_path, true); // Recursive. continue; } + + // Clean up old version directories. + file_util::FileEnumerator versions_enumerator( + extension_path, + false, // Not recursive. + file_util::FileEnumerator::DIRECTORIES); + for (FilePath version_dir = versions_enumerator.Next(); + !version_dir.value().empty(); + version_dir = versions_enumerator.Next()) { + std::map<std::string, std::string>::const_iterator installed_version = + installed_versions.find(extension_id); + if (installed_version == installed_versions.end()) { + NOTREACHED() << "No installed version found for " << extension_id; + continue; + } + + std::string version = WideToASCII(version_dir.BaseName().ToWStringHack()); + if (version != installed_version->second) { + LOG(INFO) << "Deleting old version for directory " + << WideToASCII(version_dir.ToWStringHack()) << "."; + file_util::Delete(version_dir, true); // Recursive. + } + } } } |