Chromium Code Reviews| 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 40b6fe1be7a169aa97e859c6fa75061111824b90..9ed045364ab5fce5e241ab5284a6e0b085e09b1d 100644 |
| --- a/chrome/browser/content_settings/host_content_settings_map.cc |
| +++ b/chrome/browser/content_settings/host_content_settings_map.cc |
| @@ -13,67 +13,33 @@ |
| #include "base/strings/string_util.h" |
| #include "base/strings/utf_string_conversions.h" |
| #include "base/time/clock.h" |
| -#include "chrome/browser/chrome_notification_types.h" |
| -#include "chrome/browser/content_settings/content_settings_custom_extension_provider.h" |
| #include "chrome/browser/content_settings/content_settings_default_provider.h" |
| #include "chrome/browser/content_settings/content_settings_details.h" |
| -#include "chrome/browser/content_settings/content_settings_internal_extension_provider.h" |
| #include "chrome/browser/content_settings/content_settings_observable_provider.h" |
| #include "chrome/browser/content_settings/content_settings_policy_provider.h" |
| #include "chrome/browser/content_settings/content_settings_pref_provider.h" |
| #include "chrome/browser/content_settings/content_settings_provider.h" |
| #include "chrome/browser/content_settings/content_settings_rule.h" |
| #include "chrome/browser/content_settings/content_settings_utils.h" |
| -#include "chrome/browser/extensions/api/content_settings/content_settings_service.h" |
| #include "chrome/common/chrome_switches.h" |
| #include "chrome/common/pref_names.h" |
| #include "chrome/common/url_constants.h" |
| #include "components/content_settings/core/common/content_settings_pattern.h" |
| #include "components/pref_registry/pref_registry_syncable.h" |
| #include "content/public/browser/browser_thread.h" |
| -#include "content/public/browser/notification_service.h" |
| -#include "content/public/browser/notification_source.h" |
| -#include "content/public/browser/user_metrics.h" |
| #include "content/public/common/content_switches.h" |
| #include "net/base/net_errors.h" |
| #include "net/base/static_cookie_policy.h" |
| #include "url/gurl.h" |
| #if defined(ENABLE_EXTENSIONS) |
| -#include "chrome/browser/extensions/extension_service.h" |
| -#include "extensions/browser/extension_prefs.h" |
| #include "extensions/common/constants.h" |
| #endif |
| -using base::UserMetricsAction; |
| using content::BrowserThread; |
| namespace { |
| -typedef std::vector<content_settings::Rule> Rules; |
| - |
| -typedef std::pair<std::string, std::string> StringPair; |
| - |
| -// TODO(bauerb): Expose constants. |
| -const char* kProviderNames[] = { |
| - "platform_app", |
| - "policy", |
| - "extension", |
| - "preference", |
| - "default" |
| -}; |
| - |
| -content_settings::SettingSource kProviderSourceMap[] = { |
| - content_settings::SETTING_SOURCE_EXTENSION, |
| - content_settings::SETTING_SOURCE_POLICY, |
| - content_settings::SETTING_SOURCE_EXTENSION, |
| - content_settings::SETTING_SOURCE_USER, |
| - content_settings::SETTING_SOURCE_USER, |
| -}; |
| -COMPILE_ASSERT(arraysize(kProviderSourceMap) == |
| - HostContentSettingsMap::NUM_PROVIDER_TYPES, |
| - kProviderSourceMap_has_incorrect_size); |
| - |
| // Returns true if the |content_type| supports a resource identifier. |
| // Resource identifiers are supported (but not required) for plug-ins. |
| bool SupportsResourceIdentifier(ContentSettingsType content_type) { |
| @@ -93,17 +59,17 @@ HostContentSettingsMap::HostContentSettingsMap( |
| content_settings::ObservableProvider* policy_provider = |
| new content_settings::PolicyProvider(prefs_); |
| policy_provider->AddObserver(this); |
| - content_settings_providers_[POLICY_PROVIDER] = policy_provider; |
| + content_settings_providers_.push_back(policy_provider); |
| - content_settings::ObservableProvider* pref_provider = |
| + pref_provider_ = |
| new content_settings::PrefProvider(prefs_, is_off_the_record_); |
| - pref_provider->AddObserver(this); |
| - content_settings_providers_[PREF_PROVIDER] = pref_provider; |
| + pref_provider_->AddObserver(this); |
| + content_settings_providers_.push_back(pref_provider_); |
| - content_settings::ObservableProvider* default_provider = |
| + default_provider_ = |
| new content_settings::DefaultProvider(prefs_, is_off_the_record_); |
| - default_provider->AddObserver(this); |
| - content_settings_providers_[DEFAULT_PROVIDER] = default_provider; |
| + default_provider_->AddObserver(this); |
| + content_settings_providers_.push_back(default_provider_); |
| if (!is_off_the_record_) { |
| // Migrate obsolete preferences. |
| @@ -111,40 +77,6 @@ HostContentSettingsMap::HostContentSettingsMap( |
| } |
| } |
| -#if defined(ENABLE_EXTENSIONS) |
| -void HostContentSettingsMap::RegisterExtensionService( |
| - ExtensionService* extension_service) { |
| - DCHECK(extension_service); |
| - DCHECK(!content_settings_providers_[INTERNAL_EXTENSION_PROVIDER]); |
| - DCHECK(!content_settings_providers_[CUSTOM_EXTENSION_PROVIDER]); |
| - |
| - content_settings::InternalExtensionProvider* internal_extension_provider = |
| - new content_settings::InternalExtensionProvider(extension_service); |
| - internal_extension_provider->AddObserver(this); |
| - content_settings_providers_[INTERNAL_EXTENSION_PROVIDER] = |
| - internal_extension_provider; |
| - |
| - content_settings::ObservableProvider* custom_extension_provider = |
| - new content_settings::CustomExtensionProvider( |
| - extensions::ContentSettingsService::Get( |
| - extension_service->GetBrowserContext())->content_settings_store(), |
| - is_off_the_record_); |
| - custom_extension_provider->AddObserver(this); |
| - content_settings_providers_[CUSTOM_EXTENSION_PROVIDER] = |
| - custom_extension_provider; |
| - |
| -#ifndef NDEBUG |
| - DCHECK(used_from_thread_id_ != base::kInvalidThreadId) |
| - << "Used from multiple threads before initialization complete."; |
| -#endif |
| - |
| - OnContentSettingChanged(ContentSettingsPattern(), |
| - ContentSettingsPattern(), |
| - CONTENT_SETTINGS_TYPE_DEFAULT, |
| - std::string()); |
| -} |
| -#endif |
| - |
| // static |
| void HostContentSettingsMap::RegisterProfilePrefs( |
| user_prefs::PrefRegistrySyncable* registry) { |
| @@ -163,6 +95,32 @@ void HostContentSettingsMap::RegisterProfilePrefs( |
| content_settings::PolicyProvider::RegisterProfilePrefs(registry); |
| } |
| +void HostContentSettingsMap::RegisterProvider( |
| + scoped_ptr<content_settings::ObservableProvider> provider) { |
| + provider->AddObserver(this); |
| + content_settings_providers_.push_back(provider.release()); |
| + |
| +#ifndef NDEBUG |
| + DCHECK_NE(used_from_thread_id_, base::kInvalidThreadId) |
| + << "Used from multiple threads before initialization complete."; |
| +#endif |
| + |
| + OnContentSettingChanged(ContentSettingsPattern(), |
| + ContentSettingsPattern(), |
| + CONTENT_SETTINGS_TYPE_DEFAULT, |
| + std::string()); |
| +} |
| + |
| +size_t HostContentSettingsMap::GetNumProviders() const { |
| + return content_settings_providers_.size(); |
| +} |
| + |
| +const content_settings::ProviderInterface* |
| +HostContentSettingsMap::GetProviderAt( |
|
Bernhard Bauer
2014/09/12 09:07:25
The parameter should fit on this line, no?
|
| + size_t i) const { |
| + return content_settings_providers_[i]; |
| +} |
| + |
| ContentSetting HostContentSettingsMap::GetDefaultContentSettingFromProvider( |
| ContentSettingsType content_type, |
| content_settings::ProviderInterface* provider) const { |
| @@ -190,13 +148,13 @@ ContentSetting HostContentSettingsMap::GetDefaultContentSetting( |
| for (ConstProviderIterator provider = content_settings_providers_.begin(); |
| provider != content_settings_providers_.end(); |
| ++provider) { |
| - if (provider->first == PREF_PROVIDER) |
| + if (*provider == pref_provider_) |
| continue; |
| ContentSetting default_setting = |
| - GetDefaultContentSettingFromProvider(content_type, provider->second); |
| + GetDefaultContentSettingFromProvider(content_type, *provider); |
| if (default_setting != CONTENT_SETTING_DEFAULT) { |
| if (provider_id) |
| - *provider_id = kProviderNames[provider->first]; |
| + *provider_id = (*provider)->GetProviderName(); |
| return default_setting; |
| } |
| } |
| @@ -235,15 +193,13 @@ void HostContentSettingsMap::GetSettingsForOneType( |
| // For each provider, iterate first the incognito-specific rules, then the |
| // normal rules. |
| if (is_off_the_record_) { |
| - AddSettingsForOneType(provider->second, |
| - provider->first, |
| + AddSettingsForOneType(*provider, |
| content_type, |
| resource_identifier, |
| settings, |
| true); |
| } |
| - AddSettingsForOneType(provider->second, |
| - provider->first, |
| + AddSettingsForOneType(*provider, |
| content_type, |
| resource_identifier, |
| settings, |
| @@ -281,11 +237,11 @@ void HostContentSettingsMap::SetWebsiteSetting( |
| for (ProviderIterator provider = content_settings_providers_.begin(); |
| provider != content_settings_providers_.end(); |
| ++provider) { |
| - if (provider->second->SetWebsiteSetting(primary_pattern, |
| - secondary_pattern, |
| - content_type, |
| - resource_identifier, |
| - value)) { |
| + if ((*provider)->SetWebsiteSetting(primary_pattern, |
| + secondary_pattern, |
| + content_type, |
| + resource_identifier, |
| + value)) { |
| return; |
| } |
| } |
| @@ -377,7 +333,7 @@ void HostContentSettingsMap::UpdateLastUsageByPattern( |
| ContentSettingsType content_type) { |
| UsedContentSettingsProviders(); |
| - GetPrefProvider()->UpdateLastUsage( |
| + pref_provider_->UpdateLastUsage( |
| primary_pattern, secondary_pattern, content_type); |
| FOR_EACH_OBSERVER( |
| @@ -402,7 +358,7 @@ base::Time HostContentSettingsMap::GetLastUsageByPattern( |
| ContentSettingsType content_type) { |
| UsedContentSettingsProviders(); |
| - return GetPrefProvider()->GetLastUsage( |
| + return pref_provider_->GetLastUsage( |
| primary_pattern, secondary_pattern, content_type); |
| } |
| @@ -419,7 +375,7 @@ void HostContentSettingsMap::SetPrefClockForTesting( |
| scoped_ptr<base::Clock> clock) { |
| UsedContentSettingsProviders(); |
| - GetPrefProvider()->SetClockForTesting(clock.Pass()); |
| + pref_provider_->SetClockForTesting(clock.Pass()); |
| } |
| void HostContentSettingsMap::AddExceptionForURL( |
| @@ -453,7 +409,7 @@ void HostContentSettingsMap::ClearSettingsForOneType( |
| for (ProviderIterator provider = content_settings_providers_.begin(); |
| provider != content_settings_providers_.end(); |
| ++provider) { |
| - provider->second->ClearAllContentSettingsRules(content_type); |
| + (*provider)->ClearAllContentSettingsRules(content_type); |
| } |
| } |
| @@ -548,7 +504,6 @@ void HostContentSettingsMap::OnContentSettingChanged( |
| HostContentSettingsMap::~HostContentSettingsMap() { |
| DCHECK(!prefs_); |
| - STLDeleteValues(&content_settings_providers_); |
| } |
| void HostContentSettingsMap::ShutdownOnUIThread() { |
| @@ -558,7 +513,7 @@ void HostContentSettingsMap::ShutdownOnUIThread() { |
| for (ProviderIterator it = content_settings_providers_.begin(); |
| it != content_settings_providers_.end(); |
| ++it) { |
| - it->second->ShutdownOnUIThread(); |
| + (*it)->ShutdownOnUIThread(); |
| } |
| } |
| @@ -583,7 +538,7 @@ void HostContentSettingsMap::MigrateObsoleteClearOnExitPref() { |
| // BLOCK BLOCK |
| ContentSetting default_setting = GetDefaultContentSettingFromProvider( |
| CONTENT_SETTINGS_TYPE_COOKIES, |
| - content_settings_providers_[DEFAULT_PROVIDER]); |
| + default_provider_); |
| if (default_setting == CONTENT_SETTING_ALLOW) { |
| SetDefaultContentSetting( |
| CONTENT_SETTINGS_TYPE_COOKIES, CONTENT_SETTING_SESSION_ONLY); |
| @@ -591,8 +546,7 @@ void HostContentSettingsMap::MigrateObsoleteClearOnExitPref() { |
| // Change the exceptions using the same rules. |
| ContentSettingsForOneType exceptions; |
| - AddSettingsForOneType(content_settings_providers_[PREF_PROVIDER], |
| - PREF_PROVIDER, |
| + AddSettingsForOneType(pref_provider_, |
| CONTENT_SETTINGS_TYPE_COOKIES, |
| std::string(), |
| &exceptions, |
| @@ -613,7 +567,6 @@ void HostContentSettingsMap::MigrateObsoleteClearOnExitPref() { |
| void HostContentSettingsMap::AddSettingsForOneType( |
| const content_settings::ProviderInterface* provider, |
| - ProviderType provider_type, |
| ContentSettingsType content_type, |
| const std::string& resource_identifier, |
| ContentSettingsForOneType* settings, |
| @@ -639,7 +592,7 @@ void HostContentSettingsMap::AddSettingsForOneType( |
| settings->push_back(ContentSettingPatternSource( |
| rule.primary_pattern, rule.secondary_pattern, |
| setting_value, |
| - kProviderNames[provider_type], |
| + provider->GetProviderName(), |
| incognito)); |
| } |
| } |
| @@ -724,12 +677,12 @@ base::Value* HostContentSettingsMap::GetWebsiteSetting( |
| provider != content_settings_providers_.end(); |
| ++provider) { |
| base::Value* value = content_settings::GetContentSettingValueAndPatterns( |
| - provider->second, primary_url, secondary_url, content_type, |
| + *provider, 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]; |
| + info->source = (*provider)->GetSettingSource(); |
| return value; |
| } |
| } |
| @@ -741,21 +694,3 @@ base::Value* HostContentSettingsMap::GetWebsiteSetting( |
| } |
| return NULL; |
| } |
| - |
| -// static |
| -HostContentSettingsMap::ProviderType |
| - HostContentSettingsMap::GetProviderTypeFromSource( |
| - const std::string& source) { |
| - for (size_t i = 0; i < arraysize(kProviderNames); ++i) { |
| - if (source == kProviderNames[i]) |
| - return static_cast<ProviderType>(i); |
| - } |
| - |
| - NOTREACHED(); |
| - return DEFAULT_PROVIDER; |
| -} |
| - |
| -content_settings::PrefProvider* HostContentSettingsMap::GetPrefProvider() { |
| - return static_cast<content_settings::PrefProvider*>( |
| - content_settings_providers_[PREF_PROVIDER]); |
| -} |