| Index: components/content_settings/core/browser/content_settings_policy_provider.cc
|
| diff --git a/components/content_settings/core/browser/content_settings_policy_provider.cc b/components/content_settings/core/browser/content_settings_policy_provider.cc
|
| index d8d1b831e6139ad04347a859550e20777ed3d101..bdaa5b59d00c32837bd39312762bacf38fdf0e54 100644
|
| --- a/components/content_settings/core/browser/content_settings_policy_provider.cc
|
| +++ b/components/content_settings/core/browser/content_settings_policy_provider.cc
|
| @@ -60,6 +60,17 @@ const PrefsForManagedContentSettingsMapEntry
|
| {prefs::kManagedKeygenBlockedForUrls,
|
| CONTENT_SETTINGS_TYPE_KEYGEN, CONTENT_SETTING_BLOCK}};
|
|
|
| +struct PrefsForManagedExceptionsSettingsMapEntry {
|
| + const char* pref_name;
|
| + ContentSettingsType content_type;
|
| +};
|
| +
|
| +const PrefsForManagedExceptionsSettingsMapEntry
|
| + KPrefsForManagedExceptionsSettingsMap[] = {
|
| + {prefs::kUserCookiesExceptionsUsage, CONTENT_SETTINGS_TYPE_COOKIES},
|
| + {prefs::kUserPopupsExceptionsUsage, CONTENT_SETTINGS_TYPE_POPUPS}
|
| +};
|
| +
|
| } // namespace
|
|
|
| namespace content_settings {
|
| @@ -112,8 +123,9 @@ void PolicyProvider::RegisterProfilePrefs(
|
| registry->RegisterListPref(prefs::kManagedPopupsBlockedForUrls);
|
| registry->RegisterListPref(prefs::kManagedKeygenAllowedForUrls);
|
| registry->RegisterListPref(prefs::kManagedKeygenBlockedForUrls);
|
| - // Preferences for default content setting policies. If a policy is not set of
|
| - // the corresponding preferences below is set to CONTENT_SETTING_DEFAULT.
|
| +
|
| + // Preferences for default content setting policies. If a policy is not set
|
| + // then the corresponding preferences becomes CONTENT_SETTING_DEFAULT.
|
| registry->RegisterIntegerPref(prefs::kManagedDefaultCookiesSetting,
|
| CONTENT_SETTING_DEFAULT);
|
| registry->RegisterIntegerPref(prefs::kManagedDefaultGeolocationSetting,
|
| @@ -134,10 +146,18 @@ void PolicyProvider::RegisterProfilePrefs(
|
| CONTENT_SETTING_DEFAULT);
|
| registry->RegisterIntegerPref(prefs::kManagedDefaultWebBluetoothGuardSetting,
|
| CONTENT_SETTING_DEFAULT);
|
| +
|
| + // Preferences for content setting exception policies. If a policy is not set
|
| + // then the corresponding preferences becomes CONTENT_SETTING_DEFAULT.
|
| + registry->RegisterIntegerPref(prefs::kUserCookiesExceptionsUsage,
|
| + CONTENT_SETTING_DEFAULT);
|
| + registry->RegisterIntegerPref(prefs::kUserPopupsExceptionsUsage,
|
| + CONTENT_SETTING_DEFAULT);
|
| }
|
|
|
| PolicyProvider::PolicyProvider(PrefService* prefs) : prefs_(prefs) {
|
| ReadManagedDefaultSettings();
|
| + ReadUserExceptionsUsageSettings();
|
| ReadManagedContentSettings(false);
|
|
|
| pref_change_registrar_.Init(prefs_);
|
| @@ -163,6 +183,7 @@ PolicyProvider::PolicyProvider(PrefService* prefs) : prefs_(prefs) {
|
| pref_change_registrar_.Add(prefs::kManagedPopupsBlockedForUrls, callback);
|
| pref_change_registrar_.Add(prefs::kManagedKeygenAllowedForUrls, callback);
|
| pref_change_registrar_.Add(prefs::kManagedKeygenBlockedForUrls, callback);
|
| +
|
| // The following preferences are only used to indicate if a default content
|
| // setting is managed and to hold the managed default setting value. If the
|
| // value for any of the following preferences is set then the corresponding
|
| @@ -184,6 +205,11 @@ PolicyProvider::PolicyProvider(PrefService* prefs) : prefs_(prefs) {
|
| pref_change_registrar_.Add(prefs::kManagedDefaultKeygenSetting, callback);
|
| pref_change_registrar_.Add(prefs::kManagedDefaultWebBluetoothGuardSetting,
|
| callback);
|
| +
|
| + // User exceptions usage policies, which dictates whether user can set
|
| + // exceptions that overrides policy defaults content settings.
|
| + pref_change_registrar_.Add(prefs::kUserCookiesExceptionsUsage, callback);
|
| + pref_change_registrar_.Add(prefs::kUserPopupsExceptionsUsage, callback);
|
| }
|
|
|
| PolicyProvider::~PolicyProvider() {
|
| @@ -336,6 +362,26 @@ void PolicyProvider::ReadManagedDefaultSettings() {
|
| UpdateManagedDefaultSetting(entry);
|
| }
|
|
|
| +void PolicyProvider::ReadUserExceptionsUsageSettings() {
|
| + user_exceptions_usage_settings_map_.clear();
|
| +
|
| + for (const PrefsForManagedExceptionsSettingsMapEntry& entry :
|
| + KPrefsForManagedExceptionsSettingsMap) {
|
| + // If pref is set then it must be managed, but exclude non-managed anyway.
|
| + if (!prefs_->IsManagedPreference(entry.pref_name))
|
| + continue;
|
| +
|
| + ContentSetting content_settings =
|
| + IntToContentSetting(prefs_->GetInteger(entry.pref_name));
|
| +
|
| + if (content_settings != CONTENT_SETTING_DEFAULT) {
|
| + DCHECK(content_settings == CONTENT_SETTING_ALLOW);
|
| + user_exceptions_usage_settings_map_[entry.content_type] =
|
| + USER_EXCEPTIONS_ALLOW;
|
| + }
|
| + }
|
| +}
|
| +
|
| void PolicyProvider::UpdateManagedDefaultSetting(
|
| const PrefsForManagedDefaultMapEntry& entry) {
|
| // If a pref to manage a default-content-setting was not set (NOTICE:
|
| @@ -360,7 +406,6 @@ void PolicyProvider::UpdateManagedDefaultSetting(
|
| }
|
| }
|
|
|
| -
|
| void PolicyProvider::ReadManagedContentSettings(bool overwrite) {
|
| base::AutoLock auto_lock(lock_);
|
| if (overwrite)
|
| @@ -393,6 +438,24 @@ void PolicyProvider::ShutdownOnUIThread() {
|
| prefs_ = nullptr;
|
| }
|
|
|
| +ContentSettingsUserExceptionsUsage
|
| +PolicyProvider::GetUserExceptionsUsageSettingForType(
|
| + ContentSettingsType content_type) const {
|
| + auto it = user_exceptions_usage_settings_map_.find(content_type);
|
| + if (it == user_exceptions_usage_settings_map_.end())
|
| + return USER_EXCEPTIONS_DEFAULT;
|
| +
|
| + switch (it->second) {
|
| + case USER_EXCEPTIONS_ALLOW:
|
| + return USER_EXCEPTIONS_ALLOW;
|
| +
|
| + case USER_EXCEPTIONS_DEFAULT: // Error, since we don't store this.
|
| + default:
|
| + NOTREACHED();
|
| + }
|
| + return USER_EXCEPTIONS_DEFAULT;
|
| +}
|
| +
|
| void PolicyProvider::OnPreferenceChanged(const std::string& name) {
|
| DCHECK(CalledOnValidThread());
|
|
|
| @@ -419,6 +482,10 @@ void PolicyProvider::OnPreferenceChanged(const std::string& name) {
|
| name == prefs::kManagedKeygenBlockedForUrls) {
|
| ReadManagedContentSettings(true);
|
| ReadManagedDefaultSettings();
|
| +
|
| + } else if (name == prefs::kUserCookiesExceptionsUsage ||
|
| + name == prefs::kUserPopupsExceptionsUsage) {
|
| + ReadUserExceptionsUsageSettings();
|
| }
|
|
|
| NotifyObservers(ContentSettingsPattern(),
|
|
|