Chromium Code Reviews| 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 5307adea4accab3db64c9445ad8e715bf5ec0bed..75cb827337388e1acec917a1b0542f8a4e4c111f 100644 |
| --- a/components/content_settings/core/browser/host_content_settings_map.cc |
| +++ b/components/content_settings/core/browser/host_content_settings_map.cc |
| @@ -147,20 +147,21 @@ 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; |
| - |
| - content_settings::PrefProvider* pref_provider = |
| - new content_settings::PrefProvider(prefs_, is_off_the_record_); |
| - pref_provider->AddObserver(this); |
| - content_settings_providers_[PREF_PROVIDER] = pref_provider; |
| + content_settings_providers_[POLICY_PROVIDER] = |
| + policy_provider_ = |
| + new content_settings::PolicyProvider(prefs_); |
| + policy_provider_->AddObserver(this); |
| + |
| + content_settings_providers_[PREF_PROVIDER] = |
| + pref_provider_ = |
| + new content_settings::PrefProvider(prefs_, is_off_the_record_); |
| + pref_provider_->AddObserver(this); |
| + |
| // This ensures that content settings are cleared for the guest profile. This |
| // wouldn't be needed except that we used to allow settings to be stored for |
| // the guest profile and so we need to ensure those get cleared. |
| if (is_guest_profile) |
| - pref_provider->ClearPrefs(); |
| + pref_provider_->ClearPrefs(); |
| content_settings::ObservableProvider* default_provider = |
| new content_settings::DefaultProvider(prefs_, is_off_the_record_); |
| @@ -219,9 +220,10 @@ ContentSetting HostContentSettingsMap::GetDefaultContentSettingFromProvider( |
| return CONTENT_SETTING_DEFAULT; |
| } |
| -ContentSetting HostContentSettingsMap::GetDefaultContentSetting( |
| - ContentSettingsType content_type, |
| - std::string* provider_id) const { |
| +HostContentSettingsMap::ContentSettingWithProviderType |
| +HostContentSettingsMap::GetDefaultContentSetting( |
| + ContentSettingsType content_type) const { |
| + ContentSettingWithProviderType ret; // Initialized. |
| UsedContentSettingsProviders(); |
| // Iterate through the list of providers and return the first non-NULL value |
| @@ -241,13 +243,34 @@ ContentSetting HostContentSettingsMap::GetDefaultContentSetting( |
| .get()); |
| } |
| if (default_setting != CONTENT_SETTING_DEFAULT) { |
| - if (provider_id) |
| - *provider_id = kProviderNamesSourceMap[provider->first].provider_name; |
| - return default_setting; |
| + ret.content_setting = default_setting; |
| + ret.provider_type = provider->first; |
| + break; |
| } |
| } |
| - return CONTENT_SETTING_DEFAULT; |
| + return ret; |
| +} |
| + |
| +// FIXME(huangs): Remove this and fix callers. |
| +ContentSetting HostContentSettingsMap::GetDefaultContentSetting( |
| + ContentSettingsType content_type, |
| + std::string* provider_name) const { |
| + ContentSettingWithProviderType result = |
| + GetDefaultContentSetting(content_type); |
| + if (result.provider_type != NUM_PROVIDER_TYPES && provider_name) { |
| + *provider_name = kProviderNamesSourceMap[ |
| + result.provider_type].provider_name; |
| + } |
| + return result.content_setting; |
| +} |
| + |
| +bool HostContentSettingsMap::AreUserExceptionsAllowedForType( |
|
raymes
2016/04/12 04:52:47
I'm guessing this function is going to become more
huangs
2016/04/12 14:19:13
Yes. The advantage of adding this function now is
|
| + ContentSettingsType content_type) const { |
| + // Disable if default setting came from policy provider. |
| + ProviderType default_settings_provider = |
| + GetDefaultContentSetting(content_type).provider_type; |
| + return default_settings_provider != POLICY_PROVIDER; |
| } |
| ContentSetting HostContentSettingsMap::GetContentSetting( |
| @@ -520,7 +543,7 @@ void HostContentSettingsMap::UpdateLastUsageByPattern( |
| ContentSettingsType content_type) { |
| UsedContentSettingsProviders(); |
| - GetPrefProvider()->UpdateLastUsage( |
| + pref_provider_->UpdateLastUsage( |
| primary_pattern, secondary_pattern, content_type); |
| } |
| @@ -540,7 +563,7 @@ base::Time HostContentSettingsMap::GetLastUsageByPattern( |
| ContentSettingsType content_type) { |
| UsedContentSettingsProviders(); |
| - return GetPrefProvider()->GetLastUsage( |
| + return pref_provider_->GetLastUsage( |
| primary_pattern, secondary_pattern, content_type); |
| } |
| @@ -561,7 +584,7 @@ void HostContentSettingsMap::SetPrefClockForTesting( |
| scoped_ptr<base::Clock> clock) { |
| UsedContentSettingsProviders(); |
| - GetPrefProvider()->SetClockForTesting(std::move(clock)); |
| + pref_provider_->SetClockForTesting(std::move(clock)); |
| } |
| void HostContentSettingsMap::ClearSettingsForOneType( |
| @@ -727,8 +750,7 @@ HostContentSettingsMap::GetProviderTypeFromSource(const std::string& source) { |
| } |
| content_settings::PrefProvider* HostContentSettingsMap::GetPrefProvider() { |
| - return static_cast<content_settings::PrefProvider*>( |
| - content_settings_providers_[PREF_PROVIDER]); |
| + return pref_provider_; |
| } |
| scoped_ptr<base::Value> HostContentSettingsMap::GetWebsiteSettingInternal( |