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