| Index: chrome/browser/extensions/extension_sync_service.cc
|
| diff --git a/chrome/browser/extensions/extension_sync_service.cc b/chrome/browser/extensions/extension_sync_service.cc
|
| index ccb04ecfbb0d09a5602ad001b4bac1b4738177b3..da191a6efbf38df8198d6fd35c52ca87d9e1866a 100644
|
| --- a/chrome/browser/extensions/extension_sync_service.cc
|
| +++ b/chrome/browser/extensions/extension_sync_service.cc
|
| @@ -42,6 +42,7 @@
|
| using extensions::Extension;
|
| using extensions::ExtensionPrefs;
|
| using extensions::ExtensionRegistry;
|
| +using extensions::ExtensionSyncData;
|
| using extensions::FeatureSwitch;
|
|
|
| namespace {
|
| @@ -60,6 +61,25 @@ void OnWebApplicationInfoLoaded(
|
| CreateOrUpdateBookmarkApp(extension_service.get(), &synced_info);
|
| }
|
|
|
| +// Returns the pref value for "all urls enabled" for the given extension id.
|
| +ExtensionSyncData::OptionalBoolean GetAllowedOnAllUrlsOptionalBoolean(
|
| + const std::string& extension_id,
|
| + content::BrowserContext* context) {
|
| + bool allowed_on_all_urls =
|
| + extensions::util::AllowedScriptingOnAllUrls(extension_id, context);
|
| + // If the extension is not allowed on all urls (which is not the default),
|
| + // then we have to sync the preference.
|
| + if (!allowed_on_all_urls)
|
| + return ExtensionSyncData::BOOLEAN_FALSE;
|
| +
|
| + // If the user has explicitly set a value, then we sync it.
|
| + if (extensions::util::HasSetAllowedScriptingOnAllUrls(extension_id, context))
|
| + return ExtensionSyncData::BOOLEAN_TRUE;
|
| +
|
| + // Otherwise, unset.
|
| + return ExtensionSyncData::BOOLEAN_UNSET;
|
| +}
|
| +
|
| } // namespace
|
|
|
| ExtensionSyncService::ExtensionSyncService(Profile* profile,
|
| @@ -240,12 +260,10 @@ syncer::SyncError ExtensionSyncService::ProcessSyncChanges(
|
| i != change_list.end();
|
| ++i) {
|
| syncer::ModelType type = i->sync_data().GetDataType();
|
| - if (type == syncer::EXTENSIONS) {
|
| - extension_sync_bundle_.ProcessSyncChange(
|
| - extensions::ExtensionSyncData(*i));
|
| - } else if (type == syncer::APPS) {
|
| + if (type == syncer::EXTENSIONS)
|
| + extension_sync_bundle_.ProcessSyncChange(ExtensionSyncData(*i));
|
| + else if (type == syncer::APPS)
|
| app_sync_bundle_.ProcessSyncChange(extensions::AppSyncData(*i));
|
| - }
|
| }
|
|
|
| extension_prefs_->app_sorting()->FixNTPOrdinalCollisions();
|
| @@ -253,14 +271,15 @@ syncer::SyncError ExtensionSyncService::ProcessSyncChanges(
|
| return syncer::SyncError();
|
| }
|
|
|
| -extensions::ExtensionSyncData ExtensionSyncService::GetExtensionSyncData(
|
| +ExtensionSyncData ExtensionSyncService::GetExtensionSyncData(
|
| const Extension& extension) const {
|
| - return extensions::ExtensionSyncData(
|
| + return ExtensionSyncData(
|
| extension,
|
| extension_service_->IsExtensionEnabled(extension.id()),
|
| extensions::util::IsIncognitoEnabled(extension.id(), profile_),
|
| extension_prefs_->HasDisableReason(extension.id(),
|
| - Extension::DISABLE_REMOTE_INSTALL));
|
| + Extension::DISABLE_REMOTE_INSTALL),
|
| + GetAllowedOnAllUrlsOptionalBoolean(extension.id(), profile_));
|
| }
|
|
|
| extensions::AppSyncData ExtensionSyncService::GetAppSyncData(
|
| @@ -271,15 +290,16 @@ extensions::AppSyncData ExtensionSyncService::GetAppSyncData(
|
| extensions::util::IsIncognitoEnabled(extension.id(), profile_),
|
| extension_prefs_->HasDisableReason(extension.id(),
|
| Extension::DISABLE_REMOTE_INSTALL),
|
| + GetAllowedOnAllUrlsOptionalBoolean(extension.id(), profile_),
|
| extension_prefs_->app_sorting()->GetAppLaunchOrdinal(extension.id()),
|
| extension_prefs_->app_sorting()->GetPageOrdinal(extension.id()),
|
| extensions::GetLaunchTypePrefValue(extension_prefs_, extension.id()));
|
| }
|
|
|
| -std::vector<extensions::ExtensionSyncData>
|
| - ExtensionSyncService::GetExtensionSyncDataList() const {
|
| +std::vector<ExtensionSyncData>
|
| + ExtensionSyncService::GetExtensionSyncDataList() const {
|
| ExtensionRegistry* registry = ExtensionRegistry::Get(profile_);
|
| - std::vector<extensions::ExtensionSyncData> extension_sync_list;
|
| + std::vector<ExtensionSyncData> extension_sync_list;
|
| extension_sync_bundle_.GetExtensionSyncDataListHelper(
|
| registry->enabled_extensions(), &extension_sync_list);
|
| extension_sync_bundle_.GetExtensionSyncDataListHelper(
|
| @@ -287,7 +307,7 @@ std::vector<extensions::ExtensionSyncData>
|
| extension_sync_bundle_.GetExtensionSyncDataListHelper(
|
| registry->terminated_extensions(), &extension_sync_list);
|
|
|
| - std::vector<extensions::ExtensionSyncData> pending_extensions =
|
| + std::vector<ExtensionSyncData> pending_extensions =
|
| extension_sync_bundle_.GetPendingData();
|
| extension_sync_list.insert(extension_sync_list.begin(),
|
| pending_extensions.begin(),
|
| @@ -317,7 +337,7 @@ std::vector<extensions::AppSyncData> ExtensionSyncService::GetAppSyncDataList()
|
| }
|
|
|
| bool ExtensionSyncService::ProcessExtensionSyncData(
|
| - const extensions::ExtensionSyncData& extension_sync_data) {
|
| + const ExtensionSyncData& extension_sync_data) {
|
| if (!ProcessExtensionSyncDataHelper(extension_sync_data,
|
| syncer::EXTENSIONS)) {
|
| extension_sync_bundle_.AddPendingExtension(extension_sync_data.id(),
|
| @@ -443,7 +463,7 @@ bool ExtensionSyncService::IsPendingEnable(
|
| }
|
|
|
| bool ExtensionSyncService::ProcessExtensionSyncDataHelper(
|
| - const extensions::ExtensionSyncData& extension_sync_data,
|
| + const ExtensionSyncData& extension_sync_data,
|
| syncer::ModelType type) {
|
| const std::string& id = extension_sync_data.id();
|
| const Extension* extension = extension_service_->GetInstalledExtension(id);
|
| @@ -512,6 +532,14 @@ bool ExtensionSyncService::ProcessExtensionSyncDataHelper(
|
| id, profile_, extension_sync_data.incognito_enabled());
|
| extension = NULL; // No longer safe to use.
|
|
|
| + // Update the all urls flag.
|
| + if (extension_sync_data.all_urls_enabled() !=
|
| + ExtensionSyncData::BOOLEAN_UNSET) {
|
| + bool allowed = extension_sync_data.all_urls_enabled() ==
|
| + ExtensionSyncData::BOOLEAN_TRUE;
|
| + extensions::util::SetAllowedScriptingOnAllUrls(id, profile_, allowed);
|
| + }
|
| +
|
| if (extension_installed) {
|
| // If the extension is already installed, check if it's outdated.
|
| if (version_compare_result < 0) {
|
|
|