Index: chrome/browser/content_settings/content_settings_default_provider.cc |
diff --git a/chrome/browser/content_settings/content_settings_default_provider.cc b/chrome/browser/content_settings/content_settings_default_provider.cc |
deleted file mode 100644 |
index 4dc313dfe07ac219364c1dd588d2171f2a270092..0000000000000000000000000000000000000000 |
--- a/chrome/browser/content_settings/content_settings_default_provider.cc |
+++ /dev/null |
@@ -1,340 +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/content_settings_default_provider.h" |
- |
-#include <string> |
-#include <vector> |
- |
-#include "base/auto_reset.h" |
-#include "base/basictypes.h" |
-#include "base/bind.h" |
-#include "base/command_line.h" |
-#include "base/metrics/histogram.h" |
-#include "base/prefs/pref_service.h" |
-#include "base/prefs/scoped_user_pref_update.h" |
-#include "chrome/browser/content_settings/content_settings_utils.h" |
-#include "chrome/common/pref_names.h" |
-#include "components/content_settings/core/browser/content_settings_rule.h" |
-#include "components/content_settings/core/common/content_settings.h" |
-#include "components/content_settings/core/common/content_settings_pattern.h" |
-#include "components/pref_registry/pref_registry_syncable.h" |
-#include "url/gurl.h" |
- |
-namespace { |
- |
-// The default setting for each content type. |
-const ContentSetting kDefaultSettings[] = { |
- CONTENT_SETTING_ALLOW, // CONTENT_SETTINGS_TYPE_COOKIES |
- CONTENT_SETTING_ALLOW, // CONTENT_SETTINGS_TYPE_IMAGES |
- CONTENT_SETTING_ALLOW, // CONTENT_SETTINGS_TYPE_JAVASCRIPT |
- CONTENT_SETTING_ALLOW, // CONTENT_SETTINGS_TYPE_PLUGINS |
- CONTENT_SETTING_BLOCK, // CONTENT_SETTINGS_TYPE_POPUPS |
- CONTENT_SETTING_ASK, // CONTENT_SETTINGS_TYPE_GEOLOCATION |
- CONTENT_SETTING_ASK, // CONTENT_SETTINGS_TYPE_NOTIFICATIONS |
- CONTENT_SETTING_DEFAULT, // CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE |
- CONTENT_SETTING_ASK, // CONTENT_SETTINGS_TYPE_FULLSCREEN |
- CONTENT_SETTING_ASK, // CONTENT_SETTINGS_TYPE_MOUSELOCK |
- CONTENT_SETTING_DEFAULT, // CONTENT_SETTINGS_TYPE_MIXEDSCRIPT |
- CONTENT_SETTING_ASK, // CONTENT_SETTINGS_TYPE_MEDIASTREAM |
- CONTENT_SETTING_ASK, // CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC |
- CONTENT_SETTING_ASK, // CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA |
- CONTENT_SETTING_DEFAULT, // CONTENT_SETTINGS_TYPE_PROTOCOL_HANDLERS |
- CONTENT_SETTING_ASK, // CONTENT_SETTINGS_TYPE_PPAPI_BROKER |
- CONTENT_SETTING_ASK, // CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS |
- CONTENT_SETTING_ASK, // CONTENT_SETTINGS_TYPE_MIDI_SYSEX |
- CONTENT_SETTING_ASK, // CONTENT_SETTINGS_TYPE_PUSH_MESSAGING |
- CONTENT_SETTING_ALLOW, // CONTENT_SETTINGS_TYPE_SSL_CERT_DECISIONS |
-#if defined(OS_WIN) |
- CONTENT_SETTING_ASK, // CONTENT_SETTINGS_TYPE_METRO_SWITCH_TO_DESKTOP |
-#elif defined(OS_ANDROID) || defined(OS_CHROMEOS) |
- CONTENT_SETTING_ASK, // CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER |
-#endif |
-#if defined(OS_ANDROID) |
- CONTENT_SETTING_DEFAULT, // CONTENT_SETTINGS_TYPE_APP_BANNER |
-#endif |
-}; |
-COMPILE_ASSERT(arraysize(kDefaultSettings) == CONTENT_SETTINGS_NUM_TYPES, |
- default_settings_incorrect_size); |
- |
-} // namespace |
- |
-namespace content_settings { |
- |
-namespace { |
- |
-class DefaultRuleIterator : public RuleIterator { |
- public: |
- explicit DefaultRuleIterator(const base::Value* value) { |
- if (value) |
- value_.reset(value->DeepCopy()); |
- } |
- |
- bool HasNext() const override { return value_.get() != NULL; } |
- |
- Rule Next() override { |
- DCHECK(value_.get()); |
- return Rule(ContentSettingsPattern::Wildcard(), |
- ContentSettingsPattern::Wildcard(), |
- value_.release()); |
- } |
- |
- private: |
- scoped_ptr<base::Value> value_; |
-}; |
- |
-} // namespace |
- |
-// static |
-void DefaultProvider::RegisterProfilePrefs( |
- user_prefs::PrefRegistrySyncable* registry) { |
- // The registration of the preference prefs::kDefaultContentSettings should |
- // also include the default values for default content settings. This allows |
- // functional tests to get default content settings by reading the preference |
- // prefs::kDefaultContentSettings via pyauto. |
- // TODO(markusheintz): Write pyauto hooks for the content settings map as |
- // content settings should be read from the host content settings map. |
- base::DictionaryValue* default_content_settings = new base::DictionaryValue(); |
- registry->RegisterDictionaryPref( |
- prefs::kDefaultContentSettings, |
- default_content_settings, |
- user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
-} |
- |
-DefaultProvider::DefaultProvider(PrefService* prefs, bool incognito) |
- : prefs_(prefs), |
- is_incognito_(incognito), |
- updating_preferences_(false) { |
- DCHECK(prefs_); |
- |
- // Read global defaults. |
- ReadDefaultSettings(true); |
- |
- UMA_HISTOGRAM_ENUMERATION( |
- "ContentSettings.DefaultCookiesSetting", |
- ValueToContentSetting( |
- default_settings_[CONTENT_SETTINGS_TYPE_COOKIES].get()), |
- CONTENT_SETTING_NUM_SETTINGS); |
- UMA_HISTOGRAM_ENUMERATION( |
- "ContentSettings.DefaultImagesSetting", |
- ValueToContentSetting( |
- default_settings_[CONTENT_SETTINGS_TYPE_IMAGES].get()), |
- CONTENT_SETTING_NUM_SETTINGS); |
- UMA_HISTOGRAM_ENUMERATION( |
- "ContentSettings.DefaultJavaScriptSetting", |
- ValueToContentSetting( |
- default_settings_[CONTENT_SETTINGS_TYPE_JAVASCRIPT].get()), |
- CONTENT_SETTING_NUM_SETTINGS); |
- UMA_HISTOGRAM_ENUMERATION( |
- "ContentSettings.DefaultPluginsSetting", |
- ValueToContentSetting( |
- default_settings_[CONTENT_SETTINGS_TYPE_PLUGINS].get()), |
- CONTENT_SETTING_NUM_SETTINGS); |
- UMA_HISTOGRAM_ENUMERATION( |
- "ContentSettings.DefaultPopupsSetting", |
- ValueToContentSetting( |
- default_settings_[CONTENT_SETTINGS_TYPE_POPUPS].get()), |
- CONTENT_SETTING_NUM_SETTINGS); |
- UMA_HISTOGRAM_ENUMERATION( |
- "ContentSettings.DefaultLocationSetting", |
- ValueToContentSetting( |
- default_settings_[CONTENT_SETTINGS_TYPE_GEOLOCATION].get()), |
- CONTENT_SETTING_NUM_SETTINGS); |
- UMA_HISTOGRAM_ENUMERATION( |
- "ContentSettings.DefaultNotificationsSetting", |
- ValueToContentSetting( |
- default_settings_[CONTENT_SETTINGS_TYPE_NOTIFICATIONS].get()), |
- CONTENT_SETTING_NUM_SETTINGS); |
- UMA_HISTOGRAM_ENUMERATION( |
- "ContentSettings.DefaultMouseCursorSetting", |
- ValueToContentSetting( |
- default_settings_[CONTENT_SETTINGS_TYPE_MOUSELOCK].get()), |
- CONTENT_SETTING_NUM_SETTINGS); |
- UMA_HISTOGRAM_ENUMERATION( |
- "ContentSettings.DefaultMediaStreamSetting", |
- ValueToContentSetting( |
- default_settings_[CONTENT_SETTINGS_TYPE_MEDIASTREAM].get()), |
- CONTENT_SETTING_NUM_SETTINGS); |
- UMA_HISTOGRAM_ENUMERATION( |
- "ContentSettings.DefaultMIDISysExSetting", |
- ValueToContentSetting( |
- default_settings_[CONTENT_SETTINGS_TYPE_MIDI_SYSEX].get()), |
- CONTENT_SETTING_NUM_SETTINGS); |
- UMA_HISTOGRAM_ENUMERATION( |
- "ContentSettings.DefaultPushMessagingSetting", |
- ValueToContentSetting( |
- default_settings_[CONTENT_SETTINGS_TYPE_PUSH_MESSAGING].get()), |
- CONTENT_SETTING_NUM_SETTINGS); |
- |
- pref_change_registrar_.Init(prefs_); |
- PrefChangeRegistrar::NamedChangeCallback callback = base::Bind( |
- &DefaultProvider::OnPreferenceChanged, base::Unretained(this)); |
- pref_change_registrar_.Add(prefs::kDefaultContentSettings, callback); |
-} |
- |
-DefaultProvider::~DefaultProvider() { |
-} |
- |
-bool DefaultProvider::SetWebsiteSetting( |
- const ContentSettingsPattern& primary_pattern, |
- const ContentSettingsPattern& secondary_pattern, |
- ContentSettingsType content_type, |
- const ResourceIdentifier& resource_identifier, |
- base::Value* in_value) { |
- DCHECK(CalledOnValidThread()); |
- DCHECK(prefs_); |
- |
- // Ignore non default settings |
- if (primary_pattern != ContentSettingsPattern::Wildcard() || |
- secondary_pattern != ContentSettingsPattern::Wildcard()) { |
- return false; |
- } |
- |
- // The default settings may not be directly modified for OTR sessions. |
- // Instead, they are synced to the main profile's setting. |
- if (is_incognito_) |
- return false; |
- |
- // Put |in_value| in a scoped pointer to ensure that it gets cleaned up |
- // properly if we don't pass on the ownership. |
- scoped_ptr<base::Value> value(in_value); |
- { |
- base::AutoReset<bool> auto_reset(&updating_preferences_, true); |
- |
- // |DefaultProvider| should not send any notifications when holding |
- // |lock_|. |DictionaryPrefUpdate| destructor and |
- // |PrefService::SetInteger()| send out notifications. As a response, the |
- // upper layers may call |GetAllContentSettingRules| which acquires |lock_| |
- // again. |
- DictionaryPrefUpdate update(prefs_, prefs::kDefaultContentSettings); |
- base::DictionaryValue* default_settings_dictionary = update.Get(); |
- base::AutoLock lock(lock_); |
- if (value.get() == NULL || |
- ValueToContentSetting(value.get()) == kDefaultSettings[content_type]) { |
- // If |value| is NULL we need to reset the default setting the the |
- // hardcoded default. |
- default_settings_[content_type].reset( |
- new base::FundamentalValue(kDefaultSettings[content_type])); |
- |
- // Remove the corresponding pref entry since the hardcoded default value |
- // is used. |
- default_settings_dictionary->RemoveWithoutPathExpansion( |
- GetTypeName(content_type), NULL); |
- } else { |
- default_settings_[content_type].reset(value->DeepCopy()); |
- // Transfer ownership of |value| to the |default_settings_dictionary|. |
- default_settings_dictionary->SetWithoutPathExpansion( |
- GetTypeName(content_type), value.release()); |
- } |
- } |
- |
- NotifyObservers(ContentSettingsPattern(), |
- ContentSettingsPattern(), |
- content_type, |
- std::string()); |
- |
- return true; |
-} |
- |
-RuleIterator* DefaultProvider::GetRuleIterator( |
- ContentSettingsType content_type, |
- const ResourceIdentifier& resource_identifier, |
- bool incognito) const { |
- base::AutoLock lock(lock_); |
- if (resource_identifier.empty()) { |
- ValueMap::const_iterator it(default_settings_.find(content_type)); |
- if (it != default_settings_.end()) { |
- return new DefaultRuleIterator(it->second.get()); |
- } |
- NOTREACHED(); |
- } |
- return new EmptyRuleIterator(); |
-} |
- |
-void DefaultProvider::ClearAllContentSettingsRules( |
- ContentSettingsType content_type) { |
- // TODO(markusheintz): This method is only called when the |
- // |DesktopNotificationService| calls |ClearAllSettingsForType| method on the |
- // |HostContentSettingsMap|. Don't implement this method yet, otherwise the |
- // default notification settings will be cleared as well. |
-} |
- |
-void DefaultProvider::ShutdownOnUIThread() { |
- DCHECK(CalledOnValidThread()); |
- DCHECK(prefs_); |
- RemoveAllObservers(); |
- pref_change_registrar_.RemoveAll(); |
- prefs_ = NULL; |
-} |
- |
-void DefaultProvider::OnPreferenceChanged(const std::string& name) { |
- DCHECK(CalledOnValidThread()); |
- if (updating_preferences_) |
- return; |
- |
- if (name == prefs::kDefaultContentSettings) { |
- ReadDefaultSettings(true); |
- } else { |
- NOTREACHED() << "Unexpected preference observed"; |
- return; |
- } |
- |
- NotifyObservers(ContentSettingsPattern(), |
- ContentSettingsPattern(), |
- CONTENT_SETTINGS_TYPE_DEFAULT, |
- std::string()); |
-} |
- |
-void DefaultProvider::ReadDefaultSettings(bool overwrite) { |
- base::AutoLock lock(lock_); |
- const base::DictionaryValue* default_settings_dictionary = |
- prefs_->GetDictionary(prefs::kDefaultContentSettings); |
- |
- if (overwrite) |
- default_settings_.clear(); |
- |
- // Careful: The returned value could be NULL if the pref has never been set. |
- if (default_settings_dictionary) |
- GetSettingsFromDictionary(default_settings_dictionary); |
- |
- ForceDefaultsToBeExplicit(); |
-} |
- |
-void DefaultProvider::ForceDefaultsToBeExplicit() { |
- for (int i = 0; i < CONTENT_SETTINGS_NUM_TYPES; ++i) { |
- ContentSettingsType type = ContentSettingsType(i); |
- if (!default_settings_[type].get() && |
- kDefaultSettings[i] != CONTENT_SETTING_DEFAULT) { |
- default_settings_[type].reset( |
- new base::FundamentalValue(kDefaultSettings[i])); |
- } |
- } |
-} |
- |
-void DefaultProvider::GetSettingsFromDictionary( |
- const base::DictionaryValue* dictionary) { |
- for (base::DictionaryValue::Iterator i(*dictionary); |
- !i.IsAtEnd(); i.Advance()) { |
- const std::string& content_type(i.key()); |
- for (size_t type = 0; type < CONTENT_SETTINGS_NUM_TYPES; ++type) { |
- if (content_type == GetTypeName(ContentSettingsType(type))) { |
- int int_value = CONTENT_SETTING_DEFAULT; |
- bool is_integer = i.value().GetAsInteger(&int_value); |
- DCHECK(is_integer); |
- default_settings_[ContentSettingsType(type)].reset( |
- new base::FundamentalValue(int_value)); |
- break; |
- } |
- } |
- } |
- // Migrate obsolete cookie prompt mode. |
- if (ValueToContentSetting( |
- default_settings_[CONTENT_SETTINGS_TYPE_COOKIES].get()) == |
- CONTENT_SETTING_ASK) { |
- default_settings_[CONTENT_SETTINGS_TYPE_COOKIES].reset( |
- new base::FundamentalValue(CONTENT_SETTING_BLOCK)); |
- } |
-} |
- |
-} // namespace content_settings |