Index: chrome/browser/content_settings/host_content_settings_map.cc |
diff --git a/chrome/browser/content_settings/host_content_settings_map.cc b/chrome/browser/content_settings/host_content_settings_map.cc |
index e9ebe313388bf08b5c06eaca1b1399ec11e4e8fe..f65ccbd2e43f59e6c3439867e8e4093d5e4e20c9 100644 |
--- a/chrome/browser/content_settings/host_content_settings_map.cc |
+++ b/chrome/browser/content_settings/host_content_settings_map.cc |
@@ -293,6 +293,34 @@ void HostContentSettingsMap::SetWebsiteSetting( |
NOTREACHED(); |
} |
+void HostContentSettingsMap::SetNarrowestWebsiteSetting( |
+ const ContentSettingsPattern& primary_pattern, |
+ const ContentSettingsPattern& secondary_pattern, |
+ ContentSettingsType content_type, |
+ const std::string& resource_identifier, |
+ ContentSetting setting, |
+ content_settings::SettingInfo existing_info) { |
+ ContentSettingsPattern narrow_primary = primary_pattern; |
+ ContentSettingsPattern narrow_secondary = secondary_pattern; |
+ |
+ DCHECK_EQ(content_settings::SETTING_SOURCE_USER, existing_info.source); |
+ ContentSettingsPattern::Relation r1 = |
+ existing_info.primary_pattern.Compare(primary_pattern); |
+ if (r1 == ContentSettingsPattern::PREDECESSOR) { |
+ narrow_primary = existing_info.primary_pattern; |
+ } else if (r1 == ContentSettingsPattern::IDENTITY) { |
+ ContentSettingsPattern::Relation r2 = |
+ existing_info.secondary_pattern.Compare(secondary_pattern); |
+ DCHECK(r2 != ContentSettingsPattern::DISJOINT_ORDER_POST && |
+ r2 != ContentSettingsPattern::DISJOINT_ORDER_PRE); |
+ if (r2 == ContentSettingsPattern::PREDECESSOR) |
+ narrow_secondary = existing_info.secondary_pattern; |
+ } |
+ |
+ SetContentSetting( |
+ narrow_primary, narrow_secondary, content_type, std::string(), setting); |
+} |
+ |
void HostContentSettingsMap::SetContentSetting( |
const ContentSettingsPattern& primary_pattern, |
const ContentSettingsPattern& secondary_pattern, |