| Index: components/content_settings/core/browser/content_settings_override_provider.cc
|
| diff --git a/components/content_settings/core/browser/content_settings_override_provider.cc b/components/content_settings/core/browser/content_settings_override_provider.cc
|
| index edb36a58c0e13c146881fa5509c5fddc316f9d46..ee04dc92759e4b3e2dd2e6a6190e6700d62f00fe 100644
|
| --- a/components/content_settings/core/browser/content_settings_override_provider.cc
|
| +++ b/components/content_settings/core/browser/content_settings_override_provider.cc
|
| @@ -10,6 +10,7 @@
|
| #include "base/prefs/pref_service.h"
|
| #include "base/prefs/scoped_user_pref_update.h"
|
| #include "base/values.h"
|
| +#include "components/content_settings/core/browser/content_settings_binary_value_map.h"
|
| #include "components/content_settings/core/browser/content_settings_rule.h"
|
| #include "components/content_settings/core/browser/content_settings_utils.h"
|
| #include "components/content_settings/core/common/content_settings.h"
|
| @@ -19,28 +20,6 @@
|
|
|
| namespace content_settings {
|
|
|
| -namespace {
|
| -
|
| -class OverrideRuleIterator : public RuleIterator {
|
| - public:
|
| - explicit OverrideRuleIterator(bool is_allowed) : is_done_(is_allowed) {}
|
| -
|
| - bool HasNext() const override { return !is_done_; }
|
| -
|
| - Rule Next() override {
|
| - DCHECK(!is_done_);
|
| - is_done_ = true;
|
| - return Rule(ContentSettingsPattern::Wildcard(),
|
| - ContentSettingsPattern::Wildcard(),
|
| - new base::FundamentalValue(CONTENT_SETTING_BLOCK));
|
| - }
|
| -
|
| - private:
|
| - bool is_done_;
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| // static
|
| void OverrideProvider::RegisterProfilePrefs(
|
| user_prefs::PrefRegistrySyncable* registry) {
|
| @@ -64,11 +43,9 @@ RuleIterator* OverrideProvider::GetRuleIterator(
|
| ContentSettingsType content_type,
|
| const ResourceIdentifier& resource_identifier,
|
| bool incognito) const {
|
| - base::AutoLock lock(lock_);
|
| - if (resource_identifier.empty()) {
|
| - return new OverrideRuleIterator(allowed_settings_[content_type]);
|
| - }
|
| - return new EmptyRuleIterator();
|
| + scoped_ptr<base::AutoLock> auto_lock(new base::AutoLock(lock_));
|
| + return allowed_settings_.GetRuleIterator(content_type, resource_identifier,
|
| + auto_lock.Pass());
|
| }
|
|
|
| void OverrideProvider::ClearAllContentSettingsRules(
|
| @@ -97,23 +74,22 @@ void OverrideProvider::SetOverrideSetting(ContentSettingsType content_type,
|
| // Disallow incognito to change the state.
|
| DCHECK(!is_incognito_);
|
|
|
| - base::AutoLock lock(lock_);
|
| + base::AutoLock auto_lock(lock_);
|
| DictionaryPrefUpdate update(prefs_, prefs::kOverrideContentSettings);
|
| base::DictionaryValue* default_settings_dictionary = update.Get();
|
| + allowed_settings_.SetContentSettingDisabled(content_type, !enabled);
|
| if (enabled) {
|
| - allowed_settings_[content_type] = true;
|
| default_settings_dictionary->RemoveWithoutPathExpansion(
|
| GetTypeName(content_type), NULL);
|
| } else {
|
| - allowed_settings_[content_type] = false;
|
| default_settings_dictionary->SetWithoutPathExpansion(
|
| GetTypeName(content_type), new base::FundamentalValue(true));
|
| }
|
| }
|
|
|
| bool OverrideProvider::IsEnabled(ContentSettingsType content_type) const {
|
| - base::AutoLock lock(lock_);
|
| - return allowed_settings_[content_type];
|
| + base::AutoLock auto_lock(lock_);
|
| + return allowed_settings_.IsContentSettingEnabled(content_type);
|
| }
|
|
|
| void OverrideProvider::ReadOverrideSettings() {
|
| @@ -121,9 +97,10 @@ void OverrideProvider::ReadOverrideSettings() {
|
| prefs_->GetDictionary(prefs::kOverrideContentSettings);
|
|
|
| for (int type = 0; type < CONTENT_SETTINGS_NUM_TYPES; ++type) {
|
| - ContentSettingsType content_setting = ContentSettingsType(type);
|
| - allowed_settings_[content_setting] =
|
| - !blocked_settings_dictionary->HasKey(GetTypeName(content_setting));
|
| + ContentSettingsType content_type = ContentSettingsType(type);
|
| + if (blocked_settings_dictionary->HasKey(GetTypeName(content_type))) {
|
| + allowed_settings_.SetContentSettingDisabled(content_type, true);
|
| + }
|
| }
|
| }
|
|
|
|
|