Index: chrome/browser/extensions/component_loader.cc |
diff --git a/chrome/browser/extensions/component_loader.cc b/chrome/browser/extensions/component_loader.cc |
index 39e12aed69ed9c479ae6678bfce9ebc586bc9219..9d80b90139a94ec74c2d717f9e10e84a5fcc1658 100644 |
--- a/chrome/browser/extensions/component_loader.cc |
+++ b/chrome/browser/extensions/component_loader.cc |
@@ -88,14 +88,31 @@ ComponentLoader::~ComponentLoader() { |
ClearAllRegistered(); |
} |
-void ComponentLoader::LoadAll() { |
+void ComponentLoader::BulkLoadAll() { |
for (RegisteredComponentExtensions::iterator it = |
component_extensions_.begin(); |
it != component_extensions_.end(); ++it) { |
- Load(*it); |
+ Load(*it, false); |
} |
} |
+void ComponentLoader::BulkLoadDeferBackgroundPages() { |
+ for (RegisteredComponentExtensions::iterator it = |
+ component_extensions_.begin(); |
+ it != component_extensions_.end(); ++it) { |
+ Load(*it, true); |
+ } |
+} |
+ |
+void ComponentLoader::BulkLoadDeferred() { |
+ for (DeferredAtLoadExtensions::iterator it = |
+ deferred_at_load_extensions.begin(); |
+ it != deferred_at_load_extensions.end(); ++it) { |
+ extension_service_->AddComponentExtension(*it); |
+ } |
+ deferred_at_load_extensions.clear(); |
+} |
+ |
DictionaryValue* ComponentLoader::ParseManifest( |
const std::string& manifest_contents) const { |
JSONStringValueSerializer serializer(manifest_contents); |
@@ -142,7 +159,7 @@ std::string ComponentLoader::Add(const DictionaryValue* parsed_manifest, |
ComponentExtensionInfo info(parsed_manifest, root_directory); |
component_extensions_.push_back(info); |
if (extension_service_->is_ready()) |
- Load(info); |
+ Load(info, false); |
return info.extension_id; |
} |
@@ -167,13 +184,14 @@ void ComponentLoader::Reload(const std::string& extension_id) { |
component_extensions_.begin(); it != component_extensions_.end(); |
++it) { |
if (it->extension_id == extension_id) { |
- Load(*it); |
+ Load(*it, false); |
break; |
} |
} |
} |
-const Extension* ComponentLoader::Load(const ComponentExtensionInfo& info) { |
+void ComponentLoader::Load(const ComponentExtensionInfo& info, |
+ bool defer_if_has_background_page) { |
// TODO(abarth): We should REQUIRE_MODERN_MANIFEST_VERSION once we've updated |
// our component extensions to the new manifest version. |
int flags = Extension::REQUIRE_KEY; |
@@ -188,11 +206,15 @@ const Extension* ComponentLoader::Load(const ComponentExtensionInfo& info) { |
&error)); |
if (!extension.get()) { |
LOG(ERROR) << error; |
- return NULL; |
+ return; |
} |
+ |
CHECK_EQ(info.extension_id, extension->id()) << extension->name(); |
- extension_service_->AddComponentExtension(extension); |
- return extension; |
+ if (extension->has_background_page() && defer_if_has_background_page) { |
+ deferred_at_load_extensions.push_back(extension); |
+ } else { |
+ extension_service_->AddComponentExtension(extension); |
+ } |
} |
void ComponentLoader::RemoveAll() { |