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) { |