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

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

Issue 386033002: Prune shared extendion module after extension updating. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix review issues Created 6 years, 5 months 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
Index: chrome/browser/extensions/shared_module_service.cc
diff --git a/chrome/browser/extensions/shared_module_service.cc b/chrome/browser/extensions/shared_module_service.cc
index 8474d247606f238d64c1423e83c5d176a7222e13..2b595ff798b9c07f0965fa92939e31c314b62957 100644
--- a/chrome/browser/extensions/shared_module_service.cc
+++ b/chrome/browser/extensions/shared_module_service.cc
@@ -4,6 +4,7 @@
#include "chrome/browser/extensions/shared_module_service.h"
+#include <set>
#include <vector>
#include "base/version.h"
@@ -130,35 +131,58 @@ scoped_ptr<ExtensionSet> SharedModuleService::GetDependentExtensions(
return dependents.PassAs<ExtensionSet>();
}
-void SharedModuleService::OnExtensionUninstalled(
- content::BrowserContext* browser_context,
- const Extension* extension) {
- // Uninstalls shared modules that were only referenced by |extension|.
- if (!SharedModuleInfo::ImportsModules(extension))
- return;
-
+void SharedModuleService::PruneSharedModules() {
ExtensionRegistry* registry = ExtensionRegistry::Get(browser_context_);
ExtensionService* service =
ExtensionSystem::Get(browser_context_)->extension_service();
- const ImportInfoVector& imports = SharedModuleInfo::GetImports(extension);
- for (ImportInfoVector::const_iterator iter = imports.begin();
- iter != imports.end();
+ ExtensionSet set_to_check;
+ set_to_check.InsertAll(registry->enabled_extensions());
+ set_to_check.InsertAll(registry->disabled_extensions());
+ set_to_check.InsertAll(*service->delayed_installs());
+
+ std::vector<std::string> shared_modules;
+ std::set<std::string> used_shared_modules;
+
+ for (ExtensionSet::const_iterator iter = set_to_check.begin();
+ iter != set_to_check.end();
++iter) {
- const Extension* imported_module =
- registry->GetExtensionById(iter->extension_id,
- ExtensionRegistry::EVERYTHING);
- if (imported_module && imported_module->from_webstore()) {
- scoped_ptr<ExtensionSet> dependents =
- GetDependentExtensions(imported_module);
- if (dependents->is_empty()) {
- service->UninstallExtension(
- iter->extension_id,
- ExtensionService::UNINSTALL_REASON_ORPHANED_SHARED_MODULE,
- NULL); // Ignore error.
- }
+ if (SharedModuleInfo::IsSharedModule(iter->get()))
+ shared_modules.push_back(iter->get()->id());
+
+ const ImportInfoVector& imports = SharedModuleInfo::GetImports(iter->get());
+ for (ImportInfoVector::const_iterator imports_iter = imports.begin();
+ imports_iter != imports.end();
+ ++imports_iter) {
+ used_shared_modules.insert(imports_iter->extension_id);
}
}
+
+ std::vector<std::string>::const_iterator shared_modules_iter;
+ for (shared_modules_iter = shared_modules.begin();
+ shared_modules_iter != shared_modules.end();
+ shared_modules_iter++) {
+ if (used_shared_modules.count(*shared_modules_iter))
+ continue;
+ service->UninstallExtension(
+ *shared_modules_iter,
+ ExtensionService::UNINSTALL_REASON_ORPHANED_SHARED_MODULE,
+ NULL); // Ignore error.
+ }
+}
+
+void SharedModuleService::OnExtensionInstalled(
+ content::BrowserContext* browser_context,
+ const Extension* extension,
+ bool is_update) {
+ if (is_update)
+ PruneSharedModules();
+}
+
+void SharedModuleService::OnExtensionUninstalled(
+ content::BrowserContext* browser_context,
+ const Extension* extension) {
+ PruneSharedModules();
}
} // namespace extensions
« no previous file with comments | « chrome/browser/extensions/shared_module_service.h ('k') | chrome/browser/extensions/shared_module_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698