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

Unified Diff: components/content_settings/core/browser/host_content_settings_map.cc

Issue 1825173003: [Policy Experimental] Add "recommended" policies for URL exceptions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Sync. Created 4 years, 9 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: 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 e023a79de22361915f1499f27f64f05dca79beb0..945014840cd8f8893c2dcaf0a6b0ec938cf503f6 100644
--- a/components/content_settings/core/browser/host_content_settings_map.cc
+++ b/components/content_settings/core/browser/host_content_settings_map.cc
@@ -53,6 +53,7 @@ const ProviderNamesSourceMapEntry kProviderNamesSourceMap[] = {
{"supervised_user", content_settings::SETTING_SOURCE_SUPERVISED},
{"extension", content_settings::SETTING_SOURCE_EXTENSION},
{"preference", content_settings::SETTING_SOURCE_USER},
+ {"recommended", content_settings::SETTING_SOURCE_RECOMMENDED_POLICY},
{"default", content_settings::SETTING_SOURCE_USER},
};
@@ -147,10 +148,24 @@ HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs,
prefs_(prefs),
is_off_the_record_(is_incognito_profile || is_guest_profile) {
DCHECK(!(is_incognito_profile && is_guest_profile));
- content_settings::ObservableProvider* policy_provider =
- new content_settings::PolicyProvider(prefs_);
- policy_provider->AddObserver(this);
- content_settings_providers_[POLICY_PROVIDER] = policy_provider;
+
+ // Mandatory policies.
+ content_settings::ObservableProvider* mandatory_policy_provider =
+ new content_settings::PolicyProvider(prefs_, false);
+ content_settings_providers_[POLICY_PROVIDER] = mandatory_policy_provider;
+
+ // Recommended policies.
+ content_settings::ObservableProvider* recommended_policy_provider =
+ new content_settings::PolicyProvider(prefs_, true);
+ content_settings_providers_[RECOMMENDED_POLICY_PROVIDER] =
+ recommended_policy_provider;
+
+ // FIXME(huangs): |policy_provider| and |recommended_policy_provider| both
+ // observe the same events, and sends trivial data to its observers. To
+ // prevent redundancy, we call AddObserver() for only one of them. Refactoring
+ // is needed for a cleaner solution.
+ mandatory_policy_provider->AddObserver(this);
+ recommended_policy_provider->AddObserver(this);
content_settings::PrefProvider* pref_provider =
new content_settings::PrefProvider(prefs_, is_off_the_record_);
@@ -221,6 +236,8 @@ ContentSetting HostContentSettingsMap::GetDefaultContentSetting(
ContentSettingsType content_type,
std::string* provider_id) const {
UsedContentSettingsProviders();
+ ContentSetting recommended_default_setting = CONTENT_SETTING_DEFAULT;
+ ContentSetting default_default_setting = CONTENT_SETTING_DEFAULT;
// Iterate through the list of providers and return the first non-NULL value
// that matches |primary_url| and |secondary_url|.
@@ -239,13 +256,57 @@ ContentSetting HostContentSettingsMap::GetDefaultContentSetting(
.get());
}
if (default_setting != CONTENT_SETTING_DEFAULT) {
- if (provider_id)
- *provider_id = kProviderNamesSourceMap[provider->first].provider_name;
- return default_setting;
+ if (provider->first == RECOMMENDED_POLICY_PROVIDER) {
+ recommended_default_setting = default_setting;
+ } else if (provider->first == DEFAULT_PROVIDER) {
+ default_default_setting = default_setting;
+ } else {
+ if (provider_id)
+ *provider_id = kProviderNamesSourceMap[provider->first].provider_name;
+ return default_setting;
+ }
}
}
- return CONTENT_SETTING_DEFAULT;
+ // Eearly exit if we found nothing.
+ if (recommended_default_setting == CONTENT_SETTING_DEFAULT &&
+ default_default_setting == CONTENT_SETTING_DEFAULT) {
+ return CONTENT_SETTING_DEFAULT;
+ }
+
+ // Recommended policy provider subsumes default provider.
+ if (default_default_setting == CONTENT_SETTING_DEFAULT ||
+ default_default_setting == recommended_default_setting) {
+ if (provider_id) {
+ *provider_id =
+ kProviderNamesSourceMap[RECOMMENDED_POLICY_PROVIDER].provider_name;
+ }
+ return recommended_default_setting;
+ }
+
+ // Default provider.
+ if (provider_id)
+ *provider_id = kProviderNamesSourceMap[DEFAULT_PROVIDER].provider_name;
+ return default_default_setting;
+}
+
+ContentSetting HostContentSettingsMap::GetRecommendedDefaultContentSetting(
+ ContentSettingsType content_type) const {
+ ConstProviderIterator provider = content_settings_providers_.find(
+ RECOMMENDED_POLICY_PROVIDER);
+ if (provider == content_settings_providers_.end())
+ return CONTENT_SETTING_DEFAULT;
+
+ ContentSetting default_setting =
+ GetDefaultContentSettingFromProvider(content_type, provider->second);
+ if (is_off_the_record_) {
+ default_setting = content_settings::ValueToContentSetting(
+ ProcessIncognitoInheritanceBehavior(
+ content_type,
+ content_settings::ContentSettingToValue(default_setting))
+ .get());
+ }
+ return default_setting;
}
ContentSetting HostContentSettingsMap::GetContentSetting(

Powered by Google App Engine
This is Rietveld 408576698