Delay updating shared modules if dependent extensions are not idle
BUG=237273
Review URL: https://codereview.chromium.org/616353003
Cr-Commit-Position: refs/heads/master@{#298277}
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index 443f5ee..c291bfd1 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -2081,6 +2081,26 @@
// app or extension becoming idle.
std::set<std::string> extension_ids =
process_map->GetExtensionsInProcess(process->GetID());
+ // In addition to the extensions listed in the process map, one of those
+ // extensions could be referencing a shared module which is waiting for
+ // idle to update. Check all imports of these extensions, too.
+ std::set<std::string> import_ids;
+ for (std::set<std::string>::const_iterator it = extension_ids.begin();
+ it != extension_ids.end();
+ ++it) {
+ const Extension* extension = GetExtensionById(*it, true);
+ if (!extension)
+ continue;
+ const std::vector<SharedModuleInfo::ImportInfo>& imports =
+ SharedModuleInfo::GetImports(extension);
+ std::vector<SharedModuleInfo::ImportInfo>::const_iterator import_it;
+ for (import_it = imports.begin(); import_it != imports.end();
+ import_it++) {
+ import_ids.insert((*import_it).extension_id);
+ }
+ }
+ extension_ids.insert(import_ids.begin(), import_ids.end());
+
for (std::set<std::string>::const_iterator it = extension_ids.begin();
it != extension_ids.end(); ++it) {
if (delayed_installs_.Contains(*it)) {