| Index: chrome/browser/extensions/extension_service.cc
|
| diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
|
| index 9de535a134bc5bc16011536550786967e3ad52be..5d696b5299d089d17c992c8ea799b75317b255c9 100644
|
| --- a/chrome/browser/extensions/extension_service.cc
|
| +++ b/chrome/browser/extensions/extension_service.cc
|
| @@ -2100,6 +2100,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,
|
| @@ -2375,16 +2394,29 @@ void ExtensionService::OnExtensionInstalled(
|
| return;
|
| }
|
|
|
| + // Transfer ownership of |extension|.
|
| + AddNewOrUpdatedExtension(
|
| + scoped_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);
|
| }
|
|
|
| content::NotificationService::current()->Notify(
|
| @@ -2395,7 +2427,7 @@ void ExtensionService::OnExtensionInstalled(
|
| bool unacknowledged_external = IsUnacknowledgedExternalExtension(extension);
|
|
|
| // Transfer ownership of |extension| to AddExtension.
|
| - AddExtension(scoped_extension);
|
| + AddExtension(extension);
|
|
|
| // If this is a new external extension that was disabled, alert the user
|
| // so he can reenable it. We do this last so that it has already been
|
|
|