summaryrefslogtreecommitdiffstats
path: root/chrome/browser/content_settings/host_content_settings_map.cc
diff options
context:
space:
mode:
authormarja@chromium.org <marja@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-19 16:18:14 +0000
committermarja@chromium.org <marja@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-19 16:18:14 +0000
commitc73c826d25ab8ccc147477e80104b3d0fce769cc (patch)
tree9a7be81ef37ce489f06465b78dfef8a623e4023e /chrome/browser/content_settings/host_content_settings_map.cc
parent8103783ca34d7ac9c8ed7a4d15ac6a936f4c2b40 (diff)
downloadchromium_src-c73c826d25ab8ccc147477e80104b3d0fce769cc.zip
chromium_src-c73c826d25ab8ccc147477e80104b3d0fce769cc.tar.gz
chromium_src-c73c826d25ab8ccc147477e80104b3d0fce769cc.tar.bz2
Take the content settings set by extensions into account in the default setting UI.
If an extension sets a (wildcard, wildcard) content setting, disable the default setting UI and display a banner. BUG=NONE TEST=manual Review URL: http://codereview.chromium.org/8333015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@106289 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/content_settings/host_content_settings_map.cc')
-rw-r--r--chrome/browser/content_settings/host_content_settings_map.cc58
1 files changed, 25 insertions, 33 deletions
diff --git a/chrome/browser/content_settings/host_content_settings_map.cc b/chrome/browser/content_settings/host_content_settings_map.cc
index fb3a9a5..99ace47 100644
--- a/chrome/browser/content_settings/host_content_settings_map.cc
+++ b/chrome/browser/content_settings/host_content_settings_map.cc
@@ -156,41 +156,47 @@ void HostContentSettingsMap::RegisterUserPrefs(PrefService* prefs) {
}
ContentSetting HostContentSettingsMap::GetDefaultContentSettingFromProvider(
- ContentSettingsType content_type, ProviderType provider_type) const {
- ConstProviderIterator it = content_settings_providers_.find(provider_type);
- if (it == content_settings_providers_.end())
- return CONTENT_SETTING_DEFAULT;
+ ContentSettingsType content_type,
+ content_settings::ProviderInterface* provider) const {
scoped_ptr<content_settings::RuleIterator> rule_iterator(
- it->second->GetRuleIterator(content_type, "", false));
+ provider->GetRuleIterator(content_type, "", false));
return GetDefaultSetting(rule_iterator.get());
}
ContentSetting HostContentSettingsMap::GetDefaultContentSetting(
- ContentSettingsType content_type) const {
+ ContentSettingsType content_type,
+ std::string* provider_id) const {
DCHECK(!ContentTypeHasCompoundValue(content_type));
- // First check if there is a default setting set by policy.
- ContentSetting default_setting = GetDefaultContentSettingFromProvider(
- content_type, POLICY_PROVIDER);
- if (default_setting != CONTENT_SETTING_DEFAULT)
- return default_setting;
-
- // Get the default setting.
- default_setting = GetDefaultContentSettingFromProvider(
- content_type, DEFAULT_PROVIDER);
+ // Iterate through the list of providers and return the first non-NULL value
+ // that matches |primary_url| and |secondary_url|.
+ for (ConstProviderIterator provider = content_settings_providers_.begin();
+ provider != content_settings_providers_.end();
+ ++provider) {
+ if (provider->first == PREF_PROVIDER)
+ continue;
+ ContentSetting default_setting =
+ GetDefaultContentSettingFromProvider(content_type, provider->second);
+ if (default_setting != CONTENT_SETTING_DEFAULT) {
+ if (provider_id)
+ *provider_id = kProviderNames[provider->first];
+ return default_setting;
+ }
+ }
// The method GetDefaultContentSetting always has to return an explicit
// value that is to be used as default. We here rely on the
// DefaultProvider to always provide a value.
- CHECK_NE(CONTENT_SETTING_DEFAULT, default_setting);
- return default_setting;
+ NOTREACHED();
+ return CONTENT_SETTING_DEFAULT;
}
ContentSettings HostContentSettingsMap::GetDefaultContentSettings() const {
ContentSettings output(CONTENT_SETTING_DEFAULT);
for (int i = 0; i < CONTENT_SETTINGS_NUM_TYPES; ++i) {
if (!ContentTypeHasCompoundValue(ContentSettingsType(i)))
- output.settings[i] = GetDefaultContentSetting(ContentSettingsType(i));
+ output.settings[i] = GetDefaultContentSetting(ContentSettingsType(i),
+ NULL);
}
return output;
}
@@ -239,7 +245,7 @@ ContentSetting HostContentSettingsMap::GetCookieContentSetting(
if (value.get())
return content_settings::ValueToContentSetting(value.get());
- return GetDefaultContentSetting(CONTENT_SETTINGS_TYPE_COOKIES);
+ return GetDefaultContentSetting(CONTENT_SETTINGS_TYPE_COOKIES, NULL);
}
ContentSetting HostContentSettingsMap::GetContentSetting(
@@ -513,13 +519,6 @@ HostContentSettingsMap::~HostContentSettingsMap() {
STLDeleteValues(&content_settings_providers_);
}
-bool HostContentSettingsMap::IsDefaultContentSettingManaged(
- ContentSettingsType content_type) const {
- ContentSetting default_setting =
- GetDefaultContentSettingFromProvider(content_type, POLICY_PROVIDER);
- return (default_setting != CONTENT_SETTING_DEFAULT);
-}
-
void HostContentSettingsMap::ShutdownOnUIThread() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(prefs_);
@@ -562,13 +561,6 @@ void HostContentSettingsMap::AddSettingsForOneType(
ContentSettingsPattern wildcard = ContentSettingsPattern::Wildcard();
while (rule_iterator->HasNext()) {
const content_settings::Rule& rule = rule_iterator->Next();
- // Filter out default settings.
- if (rule.primary_pattern == wildcard &&
- rule.secondary_pattern == wildcard &&
- (provider_type == POLICY_PROVIDER ||
- provider_type == DEFAULT_PROVIDER)) {
- continue;
- }
settings->push_back(PatternSettingSourceTuple(
rule.primary_pattern, rule.secondary_pattern,
content_settings::ValueToContentSetting(rule.value.get()),