| 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..28753677c7db43fb1ab78f0e0b966ab62b1720a1 100644
|
| --- a/chrome/browser/extensions/component_loader.cc
|
| +++ b/chrome/browser/extensions/component_loader.cc
|
| @@ -88,14 +88,23 @@ ComponentLoader::~ComponentLoader() {
|
| ClearAllRegistered();
|
| }
|
|
|
| -void ComponentLoader::LoadAll() {
|
| +void ComponentLoader::LoadAll(bool defer_extensions_with_background_pages) {
|
| for (RegisteredComponentExtensions::iterator it =
|
| component_extensions_.begin();
|
| it != component_extensions_.end(); ++it) {
|
| - Load(*it);
|
| + Load(*it, defer_extensions_with_background_pages);
|
| }
|
| }
|
|
|
| +void ComponentLoader::LoadAllDeferred() {
|
| + 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 +151,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 +176,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 +198,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() {
|
|
|