Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(816)

Unified Diff: components/content_settings/core/browser/host_content_settings_map.cc

Issue 1895993003: Add migration code to change existing domain scoped content settings to be origin scoped (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove logs and format Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/content_settings/core/browser/host_content_settings_map.cc
diff --git a/components/content_settings/core/browser/host_content_settings_map.cc b/components/content_settings/core/browser/host_content_settings_map.cc
index 6b56ae6e7f863dec90f9a3cc482015fefa96ccb3..39a971e95ad7f668b314d0b322fc78a2c7518500 100644
--- a/components/content_settings/core/browser/host_content_settings_map.cc
+++ b/components/content_settings/core/browser/host_content_settings_map.cc
@@ -32,6 +32,7 @@
#include "components/content_settings/core/common/pref_names.h"
#include "components/pref_registry/pref_registry_syncable.h"
#include "components/prefs/pref_service.h"
+#include "components/syncable_prefs/pref_model_associator.h"
#include "net/base/net_errors.h"
#include "net/base/static_cookie_policy.h"
#include "url/gurl.h"
@@ -118,11 +119,7 @@ content_settings::PatternPair GetPatternsFromScopingType(
content_settings::PatternPair patterns;
switch (scoping_type) {
- case WebsiteSettingsInfo::TOP_LEVEL_DOMAIN_ONLY_SCOPE:
- case WebsiteSettingsInfo::REQUESTING_DOMAIN_ONLY_SCOPE:
- patterns.first = ContentSettingsPattern::FromURL(primary_url);
- patterns.second = ContentSettingsPattern::Wildcard();
- break;
+ case WebsiteSettingsInfo::TOP_LEVEL_ORIGIN_ONLY_SCOPE:
case WebsiteSettingsInfo::REQUESTING_ORIGIN_ONLY_SCOPE:
patterns.first = ContentSettingsPattern::FromURLNoWildcard(primary_url);
patterns.second = ContentSettingsPattern::Wildcard();
@@ -172,8 +169,12 @@ HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs,
content_settings_providers_[DEFAULT_PROVIDER] = default_provider;
MigrateKeygenSettings();
-
+ MigrateDomainScopedSettings();
RecordNumberOfExceptions();
+
+ syncable_prefs::PrefModelAssociator::SetMergeDataFinishedCallback(
+ base::Bind(&HostContentSettingsMap::MigrateDomainScopedSettings,
+ base::Unretained(this)));
}
// static
@@ -497,6 +498,60 @@ void HostContentSettingsMap::MigrateKeygenSettings() {
}
}
+void HostContentSettingsMap::MigrateDomainScopedSettings() {
+ const ContentSettingsType kDomainScopedTypes[] = {
+ CONTENT_SETTINGS_TYPE_COOKIES,
+#if !defined(OS_ANDROID) && !defined(OS_IOS)
raymes 2016/06/16 03:23:51 Rather than the ifdefs, can we just check to see i
lshang 2016/06/20 01:34:22 Done.
+ CONTENT_SETTINGS_TYPE_IMAGES,
+ CONTENT_SETTINGS_TYPE_PLUGINS,
+#endif
+#if !defined(OS_IOS)
+ CONTENT_SETTINGS_TYPE_JAVASCRIPT,
+ CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS,
+#endif
+ CONTENT_SETTINGS_TYPE_POPUPS
+ };
+ for (const ContentSettingsType& type : kDomainScopedTypes) {
+ DCHECK(content_settings::ContentSettingsRegistry::GetInstance()->Get(type));
+ ContentSettingsForOneType settings;
+ GetSettingsForOneType(type, std::string(), &settings);
+
+ for (const ContentSettingPatternSource& setting_entry : settings) {
+ // Migrate user preference settings only.
+ if (setting_entry.source != "preference")
+ continue;
+ // Migrate ALLOW settings only.
+ if (setting_entry.setting != CONTENT_SETTING_ALLOW)
+ continue;
+ // Skip default settings.
+ if (setting_entry.primary_pattern == ContentSettingsPattern::Wildcard() &&
+ setting_entry.secondary_pattern == ContentSettingsPattern::Wildcard())
raymes 2016/06/16 03:23:51 nit: add {}
lshang 2016/06/20 01:34:22 Done.
+ continue;
raymes 2016/06/16 03:23:50 Should we also DCHECK that the secondary_pattern i
lshang 2016/06/20 01:34:22 Done.
+ if (setting_entry.primary_pattern.IsGeneratedFromURLDomainScoped()) {
raymes 2016/06/16 03:23:50 What about using "continue" here (if this evaluate
lshang 2016/06/20 01:34:22 Done.
+ ContentSettingsPattern origin_pattern =
+ ContentSettingsPattern::FromDomainToOrigin(
+ setting_entry.primary_pattern);
+ GURL origin(origin_pattern.ToString());
+ if (origin.is_valid()) {
raymes 2016/06/16 03:23:51 Same here
lshang 2016/06/20 01:34:22 Done.
+ ContentSetting origin_setting =
raymes 2016/06/16 03:23:51 Maybe say: // Ensure that the current resolved con
lshang 2016/06/20 01:34:22 Done.
+ GetContentSetting(origin, origin, type, std::string());
+
+ // Remove the domiain scoped pattern.
raymes 2016/06/16 03:23:50 // Remove the domain scoped pattern. If |origin_se
lshang 2016/06/20 01:34:22 Done.
+ SetContentSettingCustomScope(setting_entry.primary_pattern,
+ setting_entry.secondary_pattern, type,
+ std::string(), CONTENT_SETTING_DEFAULT);
+
+ // If the current setting of narrow-down origin is ALLOW, then add a
+ // new setting entry of this origin.
raymes 2016/06/16 03:23:51 // If the current resolved content setting is allo
lshang 2016/06/20 01:34:22 Done.
+ if (origin_setting == CONTENT_SETTING_ALLOW)
+ SetContentSettingDefaultScope(origin, GURL(), type, std::string(),
+ CONTENT_SETTING_ALLOW);
+ }
+ }
+ }
+ }
+}
+
void HostContentSettingsMap::RecordNumberOfExceptions() {
for (const content_settings::WebsiteSettingsInfo* info :
*content_settings::WebsiteSettingsRegistry::GetInstance()) {
@@ -654,6 +709,7 @@ void HostContentSettingsMap::OnContentSettingChanged(
HostContentSettingsMap::~HostContentSettingsMap() {
DCHECK(!prefs_);
STLDeleteValues(&content_settings_providers_);
+ syncable_prefs::PrefModelAssociator::ResetMergeDataFinishedCallback();
}
void HostContentSettingsMap::ShutdownOnUIThread() {

Powered by Google App Engine
This is Rietveld 408576698