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

Unified Diff: chrome/browser/content_settings/host_content_settings_map.cc

Issue 542253003: Add a global on/off switch for content settings and expose a toggle on the Website Settings options… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@global-settings
Patch Set: Forgot to clarify ownership comments. Created 6 years, 3 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: 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 fba2d9ac628830df83a307800db94810df0baab4..11ba444e138e78aaf68dd44f4b7c2b714d2d75e3 100644
--- a/chrome/browser/content_settings/host_content_settings_map.cc
+++ b/chrome/browser/content_settings/host_content_settings_map.cc
@@ -82,14 +82,15 @@ bool SupportsResourceIdentifier(ContentSettingsType content_type) {
} // namespace
-HostContentSettingsMap::HostContentSettingsMap(
- PrefService* prefs,
- bool incognito) :
+HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs,
+ bool incognito)
+ :
#ifndef NDEBUG
used_from_thread_id_(base::PlatformThread::CurrentId()),
#endif
prefs_(prefs),
- is_off_the_record_(incognito) {
+ is_off_the_record_(incognito),
+ override_(prefs_, is_off_the_record_) {
content_settings::ObservableProvider* policy_provider =
new content_settings::PolicyProvider(prefs_);
policy_provider->AddObserver(this);
@@ -165,6 +166,7 @@ void HostContentSettingsMap::RegisterProfilePrefs(
content_settings::DefaultProvider::RegisterProfilePrefs(registry);
content_settings::PrefProvider::RegisterProfilePrefs(registry);
content_settings::PolicyProvider::RegisterProfilePrefs(registry);
+ content_settings::OverrideProvider::RegisterProfilePrefs(registry);
}
ContentSetting HostContentSettingsMap::GetDefaultContentSettingFromProvider(
@@ -218,8 +220,8 @@ ContentSetting HostContentSettingsMap::GetContentSetting(
ContentSettingsType content_type,
const std::string& resource_identifier) const {
DCHECK(!ContentTypeHasCompoundValue(content_type));
- scoped_ptr<base::Value> value(GetWebsiteSetting(
- primary_url, secondary_url, content_type, resource_identifier, NULL));
+ scoped_ptr<base::Value> value = GetWebsiteSetting(
+ primary_url, secondary_url, content_type, resource_identifier, NULL);
return content_settings::ValueToContentSetting(value.get());
}
@@ -410,6 +412,70 @@ base::Time HostContentSettingsMap::GetLastUsageByPattern(
primary_pattern, secondary_pattern, content_type);
}
+ContentSetting HostContentSettingsMap::GetContentSettingWithoutOverride(
+ const GURL& primary_url,
+ const GURL& secondary_url,
+ ContentSettingsType content_type,
+ const std::string& resource_identifier) {
+ scoped_ptr<base::Value> value(GetWebsiteSettingWithoutOverride(
+ primary_url, secondary_url, content_type, resource_identifier, NULL));
+ return content_settings::ValueToContentSetting(value.get());
+}
+
+scoped_ptr<base::Value>
+HostContentSettingsMap::GetWebsiteSettingWithoutOverride(
+ const GURL& primary_url,
+ const GURL& secondary_url,
+ ContentSettingsType content_type,
+ const std::string& resource_identifier,
+ content_settings::SettingInfo* info) const {
+ ContentSettingsPattern* primary_pattern = NULL;
+ ContentSettingsPattern* secondary_pattern = NULL;
+ if (info) {
+ primary_pattern = &info->primary_pattern;
+ secondary_pattern = &info->secondary_pattern;
+ }
+
+ // The list of |content_settings_providers_| is ordered according to their
+ // precedence.
+ for (ConstProviderIterator provider = content_settings_providers_.begin();
+ provider != content_settings_providers_.end();
+ ++provider) {
+ scoped_ptr<base::Value> value(
+ content_settings::GetContentSettingValueAndPatterns(provider->second,
+ primary_url,
+ secondary_url,
+ content_type,
+ resource_identifier,
+ is_off_the_record_,
+ primary_pattern,
+ secondary_pattern));
+ if (value) {
+ if (info)
+ info->source = kProviderSourceMap[provider->first];
+ return value.Pass();
+ }
+ }
+
+ if (info) {
+ info->source = content_settings::SETTING_SOURCE_NONE;
+ info->primary_pattern = ContentSettingsPattern();
+ info->secondary_pattern = ContentSettingsPattern();
+ }
+ return scoped_ptr<base::Value>();
+}
+
+void HostContentSettingsMap::SetContentSettingOverride(
+ ContentSettingsType content_type,
+ bool is_enabled) {
+ override_.SetContentSetting(content_type, is_enabled);
+}
+
+bool HostContentSettingsMap::GetContentSettingOverride(
+ ContentSettingsType content_type) {
+ return override_.IsEnabled(content_type);
+}
+
void HostContentSettingsMap::AddObserver(content_settings::Observer* observer) {
observers_.AddObserver(observer);
}
@@ -696,7 +762,7 @@ bool HostContentSettingsMap::ShouldAllowAllContent(
primary_url.SchemeIs(content::kChromeUIScheme);
}
-base::Value* HostContentSettingsMap::GetWebsiteSetting(
+scoped_ptr<base::Value> HostContentSettingsMap::GetWebsiteSetting(
const GURL& primary_url,
const GURL& secondary_url,
ContentSettingsType content_type,
@@ -712,44 +778,28 @@ base::Value* HostContentSettingsMap::GetWebsiteSetting(
info->primary_pattern = ContentSettingsPattern::Wildcard();
info->secondary_pattern = ContentSettingsPattern::Wildcard();
}
- return new base::FundamentalValue(CONTENT_SETTING_ALLOW);
- }
-
- ContentSettingsPattern* primary_pattern = NULL;
- ContentSettingsPattern* secondary_pattern = NULL;
- if (info) {
- primary_pattern = &info->primary_pattern;
- secondary_pattern = &info->secondary_pattern;
+ return scoped_ptr<base::Value>(
+ new base::FundamentalValue(CONTENT_SETTING_ALLOW));
}
- // The list of |content_settings_providers_| is ordered according to their
- // precedence.
- for (ConstProviderIterator provider = content_settings_providers_.begin();
- provider != content_settings_providers_.end();
- ++provider) {
- base::Value* value = content_settings::GetContentSettingValueAndPatterns(
- provider->second, primary_url, secondary_url, content_type,
- resource_identifier, is_off_the_record_,
- primary_pattern, secondary_pattern);
- if (value) {
- if (info)
- info->source = kProviderSourceMap[provider->first];
- return value;
+ // Check if the content setting is globally disabled.
+ if (!override_.IsEnabled(content_type)) {
+ if (info) {
+ info->source = content_settings::SETTING_SOURCE_USER;
+ info->primary_pattern = ContentSettingsPattern::Wildcard();
+ info->secondary_pattern = ContentSettingsPattern::Wildcard();
}
+ return scoped_ptr<base::Value>(
+ new base::FundamentalValue(CONTENT_SETTING_BLOCK));
}
- if (info) {
- info->source = content_settings::SETTING_SOURCE_NONE;
- info->primary_pattern = ContentSettingsPattern();
- info->secondary_pattern = ContentSettingsPattern();
- }
- return NULL;
+ return GetWebsiteSettingWithoutOverride(
+ primary_url, secondary_url, content_type, resource_identifier, info);
}
// static
HostContentSettingsMap::ProviderType
- HostContentSettingsMap::GetProviderTypeFromSource(
- const std::string& source) {
+HostContentSettingsMap::GetProviderTypeFromSource(const std::string& source) {
for (size_t i = 0; i < arraysize(kProviderNames); ++i) {
if (source == kProviderNames[i])
return static_cast<ProviderType>(i);

Powered by Google App Engine
This is Rietveld 408576698