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]); |
-} |