| 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 a4a077080a15847b8798655935175cbf3ebdd24f..0cb4f3941813408ebacff3d96ecfc58432a8e089 100644
|
| --- a/components/content_settings/core/browser/host_content_settings_map.cc
|
| +++ b/components/content_settings/core/browser/host_content_settings_map.cc
|
| @@ -161,6 +161,18 @@ content_settings::PatternPair GetPatternsFromScopingType(
|
| return patterns;
|
| }
|
|
|
| +content_settings::PatternPair GetPatternsForContentSettingsType(
|
| + const GURL& primary_url,
|
| + const GURL& secondary_url,
|
| + ContentSettingsType type) {
|
| + const WebsiteSettingsInfo* website_settings_info =
|
| + content_settings::WebsiteSettingsRegistry::GetInstance()->Get(type);
|
| + DCHECK(website_settings_info);
|
| + content_settings::PatternPair patterns = GetPatternsFromScopingType(
|
| + website_settings_info->scoping_type(), primary_url, secondary_url);
|
| + return patterns;
|
| +}
|
| +
|
| } // namespace
|
|
|
| HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs,
|
| @@ -349,11 +361,8 @@ void HostContentSettingsMap::SetWebsiteSettingDefaultScope(
|
| ContentSettingsType content_type,
|
| const std::string& resource_identifier,
|
| std::unique_ptr<base::Value> value) {
|
| - const WebsiteSettingsInfo* info =
|
| - content_settings::WebsiteSettingsRegistry::GetInstance()->Get(
|
| - content_type);
|
| - content_settings::PatternPair patterns = GetPatternsFromScopingType(
|
| - info->scoping_type(), primary_url, secondary_url);
|
| + content_settings::PatternPair patterns = GetPatternsForContentSettingsType(
|
| + primary_url, secondary_url, content_type);
|
| ContentSettingsPattern primary_pattern = patterns.first;
|
| ContentSettingsPattern secondary_pattern = patterns.second;
|
| if (!primary_pattern.IsValid() || !secondary_pattern.IsValid())
|
| @@ -385,11 +394,34 @@ void HostContentSettingsMap::SetWebsiteSettingCustomScope(
|
| NOTREACHED();
|
| }
|
|
|
| +bool HostContentSettingsMap::CanSetNarrowestContentSetting(
|
| + const GURL& primary_url,
|
| + const GURL& secondary_url,
|
| + ContentSettingsType type) const {
|
| + content_settings::PatternPair patterns =
|
| + GetNarrowestPatterns(primary_url, secondary_url, type);
|
| + return patterns.first.IsValid() && patterns.second.IsValid();
|
| +}
|
| +
|
| void HostContentSettingsMap::SetNarrowestContentSetting(
|
| const GURL& primary_url,
|
| const GURL& secondary_url,
|
| ContentSettingsType type,
|
| ContentSetting setting) {
|
| + content_settings::PatternPair patterns =
|
| + GetNarrowestPatterns(primary_url, secondary_url, type);
|
| +
|
| + if (!patterns.first.IsValid() || !patterns.second.IsValid())
|
| + return;
|
| +
|
| + SetContentSettingCustomScope(patterns.first, patterns.second, type,
|
| + std::string(), setting);
|
| +}
|
| +
|
| +content_settings::PatternPair HostContentSettingsMap::GetNarrowestPatterns (
|
| + const GURL& primary_url,
|
| + const GURL& secondary_url,
|
| + ContentSettingsType type) const {
|
| // Permission settings are specified via rules. There exists always at least
|
| // one rule for the default setting. Get the rule that currently defines
|
| // the permission for the given permission |type|. Then test whether the
|
| @@ -401,29 +433,23 @@ void HostContentSettingsMap::SetNarrowestContentSetting(
|
| primary_url, secondary_url, type, std::string(), &info);
|
| DCHECK_EQ(content_settings::SETTING_SOURCE_USER, info.source);
|
|
|
| - const WebsiteSettingsInfo* website_settings_info =
|
| - content_settings::WebsiteSettingsRegistry::GetInstance()->Get(type);
|
| - content_settings::PatternPair patterns = GetPatternsFromScopingType(
|
| - website_settings_info->scoping_type(), primary_url, secondary_url);
|
| -
|
| - ContentSettingsPattern narrow_primary = patterns.first;
|
| - ContentSettingsPattern narrow_secondary = patterns.second;
|
| + content_settings::PatternPair patterns = GetPatternsForContentSettingsType(
|
| + primary_url, secondary_url, type);
|
|
|
| ContentSettingsPattern::Relation r1 =
|
| info.primary_pattern.Compare(patterns.first);
|
| if (r1 == ContentSettingsPattern::PREDECESSOR) {
|
| - narrow_primary = info.primary_pattern;
|
| + patterns.first = info.primary_pattern;
|
| } else if (r1 == ContentSettingsPattern::IDENTITY) {
|
| ContentSettingsPattern::Relation r2 =
|
| info.secondary_pattern.Compare(patterns.second);
|
| DCHECK(r2 != ContentSettingsPattern::DISJOINT_ORDER_POST &&
|
| r2 != ContentSettingsPattern::DISJOINT_ORDER_PRE);
|
| if (r2 == ContentSettingsPattern::PREDECESSOR)
|
| - narrow_secondary = info.secondary_pattern;
|
| + patterns.second = info.secondary_pattern;
|
| }
|
|
|
| - SetContentSettingCustomScope(narrow_primary, narrow_secondary, type,
|
| - std::string(), setting);
|
| + return patterns;
|
| }
|
|
|
| void HostContentSettingsMap::SetContentSettingCustomScope(
|
| @@ -458,14 +484,9 @@ void HostContentSettingsMap::SetContentSettingDefaultScope(
|
| ContentSettingsType content_type,
|
| const std::string& resource_identifier,
|
| ContentSetting setting) {
|
| - const ContentSettingsInfo* info =
|
| - content_settings::ContentSettingsRegistry::GetInstance()->Get(
|
| - content_type);
|
| - DCHECK(info);
|
| + content_settings::PatternPair patterns = GetPatternsForContentSettingsType(
|
| + primary_url, secondary_url, content_type);
|
|
|
| - content_settings::PatternPair patterns =
|
| - GetPatternsFromScopingType(info->website_settings_info()->scoping_type(),
|
| - primary_url, secondary_url);
|
| ContentSettingsPattern primary_pattern = patterns.first;
|
| ContentSettingsPattern secondary_pattern = patterns.second;
|
| if (!primary_pattern.IsValid() || !secondary_pattern.IsValid())
|
|
|