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

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: 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..53ab01626e5cb0c4228cfac145ca5a40cb4ce930 100644
--- a/chrome/browser/content_settings/host_content_settings_map.cc
+++ b/chrome/browser/content_settings/host_content_settings_map.cc
@@ -83,13 +83,14 @@ bool SupportsResourceIdentifier(ContentSettingsType content_type) {
} // namespace
HostContentSettingsMap::HostContentSettingsMap(
- PrefService* prefs,
- bool incognito) :
+ 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(
@@ -410,6 +412,64 @@ 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());
+}
+
+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) {
+ 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;
+ }
+ }
+
+ if (info) {
+ info->source = content_settings::SETTING_SOURCE_NONE;
+ info->primary_pattern = ContentSettingsPattern();
+ info->secondary_pattern = ContentSettingsPattern();
+ }
+ return NULL;
+}
+
+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);
}
@@ -715,41 +775,23 @@ base::Value* HostContentSettingsMap::GetWebsiteSetting(
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;
- }
-
- // 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 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