OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/content_settings/core/browser/host_content_settings_map.h" | 5 #include "components/content_settings/core/browser/host_content_settings_map.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 14 matching lines...) Expand all Loading... | |
25 #include "components/content_settings/core/browser/content_settings_pref_provide r.h" | 25 #include "components/content_settings/core/browser/content_settings_pref_provide r.h" |
26 #include "components/content_settings/core/browser/content_settings_provider.h" | 26 #include "components/content_settings/core/browser/content_settings_provider.h" |
27 #include "components/content_settings/core/browser/content_settings_registry.h" | 27 #include "components/content_settings/core/browser/content_settings_registry.h" |
28 #include "components/content_settings/core/browser/content_settings_rule.h" | 28 #include "components/content_settings/core/browser/content_settings_rule.h" |
29 #include "components/content_settings/core/browser/content_settings_utils.h" | 29 #include "components/content_settings/core/browser/content_settings_utils.h" |
30 #include "components/content_settings/core/browser/website_settings_registry.h" | 30 #include "components/content_settings/core/browser/website_settings_registry.h" |
31 #include "components/content_settings/core/common/content_settings_pattern.h" | 31 #include "components/content_settings/core/common/content_settings_pattern.h" |
32 #include "components/content_settings/core/common/pref_names.h" | 32 #include "components/content_settings/core/common/pref_names.h" |
33 #include "components/pref_registry/pref_registry_syncable.h" | 33 #include "components/pref_registry/pref_registry_syncable.h" |
34 #include "components/prefs/pref_service.h" | 34 #include "components/prefs/pref_service.h" |
35 #include "components/syncable_prefs/pref_model_associator.h" | |
35 #include "net/base/net_errors.h" | 36 #include "net/base/net_errors.h" |
36 #include "net/base/static_cookie_policy.h" | 37 #include "net/base/static_cookie_policy.h" |
37 #include "url/gurl.h" | 38 #include "url/gurl.h" |
38 | 39 |
39 using content_settings::WebsiteSettingsInfo; | 40 using content_settings::WebsiteSettingsInfo; |
40 | 41 |
41 namespace { | 42 namespace { |
42 | 43 |
43 typedef std::vector<content_settings::Rule> Rules; | 44 typedef std::vector<content_settings::Rule> Rules; |
44 | 45 |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
111 } | 112 } |
112 | 113 |
113 content_settings::PatternPair GetPatternsFromScopingType( | 114 content_settings::PatternPair GetPatternsFromScopingType( |
114 WebsiteSettingsInfo::ScopingType scoping_type, | 115 WebsiteSettingsInfo::ScopingType scoping_type, |
115 const GURL& primary_url, | 116 const GURL& primary_url, |
116 const GURL& secondary_url) { | 117 const GURL& secondary_url) { |
117 DCHECK(!primary_url.is_empty()); | 118 DCHECK(!primary_url.is_empty()); |
118 content_settings::PatternPair patterns; | 119 content_settings::PatternPair patterns; |
119 | 120 |
120 switch (scoping_type) { | 121 switch (scoping_type) { |
121 case WebsiteSettingsInfo::TOP_LEVEL_DOMAIN_ONLY_SCOPE: | 122 case WebsiteSettingsInfo::TOP_LEVEL_ORIGIN_ONLY_SCOPE: |
122 case WebsiteSettingsInfo::REQUESTING_DOMAIN_ONLY_SCOPE: | |
123 patterns.first = ContentSettingsPattern::FromURL(primary_url); | |
124 patterns.second = ContentSettingsPattern::Wildcard(); | |
125 break; | |
126 case WebsiteSettingsInfo::REQUESTING_ORIGIN_ONLY_SCOPE: | 123 case WebsiteSettingsInfo::REQUESTING_ORIGIN_ONLY_SCOPE: |
127 patterns.first = ContentSettingsPattern::FromURLNoWildcard(primary_url); | 124 patterns.first = ContentSettingsPattern::FromURLNoWildcard(primary_url); |
128 patterns.second = ContentSettingsPattern::Wildcard(); | 125 patterns.second = ContentSettingsPattern::Wildcard(); |
129 break; | 126 break; |
130 case WebsiteSettingsInfo::REQUESTING_ORIGIN_AND_TOP_LEVEL_ORIGIN_SCOPE: | 127 case WebsiteSettingsInfo::REQUESTING_ORIGIN_AND_TOP_LEVEL_ORIGIN_SCOPE: |
131 DCHECK(!secondary_url.is_empty()); | 128 DCHECK(!secondary_url.is_empty()); |
132 patterns.first = ContentSettingsPattern::FromURLNoWildcard(primary_url); | 129 patterns.first = ContentSettingsPattern::FromURLNoWildcard(primary_url); |
133 patterns.second = | 130 patterns.second = |
134 ContentSettingsPattern::FromURLNoWildcard(secondary_url); | 131 ContentSettingsPattern::FromURLNoWildcard(secondary_url); |
135 break; | 132 break; |
(...skipping 29 matching lines...) Expand all Loading... | |
165 // the guest profile and so we need to ensure those get cleared. | 162 // the guest profile and so we need to ensure those get cleared. |
166 if (is_guest_profile) | 163 if (is_guest_profile) |
167 pref_provider_->ClearPrefs(); | 164 pref_provider_->ClearPrefs(); |
168 | 165 |
169 content_settings::ObservableProvider* default_provider = | 166 content_settings::ObservableProvider* default_provider = |
170 new content_settings::DefaultProvider(prefs_, is_off_the_record_); | 167 new content_settings::DefaultProvider(prefs_, is_off_the_record_); |
171 default_provider->AddObserver(this); | 168 default_provider->AddObserver(this); |
172 content_settings_providers_[DEFAULT_PROVIDER] = default_provider; | 169 content_settings_providers_[DEFAULT_PROVIDER] = default_provider; |
173 | 170 |
174 MigrateKeygenSettings(); | 171 MigrateKeygenSettings(); |
172 MigrateDomainScopedSettings(); | |
173 RecordNumberOfExceptions(); | |
175 | 174 |
176 RecordNumberOfExceptions(); | 175 syncable_prefs::PrefModelAssociator::SetMergeDataFinishedCallback( |
176 base::Bind(&HostContentSettingsMap::MigrateDomainScopedSettings, | |
177 base::Unretained(this))); | |
177 } | 178 } |
178 | 179 |
179 // static | 180 // static |
180 void HostContentSettingsMap::RegisterProfilePrefs( | 181 void HostContentSettingsMap::RegisterProfilePrefs( |
181 user_prefs::PrefRegistrySyncable* registry) { | 182 user_prefs::PrefRegistrySyncable* registry) { |
182 // Ensure the content settings are all registered. | 183 // Ensure the content settings are all registered. |
183 content_settings::ContentSettingsRegistry::GetInstance(); | 184 content_settings::ContentSettingsRegistry::GetInstance(); |
184 | 185 |
185 registry->RegisterIntegerPref(prefs::kContentSettingsWindowLastTabIndex, 0); | 186 registry->RegisterIntegerPref(prefs::kContentSettingsWindowLastTabIndex, 0); |
186 | 187 |
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
490 CONTENT_SETTINGS_TYPE_KEYGEN, | 491 CONTENT_SETTINGS_TYPE_KEYGEN, |
491 std::string(), CONTENT_SETTING_DEFAULT); | 492 std::string(), CONTENT_SETTING_DEFAULT); |
492 // Set the new pattern. | 493 // Set the new pattern. |
493 SetContentSettingDefaultScope(url, GURL(), CONTENT_SETTINGS_TYPE_KEYGEN, | 494 SetContentSettingDefaultScope(url, GURL(), CONTENT_SETTINGS_TYPE_KEYGEN, |
494 std::string(), content_setting); | 495 std::string(), content_setting); |
495 } | 496 } |
496 } | 497 } |
497 } | 498 } |
498 } | 499 } |
499 | 500 |
501 void HostContentSettingsMap::MigrateDomainScopedSettings() { | |
502 const ContentSettingsType kDomainScopedTypes[] = { | |
503 CONTENT_SETTINGS_TYPE_COOKIES, | |
504 #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.
| |
505 CONTENT_SETTINGS_TYPE_IMAGES, | |
506 CONTENT_SETTINGS_TYPE_PLUGINS, | |
507 #endif | |
508 #if !defined(OS_IOS) | |
509 CONTENT_SETTINGS_TYPE_JAVASCRIPT, | |
510 CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, | |
511 #endif | |
512 CONTENT_SETTINGS_TYPE_POPUPS | |
513 }; | |
514 for (const ContentSettingsType& type : kDomainScopedTypes) { | |
515 DCHECK(content_settings::ContentSettingsRegistry::GetInstance()->Get(type)); | |
516 ContentSettingsForOneType settings; | |
517 GetSettingsForOneType(type, std::string(), &settings); | |
518 | |
519 for (const ContentSettingPatternSource& setting_entry : settings) { | |
520 // Migrate user preference settings only. | |
521 if (setting_entry.source != "preference") | |
522 continue; | |
523 // Migrate ALLOW settings only. | |
524 if (setting_entry.setting != CONTENT_SETTING_ALLOW) | |
525 continue; | |
526 // Skip default settings. | |
527 if (setting_entry.primary_pattern == ContentSettingsPattern::Wildcard() && | |
528 setting_entry.secondary_pattern == ContentSettingsPattern::Wildcard()) | |
raymes
2016/06/16 03:23:51
nit: add {}
lshang
2016/06/20 01:34:22
Done.
| |
529 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.
| |
530 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.
| |
531 ContentSettingsPattern origin_pattern = | |
532 ContentSettingsPattern::FromDomainToOrigin( | |
533 setting_entry.primary_pattern); | |
534 GURL origin(origin_pattern.ToString()); | |
535 if (origin.is_valid()) { | |
raymes
2016/06/16 03:23:51
Same here
lshang
2016/06/20 01:34:22
Done.
| |
536 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.
| |
537 GetContentSetting(origin, origin, type, std::string()); | |
538 | |
539 // 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.
| |
540 SetContentSettingCustomScope(setting_entry.primary_pattern, | |
541 setting_entry.secondary_pattern, type, | |
542 std::string(), CONTENT_SETTING_DEFAULT); | |
543 | |
544 // If the current setting of narrow-down origin is ALLOW, then add a | |
545 // 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.
| |
546 if (origin_setting == CONTENT_SETTING_ALLOW) | |
547 SetContentSettingDefaultScope(origin, GURL(), type, std::string(), | |
548 CONTENT_SETTING_ALLOW); | |
549 } | |
550 } | |
551 } | |
552 } | |
553 } | |
554 | |
500 void HostContentSettingsMap::RecordNumberOfExceptions() { | 555 void HostContentSettingsMap::RecordNumberOfExceptions() { |
501 for (const content_settings::WebsiteSettingsInfo* info : | 556 for (const content_settings::WebsiteSettingsInfo* info : |
502 *content_settings::WebsiteSettingsRegistry::GetInstance()) { | 557 *content_settings::WebsiteSettingsRegistry::GetInstance()) { |
503 ContentSettingsType content_type = info->type(); | 558 ContentSettingsType content_type = info->type(); |
504 const std::string type_name = info->name(); | 559 const std::string type_name = info->name(); |
505 | 560 |
506 ContentSettingsForOneType settings; | 561 ContentSettingsForOneType settings; |
507 GetSettingsForOneType(content_type, std::string(), &settings); | 562 GetSettingsForOneType(content_type, std::string(), &settings); |
508 size_t num_exceptions = 0; | 563 size_t num_exceptions = 0; |
509 for (const ContentSettingPatternSource& setting_entry : settings) { | 564 for (const ContentSettingPatternSource& setting_entry : settings) { |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
647 observers_, | 702 observers_, |
648 OnContentSettingChanged(primary_pattern, | 703 OnContentSettingChanged(primary_pattern, |
649 secondary_pattern, | 704 secondary_pattern, |
650 content_type, | 705 content_type, |
651 resource_identifier)); | 706 resource_identifier)); |
652 } | 707 } |
653 | 708 |
654 HostContentSettingsMap::~HostContentSettingsMap() { | 709 HostContentSettingsMap::~HostContentSettingsMap() { |
655 DCHECK(!prefs_); | 710 DCHECK(!prefs_); |
656 STLDeleteValues(&content_settings_providers_); | 711 STLDeleteValues(&content_settings_providers_); |
712 syncable_prefs::PrefModelAssociator::ResetMergeDataFinishedCallback(); | |
657 } | 713 } |
658 | 714 |
659 void HostContentSettingsMap::ShutdownOnUIThread() { | 715 void HostContentSettingsMap::ShutdownOnUIThread() { |
660 DCHECK(thread_checker_.CalledOnValidThread()); | 716 DCHECK(thread_checker_.CalledOnValidThread()); |
661 DCHECK(prefs_); | 717 DCHECK(prefs_); |
662 prefs_ = NULL; | 718 prefs_ = NULL; |
663 for (ProviderIterator it = content_settings_providers_.begin(); | 719 for (ProviderIterator it = content_settings_providers_.begin(); |
664 it != content_settings_providers_.end(); | 720 it != content_settings_providers_.end(); |
665 ++it) { | 721 ++it) { |
666 it->second->ShutdownOnUIThread(); | 722 it->second->ShutdownOnUIThread(); |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
846 rule.secondary_pattern.Matches(secondary_url)) { | 902 rule.secondary_pattern.Matches(secondary_url)) { |
847 if (primary_pattern) | 903 if (primary_pattern) |
848 *primary_pattern = rule.primary_pattern; | 904 *primary_pattern = rule.primary_pattern; |
849 if (secondary_pattern) | 905 if (secondary_pattern) |
850 *secondary_pattern = rule.secondary_pattern; | 906 *secondary_pattern = rule.secondary_pattern; |
851 return base::WrapUnique(rule.value.get()->DeepCopy()); | 907 return base::WrapUnique(rule.value.get()->DeepCopy()); |
852 } | 908 } |
853 } | 909 } |
854 return std::unique_ptr<base::Value>(); | 910 return std::unique_ptr<base::Value>(); |
855 } | 911 } |
OLD | NEW |