| Index: chrome/browser/extensions/extension_service.cc
|
| diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
|
| index 7d5436bc7631c2cc0fc947dba72b7f3370609512..13e3d5c5f67272b17b524d1796fa7025dacce171 100644
|
| --- a/chrome/browser/extensions/extension_service.cc
|
| +++ b/chrome/browser/extensions/extension_service.cc
|
| @@ -2099,6 +2099,25 @@ void ExtensionService::AddExtension(const Extension* extension) {
|
| DoPostLoadTasks(extension);
|
| }
|
|
|
| +void ExtensionService::AddComponentExtension(const Extension* extension) {
|
| + const std::string old_version_string(
|
| + extension_prefs_->GetVersionString(extension->id()));
|
| + const Version old_version(old_version_string);
|
| +
|
| + if (!old_version.IsValid() || !old_version.Equals(*extension->version())) {
|
| + VLOG(1) << "Component extension " << extension->name() << " ("
|
| + << extension->id() << ") installing/upgrading from '"
|
| + << old_version_string << "' to " << extension->version()->GetString();
|
| +
|
| + AddNewOrUpdatedExtension(extension,
|
| + syncer::StringOrdinal(),
|
| + Extension::ENABLED_COMPONENT);
|
| + return;
|
| + }
|
| +
|
| + AddExtension(extension);
|
| +}
|
| +
|
| void ExtensionService::InitializePermissions(const Extension* extension) {
|
| // If the extension has used the optional permissions API, it will have a
|
| // custom set of active permissions defined in the extension prefs. Here,
|
| @@ -2367,16 +2386,29 @@ void ExtensionService::OnExtensionInstalled(
|
| return;
|
| }
|
|
|
| + // Transfer ownership of |extension|.
|
| + AddNewOrUpdatedExtension(
|
| + extension,
|
| + page_ordinal,
|
| + initial_enable ? Extension::ENABLED : Extension::DISABLED);
|
| +}
|
| +
|
| +void ExtensionService::AddNewOrUpdatedExtension(
|
| + const Extension* extension,
|
| + const syncer::StringOrdinal& page_ordinal,
|
| + Extension::State initial_state) {
|
| + CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +
|
| extension_prefs_->OnExtensionInstalled(
|
| extension,
|
| - initial_enable ? Extension::ENABLED : Extension::DISABLED,
|
| + initial_state,
|
| page_ordinal);
|
|
|
| // Unpacked extensions default to allowing file access, but if that has been
|
| // overridden, don't reset the value.
|
| if (Extension::ShouldAlwaysAllowFileAccess(extension->location()) &&
|
| - !extension_prefs_->HasAllowFileAccessSetting(id)) {
|
| - extension_prefs_->SetAllowFileAccess(id, true);
|
| + !extension_prefs_->HasAllowFileAccessSetting(extension->id())) {
|
| + extension_prefs_->SetAllowFileAccess(extension->id(), true);
|
| }
|
|
|
| FinishInstallation(extension);
|
|
|