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

Unified Diff: chrome/browser/content_settings/host_content_settings_map.cc

Issue 670953006: Componentize HostContentSettingsMap and content settings providers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: win64 suppress warnings Created 6 years, 2 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: 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
deleted file mode 100644
index 31ac0a50a9e0699ad0418d141a14f1f110f31530..0000000000000000000000000000000000000000
--- a/chrome/browser/content_settings/host_content_settings_map.cc
+++ /dev/null
@@ -1,747 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/content_settings/host_content_settings_map.h"
-
-#include <utility>
-
-#include "base/basictypes.h"
-#include "base/command_line.h"
-#include "base/prefs/pref_service.h"
-#include "base/stl_util.h"
-#include "base/strings/string_util.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/time/clock.h"
-#include "chrome/browser/content_settings/content_settings_default_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_utils.h"
-#include "chrome/common/pref_names.h"
-#include "chrome/common/url_constants.h"
-#include "components/content_settings/core/browser/content_settings_details.h"
-#include "components/content_settings/core/browser/content_settings_observable_provider.h"
-#include "components/content_settings/core/browser/content_settings_provider.h"
-#include "components/content_settings/core/browser/content_settings_rule.h"
-#include "components/content_settings/core/common/content_settings_pattern.h"
-#include "components/pref_registry/pref_registry_syncable.h"
-#include "net/base/net_errors.h"
-#include "net/base/static_cookie_policy.h"
-#include "url/gurl.h"
-
-#if defined(ENABLE_EXTENSIONS)
-#include "extensions/common/constants.h"
-#endif
-
-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",
- "override",
- "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,
- 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) {
- return content_type == CONTENT_SETTINGS_TYPE_PLUGINS;
-}
-
-} // namespace
-
-HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs,
- bool incognito)
- :
-#ifndef NDEBUG
- used_from_thread_id_(base::PlatformThread::CurrentId()),
-#endif
- prefs_(prefs),
- is_off_the_record_(incognito) {
- content_settings::ObservableProvider* policy_provider =
- new content_settings::PolicyProvider(prefs_);
- policy_provider->AddObserver(this);
- content_settings_providers_[POLICY_PROVIDER] = policy_provider;
-
- content_settings::ObservableProvider* pref_provider =
- new content_settings::PrefProvider(prefs_, is_off_the_record_);
- pref_provider->AddObserver(this);
- content_settings_providers_[PREF_PROVIDER] = pref_provider;
-
- content_settings::ObservableProvider* default_provider =
- new content_settings::DefaultProvider(prefs_, is_off_the_record_);
- default_provider->AddObserver(this);
- content_settings_providers_[DEFAULT_PROVIDER] = default_provider;
-
- content_settings_providers_[OVERRIDE_PROVIDER] =
- new content_settings::OverrideProvider(prefs_, is_off_the_record_);
-}
-
-// static
-void HostContentSettingsMap::RegisterProfilePrefs(
- user_prefs::PrefRegistrySyncable* registry) {
- registry->RegisterIntegerPref(
- prefs::kContentSettingsWindowLastTabIndex,
- 0,
- user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
-
- // Register the prefs for the content settings providers.
- content_settings::DefaultProvider::RegisterProfilePrefs(registry);
- content_settings::PrefProvider::RegisterProfilePrefs(registry);
- content_settings::PolicyProvider::RegisterProfilePrefs(registry);
- content_settings::OverrideProvider::RegisterProfilePrefs(registry);
-}
-
-void HostContentSettingsMap::RegisterProvider(
- ProviderType type,
- scoped_ptr<content_settings::ObservableProvider> provider) {
- DCHECK(!content_settings_providers_[type]);
- provider->AddObserver(this);
- content_settings_providers_[type] = 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());
-}
-
-ContentSetting HostContentSettingsMap::GetDefaultContentSettingFromProvider(
- ContentSettingsType content_type,
- content_settings::ProviderInterface* provider) const {
- scoped_ptr<content_settings::RuleIterator> rule_iterator(
- provider->GetRuleIterator(content_type, std::string(), false));
-
- ContentSettingsPattern wildcard = ContentSettingsPattern::Wildcard();
- while (rule_iterator->HasNext()) {
- content_settings::Rule rule = rule_iterator->Next();
- if (rule.primary_pattern == wildcard &&
- rule.secondary_pattern == wildcard) {
- return content_settings::ValueToContentSetting(rule.value.get());
- }
- }
- return CONTENT_SETTING_DEFAULT;
-}
-
-ContentSetting HostContentSettingsMap::GetDefaultContentSetting(
- ContentSettingsType content_type,
- std::string* provider_id) const {
- UsedContentSettingsProviders();
-
- // Iterate through the list of providers and return the first non-NULL value
- // that matches |primary_url| and |secondary_url|.
- for (ConstProviderIterator provider = content_settings_providers_.begin();
- provider != content_settings_providers_.end();
- ++provider) {
- if (provider->first == PREF_PROVIDER ||
- provider->first == OVERRIDE_PROVIDER)
- continue;
- ContentSetting default_setting =
- GetDefaultContentSettingFromProvider(content_type, provider->second);
- if (default_setting != CONTENT_SETTING_DEFAULT) {
- if (provider_id)
- *provider_id = kProviderNames[provider->first];
- return default_setting;
- }
- }
-
- return CONTENT_SETTING_DEFAULT;
-}
-
-ContentSetting HostContentSettingsMap::GetContentSetting(
- const GURL& primary_url,
- const GURL& secondary_url,
- ContentSettingsType content_type,
- const std::string& resource_identifier) const {
- DCHECK(!ContentTypeHasCompoundValue(content_type));
- scoped_ptr<base::Value> value = GetWebsiteSetting(
- primary_url, secondary_url, content_type, resource_identifier, NULL);
- return content_settings::ValueToContentSetting(value.get());
-}
-
-void HostContentSettingsMap::GetSettingsForOneType(
- ContentSettingsType content_type,
- const std::string& resource_identifier,
- ContentSettingsForOneType* settings) const {
- DCHECK(SupportsResourceIdentifier(content_type) ||
- resource_identifier.empty());
- DCHECK(settings);
- UsedContentSettingsProviders();
-
- settings->clear();
- for (ConstProviderIterator provider = content_settings_providers_.begin();
- provider != content_settings_providers_.end();
- ++provider) {
- if (provider->first == OVERRIDE_PROVIDER)
- continue;
- // For each provider, iterate first the incognito-specific rules, then the
- // normal rules.
- if (is_off_the_record_) {
- AddSettingsForOneType(provider->second,
- provider->first,
- content_type,
- resource_identifier,
- settings,
- true);
- }
- AddSettingsForOneType(provider->second,
- provider->first,
- content_type,
- resource_identifier,
- settings,
- false);
- }
-}
-
-void HostContentSettingsMap::SetDefaultContentSetting(
- ContentSettingsType content_type,
- ContentSetting setting) {
- DCHECK(IsSettingAllowedForType(prefs_, setting, content_type));
-
- base::Value* value = NULL;
- if (setting != CONTENT_SETTING_DEFAULT)
- value = new base::FundamentalValue(setting);
- SetWebsiteSetting(
- ContentSettingsPattern::Wildcard(),
- ContentSettingsPattern::Wildcard(),
- content_type,
- std::string(),
- value);
-}
-
-void HostContentSettingsMap::SetWebsiteSetting(
- const ContentSettingsPattern& primary_pattern,
- const ContentSettingsPattern& secondary_pattern,
- ContentSettingsType content_type,
- const std::string& resource_identifier,
- base::Value* value) {
- DCHECK(IsValueAllowedForType(prefs_, value, content_type));
- DCHECK(SupportsResourceIdentifier(content_type) ||
- resource_identifier.empty());
- UsedContentSettingsProviders();
-
- 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)) {
- return;
- }
- }
- NOTREACHED();
-}
-
-void HostContentSettingsMap::SetNarrowestWebsiteSetting(
- const ContentSettingsPattern& primary_pattern,
- const ContentSettingsPattern& secondary_pattern,
- ContentSettingsType content_type,
- const std::string& resource_identifier,
- ContentSetting setting,
- content_settings::SettingInfo existing_info) {
- ContentSettingsPattern narrow_primary = primary_pattern;
- ContentSettingsPattern narrow_secondary = secondary_pattern;
-
- DCHECK_EQ(content_settings::SETTING_SOURCE_USER, existing_info.source);
- ContentSettingsPattern::Relation r1 =
- existing_info.primary_pattern.Compare(primary_pattern);
- if (r1 == ContentSettingsPattern::PREDECESSOR) {
- narrow_primary = existing_info.primary_pattern;
- } else if (r1 == ContentSettingsPattern::IDENTITY) {
- ContentSettingsPattern::Relation r2 =
- existing_info.secondary_pattern.Compare(secondary_pattern);
- DCHECK(r2 != ContentSettingsPattern::DISJOINT_ORDER_POST &&
- r2 != ContentSettingsPattern::DISJOINT_ORDER_PRE);
- if (r2 == ContentSettingsPattern::PREDECESSOR)
- narrow_secondary = existing_info.secondary_pattern;
- }
-
- SetContentSetting(
- narrow_primary, narrow_secondary, content_type, std::string(), setting);
-}
-
-void HostContentSettingsMap::SetContentSetting(
- const ContentSettingsPattern& primary_pattern,
- const ContentSettingsPattern& secondary_pattern,
- ContentSettingsType content_type,
- const std::string& resource_identifier,
- ContentSetting setting) {
- DCHECK(!ContentTypeHasCompoundValue(content_type));
-
- if (setting == CONTENT_SETTING_ALLOW &&
- (content_type == CONTENT_SETTINGS_TYPE_GEOLOCATION ||
- content_type == CONTENT_SETTINGS_TYPE_NOTIFICATIONS)) {
- UpdateLastUsageByPattern(primary_pattern, secondary_pattern, content_type);
- }
-
- base::Value* value = NULL;
- if (setting != CONTENT_SETTING_DEFAULT)
- value = new base::FundamentalValue(setting);
- SetWebsiteSetting(primary_pattern,
- secondary_pattern,
- content_type,
- resource_identifier,
- value);
-}
-
-ContentSetting HostContentSettingsMap::GetContentSettingAndMaybeUpdateLastUsage(
- const GURL& primary_url,
- const GURL& secondary_url,
- ContentSettingsType content_type,
- const std::string& resource_identifier) {
- DCHECK(thread_checker_.CalledOnValidThread());
-
- ContentSetting setting = GetContentSetting(
- primary_url, secondary_url, content_type, resource_identifier);
- if (setting == CONTENT_SETTING_ALLOW) {
- UpdateLastUsageByPattern(
- ContentSettingsPattern::FromURLNoWildcard(primary_url),
- ContentSettingsPattern::FromURLNoWildcard(secondary_url),
- content_type);
- }
- return setting;
-}
-
-void HostContentSettingsMap::UpdateLastUsage(const GURL& primary_url,
- const GURL& secondary_url,
- ContentSettingsType content_type) {
- UpdateLastUsageByPattern(
- ContentSettingsPattern::FromURLNoWildcard(primary_url),
- ContentSettingsPattern::FromURLNoWildcard(secondary_url),
- content_type);
-}
-
-void HostContentSettingsMap::UpdateLastUsageByPattern(
- const ContentSettingsPattern& primary_pattern,
- const ContentSettingsPattern& secondary_pattern,
- ContentSettingsType content_type) {
- UsedContentSettingsProviders();
-
- GetPrefProvider()->UpdateLastUsage(
- primary_pattern, secondary_pattern, content_type);
-
- FOR_EACH_OBSERVER(
- content_settings::Observer,
- observers_,
- OnContentSettingUsed(primary_pattern, secondary_pattern, content_type));
-}
-
-base::Time HostContentSettingsMap::GetLastUsage(
- const GURL& primary_url,
- const GURL& secondary_url,
- ContentSettingsType content_type) {
- return GetLastUsageByPattern(
- ContentSettingsPattern::FromURLNoWildcard(primary_url),
- ContentSettingsPattern::FromURLNoWildcard(secondary_url),
- content_type);
-}
-
-base::Time HostContentSettingsMap::GetLastUsageByPattern(
- const ContentSettingsPattern& primary_pattern,
- const ContentSettingsPattern& secondary_pattern,
- ContentSettingsType content_type) {
- UsedContentSettingsProviders();
-
- return GetPrefProvider()->GetLastUsage(
- primary_pattern, secondary_pattern, content_type);
-}
-
-ContentSetting HostContentSettingsMap::GetContentSettingWithoutOverride(
- const GURL& primary_url,
- const GURL& secondary_url,
- ContentSettingsType content_type,
- const std::string& resource_identifier) {
- scoped_ptr<base::Value> value(GetWebsiteSettingWithoutOverride(
- primary_url, secondary_url, content_type, resource_identifier, NULL));
- return content_settings::ValueToContentSetting(value.get());
-}
-
-scoped_ptr<base::Value>
-HostContentSettingsMap::GetWebsiteSettingWithoutOverride(
- const GURL& primary_url,
- const GURL& secondary_url,
- ContentSettingsType content_type,
- const std::string& resource_identifier,
- content_settings::SettingInfo* info) const {
- return GetWebsiteSettingInternal(primary_url,
- secondary_url,
- content_type,
- resource_identifier,
- info,
- false);
-}
-
-void HostContentSettingsMap::SetContentSettingOverride(
- ContentSettingsType content_type,
- bool is_enabled) {
- UsedContentSettingsProviders();
-
- content_settings::OverrideProvider* override =
- static_cast<content_settings::OverrideProvider*>(
- content_settings_providers_[OVERRIDE_PROVIDER]);
- override->SetOverrideSetting(content_type, is_enabled);
-}
-
-bool HostContentSettingsMap::GetContentSettingOverride(
- ContentSettingsType content_type) {
- UsedContentSettingsProviders();
-
- content_settings::OverrideProvider* override =
- static_cast<content_settings::OverrideProvider*>(
- content_settings_providers_[OVERRIDE_PROVIDER]);
- return override->IsEnabled(content_type);
-}
-
-void HostContentSettingsMap::AddObserver(content_settings::Observer* observer) {
- observers_.AddObserver(observer);
-}
-
-void HostContentSettingsMap::RemoveObserver(
- content_settings::Observer* observer) {
- observers_.RemoveObserver(observer);
-}
-
-void HostContentSettingsMap::SetPrefClockForTesting(
- scoped_ptr<base::Clock> clock) {
- UsedContentSettingsProviders();
-
- GetPrefProvider()->SetClockForTesting(clock.Pass());
-}
-
-void HostContentSettingsMap::AddExceptionForURL(
- const GURL& primary_url,
- const GURL& secondary_url,
- ContentSettingsType content_type,
- ContentSetting setting) {
- // TODO(markusheintz): Until the UI supports pattern pairs, both urls must
- // match.
- DCHECK(primary_url == secondary_url);
- DCHECK(!ContentTypeHasCompoundValue(content_type));
-
- // Make sure there is no entry that would override the pattern we are about
- // to insert for exactly this URL.
- SetContentSetting(ContentSettingsPattern::FromURLNoWildcard(primary_url),
- ContentSettingsPattern::Wildcard(),
- content_type,
- std::string(),
- CONTENT_SETTING_DEFAULT);
-
- SetContentSetting(ContentSettingsPattern::FromURL(primary_url),
- ContentSettingsPattern::Wildcard(),
- content_type,
- std::string(),
- setting);
-}
-
-void HostContentSettingsMap::ClearSettingsForOneType(
- ContentSettingsType content_type) {
- UsedContentSettingsProviders();
- for (ProviderIterator provider = content_settings_providers_.begin();
- provider != content_settings_providers_.end();
- ++provider) {
- provider->second->ClearAllContentSettingsRules(content_type);
- }
-}
-
-bool HostContentSettingsMap::IsValueAllowedForType(
- PrefService* prefs, const base::Value* value, ContentSettingsType type) {
- return ContentTypeHasCompoundValue(type) || IsSettingAllowedForType(
- prefs, content_settings::ValueToContentSetting(value), type);
-}
-
-// static
-bool HostContentSettingsMap::IsSettingAllowedForType(
- PrefService* prefs,
- ContentSetting setting,
- ContentSettingsType content_type) {
- // We don't yet support stored content settings for mixed scripting.
- if (content_type == CONTENT_SETTINGS_TYPE_MIXEDSCRIPT)
- return false;
-
- // BLOCK semantics are not implemented for fullscreen.
- if (content_type == CONTENT_SETTINGS_TYPE_FULLSCREEN &&
- setting == CONTENT_SETTING_BLOCK) {
- return false;
- }
-
- // We don't support ALLOW for media default setting.
- if (content_type == CONTENT_SETTINGS_TYPE_MEDIASTREAM &&
- setting == CONTENT_SETTING_ALLOW) {
- return false;
- }
-
-#if defined(OS_ANDROID)
- // App banners store a dictionary.
- if (content_type == CONTENT_SETTINGS_TYPE_APP_BANNER)
- return false;
-#endif
-
- // DEFAULT, ALLOW and BLOCK are always allowed.
- if (setting == CONTENT_SETTING_DEFAULT ||
- setting == CONTENT_SETTING_ALLOW ||
- setting == CONTENT_SETTING_BLOCK) {
- return true;
- }
- switch (content_type) {
- case CONTENT_SETTINGS_TYPE_COOKIES:
- return setting == CONTENT_SETTING_SESSION_ONLY;
- case CONTENT_SETTINGS_TYPE_PLUGINS:
- case CONTENT_SETTINGS_TYPE_GEOLOCATION:
- case CONTENT_SETTINGS_TYPE_NOTIFICATIONS:
- case CONTENT_SETTINGS_TYPE_MOUSELOCK:
- case CONTENT_SETTINGS_TYPE_MEDIASTREAM:
- case CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC:
- case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA:
- case CONTENT_SETTINGS_TYPE_PPAPI_BROKER:
- case CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS:
- case CONTENT_SETTINGS_TYPE_MIDI_SYSEX:
- return setting == CONTENT_SETTING_ASK;
- default:
- return false;
- }
-}
-
-// static
-bool HostContentSettingsMap::ContentTypeHasCompoundValue(
- ContentSettingsType type) {
- // Values for content type CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE,
- // CONTENT_SETTINGS_TYPE_MEDIASTREAM, and
- // CONTENT_SETTINGS_TYPE_SSL_CERT_DECISIONS are of type dictionary/map.
- // Compound types like dictionaries can't be mapped to the type
- // |ContentSetting|.
-#if defined(OS_ANDROID)
- if (type == CONTENT_SETTINGS_TYPE_APP_BANNER)
- return true;
-#endif
-
- return (type == CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE ||
- type == CONTENT_SETTINGS_TYPE_MEDIASTREAM ||
- type == CONTENT_SETTINGS_TYPE_SSL_CERT_DECISIONS);
-}
-
-void HostContentSettingsMap::OnContentSettingChanged(
- const ContentSettingsPattern& primary_pattern,
- const ContentSettingsPattern& secondary_pattern,
- ContentSettingsType content_type,
- std::string resource_identifier) {
- FOR_EACH_OBSERVER(content_settings::Observer,
- observers_,
- OnContentSettingChanged(primary_pattern,
- secondary_pattern,
- content_type,
- resource_identifier));
-}
-
-HostContentSettingsMap::~HostContentSettingsMap() {
- DCHECK(!prefs_);
- STLDeleteValues(&content_settings_providers_);
-}
-
-void HostContentSettingsMap::ShutdownOnUIThread() {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(prefs_);
- prefs_ = NULL;
- for (ProviderIterator it = content_settings_providers_.begin();
- it != content_settings_providers_.end();
- ++it) {
- it->second->ShutdownOnUIThread();
- }
-}
-
-void HostContentSettingsMap::AddSettingsForOneType(
- const content_settings::ProviderInterface* provider,
- ProviderType provider_type,
- ContentSettingsType content_type,
- const std::string& resource_identifier,
- ContentSettingsForOneType* settings,
- bool incognito) const {
- scoped_ptr<content_settings::RuleIterator> rule_iterator(
- provider->GetRuleIterator(content_type,
- resource_identifier,
- incognito));
- while (rule_iterator->HasNext()) {
- const content_settings::Rule& rule = rule_iterator->Next();
- ContentSetting setting_value = CONTENT_SETTING_DEFAULT;
- // TODO(bauerb): Return rules as a list of values, not content settings.
- // Handle the case using compound values for its exceptions and arbitrary
- // values for its default setting. Here we assume all the exceptions
- // are granted as |CONTENT_SETTING_ALLOW|.
- if (ContentTypeHasCompoundValue(content_type) &&
- rule.value.get() &&
- rule.primary_pattern != ContentSettingsPattern::Wildcard()) {
- setting_value = CONTENT_SETTING_ALLOW;
- } else {
- setting_value = content_settings::ValueToContentSetting(rule.value.get());
- }
- settings->push_back(ContentSettingPatternSource(
- rule.primary_pattern, rule.secondary_pattern,
- setting_value,
- kProviderNames[provider_type],
- incognito));
- }
-}
-
-void HostContentSettingsMap::UsedContentSettingsProviders() const {
-#ifndef NDEBUG
- if (used_from_thread_id_ == base::kInvalidThreadId)
- return;
-
- if (base::PlatformThread::CurrentId() != used_from_thread_id_)
- used_from_thread_id_ = base::kInvalidThreadId;
-#endif
-}
-
-bool HostContentSettingsMap::ShouldAllowAllContent(
- const GURL& primary_url,
- const GURL& secondary_url,
- ContentSettingsType content_type) {
- if (content_type == CONTENT_SETTINGS_TYPE_NOTIFICATIONS ||
- content_type == CONTENT_SETTINGS_TYPE_GEOLOCATION ||
- content_type == CONTENT_SETTINGS_TYPE_MIDI_SYSEX) {
- return false;
- }
-#if defined(OS_ANDROID) || defined(OS_CHROMEOS)
- if (content_type == CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER) {
- return false;
- }
-#endif
- if (secondary_url.SchemeIs(content::kChromeUIScheme) &&
- content_type == CONTENT_SETTINGS_TYPE_COOKIES &&
- primary_url.SchemeIsSecure()) {
- return true;
- }
-#if defined(ENABLE_EXTENSIONS)
- if (primary_url.SchemeIs(extensions::kExtensionScheme)) {
- switch (content_type) {
- case CONTENT_SETTINGS_TYPE_PLUGINS:
- case CONTENT_SETTINGS_TYPE_MEDIASTREAM:
- case CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC:
- case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA:
- return false;
- case CONTENT_SETTINGS_TYPE_COOKIES:
- return secondary_url.SchemeIs(extensions::kExtensionScheme);
- default:
- return true;
- }
- }
-#endif
- return primary_url.SchemeIs(content::kChromeDevToolsScheme) ||
- primary_url.SchemeIs(content::kChromeUIScheme);
-}
-
-scoped_ptr<base::Value> HostContentSettingsMap::GetWebsiteSetting(
- const GURL& primary_url,
- const GURL& secondary_url,
- ContentSettingsType content_type,
- const std::string& resource_identifier,
- content_settings::SettingInfo* info) const {
- DCHECK(SupportsResourceIdentifier(content_type) ||
- resource_identifier.empty());
-
- // Check if the scheme of the requesting url is whitelisted.
- if (ShouldAllowAllContent(primary_url, secondary_url, content_type)) {
- if (info) {
- info->source = content_settings::SETTING_SOURCE_WHITELIST;
- info->primary_pattern = ContentSettingsPattern::Wildcard();
- info->secondary_pattern = ContentSettingsPattern::Wildcard();
- }
- return scoped_ptr<base::Value>(
- new base::FundamentalValue(CONTENT_SETTING_ALLOW));
- }
-
- return GetWebsiteSettingInternal(primary_url,
- secondary_url,
- content_type,
- resource_identifier,
- info,
- true);
-}
-
-// 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]);
-}
-
-scoped_ptr<base::Value> HostContentSettingsMap::GetWebsiteSettingInternal(
- const GURL& primary_url,
- const GURL& secondary_url,
- ContentSettingsType content_type,
- const std::string& resource_identifier,
- content_settings::SettingInfo* info,
- bool get_override) const {
- UsedContentSettingsProviders();
- ContentSettingsPattern* primary_pattern = NULL;
- ContentSettingsPattern* secondary_pattern = NULL;
- if (info) {
- primary_pattern = &info->primary_pattern;
- secondary_pattern = &info->secondary_pattern;
- }
-
- // The list of |content_settings_providers_| is ordered according to their
- // precedence.
- for (ConstProviderIterator provider = content_settings_providers_.begin();
- provider != content_settings_providers_.end();
- ++provider) {
- if (!get_override && provider->first == OVERRIDE_PROVIDER)
- continue;
-
- scoped_ptr<base::Value> value(
- content_settings::GetContentSettingValueAndPatterns(provider->second,
- 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];
- return value.Pass();
- }
- }
-
- if (info) {
- info->source = content_settings::SETTING_SOURCE_NONE;
- info->primary_pattern = ContentSettingsPattern();
- info->secondary_pattern = ContentSettingsPattern();
- }
- return scoped_ptr<base::Value>();
-}

Powered by Google App Engine
This is Rietveld 408576698