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

Unified Diff: chrome/browser/extensions/extension_content_settings_store.cc

Issue 10381097: Move content settings extension API to content_settings dir. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: fixed conflict Created 8 years, 7 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/extensions/extension_content_settings_store.cc
diff --git a/chrome/browser/extensions/extension_content_settings_store.cc b/chrome/browser/extensions/extension_content_settings_store.cc
deleted file mode 100644
index 14713a1cdc41c1d84121635426f1843bc97ffb65..0000000000000000000000000000000000000000
--- a/chrome/browser/extensions/extension_content_settings_store.cc
+++ /dev/null
@@ -1,354 +0,0 @@
-// Copyright (c) 2011 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/extensions/extension_content_settings_store.h"
-
-#include <set>
-
-#include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/scoped_vector.h"
-#include "base/stl_util.h"
-#include "base/values.h"
-#include "chrome/browser/content_settings/content_settings_origin_identifier_value_map.h"
-#include "chrome/browser/content_settings/content_settings_rule.h"
-#include "chrome/browser/content_settings/content_settings_utils.h"
-#include "chrome/browser/extensions/extension_content_settings_api_constants.h"
-#include "chrome/browser/extensions/extension_content_settings_helpers.h"
-#include "content/public/browser/browser_thread.h"
-
-namespace helpers = extension_content_settings_helpers;
-namespace keys = extension_content_settings_api_constants;
-
-using content::BrowserThread;
-using content_settings::ConcatenationIterator;
-using content_settings::Rule;
-using content_settings::RuleIterator;
-using content_settings::OriginIdentifierValueMap;
-using content_settings::ResourceIdentifier;
-using content_settings::ValueToContentSetting;
-
-struct ExtensionContentSettingsStore::ExtensionEntry {
- // Extension id
- std::string id;
- // Whether extension is enabled in the profile.
- bool enabled;
- // Content settings.
- OriginIdentifierValueMap settings;
- // Persistent incognito content settings.
- OriginIdentifierValueMap incognito_persistent_settings;
- // Session-only incognito content settings.
- OriginIdentifierValueMap incognito_session_only_settings;
-};
-
-ExtensionContentSettingsStore::ExtensionContentSettingsStore() {
- DCHECK(OnCorrectThread());
-}
-
-ExtensionContentSettingsStore::~ExtensionContentSettingsStore() {
- STLDeleteValues(&entries_);
-}
-
-RuleIterator* ExtensionContentSettingsStore::GetRuleIterator(
- ContentSettingsType type,
- const content_settings::ResourceIdentifier& identifier,
- bool incognito) const {
- ScopedVector<RuleIterator> iterators;
- // Iterate the extensions based on install time (last installed extensions
- // first).
- ExtensionEntryMap::const_reverse_iterator entry;
-
- // The individual |RuleIterators| shouldn't lock; pass |lock_| to the
- // |ConcatenationIterator| in a locked state.
- scoped_ptr<base::AutoLock> auto_lock(new base::AutoLock(lock_));
-
- for (entry = entries_.rbegin(); entry != entries_.rend(); ++entry) {
- if (!entry->second->enabled)
- continue;
-
- if (incognito) {
- iterators.push_back(
- entry->second->incognito_session_only_settings.GetRuleIterator(
- type,
- identifier,
- NULL));
- iterators.push_back(
- entry->second->incognito_persistent_settings.GetRuleIterator(
- type,
- identifier,
- NULL));
- } else {
- iterators.push_back(
- entry->second->settings.GetRuleIterator(type, identifier, NULL));
- }
- }
- return new ConcatenationIterator(&iterators, auto_lock.release());
-}
-
-void ExtensionContentSettingsStore::SetExtensionContentSetting(
- const std::string& ext_id,
- const ContentSettingsPattern& primary_pattern,
- const ContentSettingsPattern& secondary_pattern,
- ContentSettingsType type,
- const content_settings::ResourceIdentifier& identifier,
- ContentSetting setting,
- ExtensionPrefsScope scope) {
- {
- base::AutoLock lock(lock_);
- OriginIdentifierValueMap* map = GetValueMap(ext_id, scope);
- if (setting == CONTENT_SETTING_DEFAULT) {
- map->DeleteValue(primary_pattern, secondary_pattern, type, identifier);
- } else {
- map->SetValue(primary_pattern, secondary_pattern, type, identifier,
- base::Value::CreateIntegerValue(setting));
- }
- }
-
- // Send notification that content settings changed.
- // TODO(markusheintz): Notifications should only be sent if the set content
- // setting is effective and not hidden by another setting of another
- // extension installed more recently.
- NotifyOfContentSettingChanged(ext_id,
- scope != kExtensionPrefsScopeRegular);
-}
-
-void ExtensionContentSettingsStore::RegisterExtension(
- const std::string& ext_id,
- const base::Time& install_time,
- bool is_enabled) {
- base::AutoLock lock(lock_);
- ExtensionEntryMap::iterator i = FindEntry(ext_id);
- if (i != entries_.end()) {
- delete i->second;
- entries_.erase(i);
- }
-
- ExtensionEntry* entry = new ExtensionEntry;
- entry->id = ext_id;
- entry->enabled = is_enabled;
- entries_.insert(std::make_pair(install_time, entry));
-}
-
-void ExtensionContentSettingsStore::UnregisterExtension(
- const std::string& ext_id) {
- bool notify = false;
- bool notify_incognito = false;
- {
- base::AutoLock lock(lock_);
- ExtensionEntryMap::iterator i = FindEntry(ext_id);
- if (i == entries_.end())
- return;
- notify = !i->second->settings.empty();
- notify_incognito = !i->second->incognito_persistent_settings.empty() ||
- !i->second->incognito_session_only_settings.empty();
-
- delete i->second;
- entries_.erase(i);
- }
- if (notify)
- NotifyOfContentSettingChanged(ext_id, false);
- if (notify_incognito)
- NotifyOfContentSettingChanged(ext_id, true);
-}
-
-void ExtensionContentSettingsStore::SetExtensionState(
- const std::string& ext_id, bool is_enabled) {
- bool notify = false;
- bool notify_incognito = false;
- {
- base::AutoLock lock(lock_);
- ExtensionEntryMap::const_iterator i = FindEntry(ext_id);
- if (i == entries_.end())
- return;
- notify = !i->second->settings.empty();
- notify_incognito = !i->second->incognito_persistent_settings.empty() ||
- !i->second->incognito_session_only_settings.empty();
-
- i->second->enabled = is_enabled;
- }
- if (notify)
- NotifyOfContentSettingChanged(ext_id, false);
- if (notify_incognito)
- NotifyOfContentSettingChanged(ext_id, true);
-}
-
-OriginIdentifierValueMap* ExtensionContentSettingsStore::GetValueMap(
- const std::string& ext_id,
- ExtensionPrefsScope scope) {
- ExtensionEntryMap::const_iterator i = FindEntry(ext_id);
- if (i != entries_.end()) {
- switch (scope) {
- case kExtensionPrefsScopeRegular:
- return &(i->second->settings);
- case kExtensionPrefsScopeIncognitoPersistent:
- return &(i->second->incognito_persistent_settings);
- case kExtensionPrefsScopeIncognitoSessionOnly:
- return &(i->second->incognito_session_only_settings);
- }
- }
- return NULL;
-}
-
-const OriginIdentifierValueMap* ExtensionContentSettingsStore::GetValueMap(
- const std::string& ext_id,
- ExtensionPrefsScope scope) const {
- ExtensionEntryMap::const_iterator i = FindEntry(ext_id);
- if (i != entries_.end()) {
- switch (scope) {
- case kExtensionPrefsScopeRegular:
- return &(i->second->settings);
- case kExtensionPrefsScopeIncognitoPersistent:
- return &(i->second->incognito_persistent_settings);
- case kExtensionPrefsScopeIncognitoSessionOnly:
- return &(i->second->incognito_session_only_settings);
- }
- }
- return NULL;
-}
-
-void ExtensionContentSettingsStore::ClearContentSettingsForExtension(
- const std::string& ext_id,
- ExtensionPrefsScope scope) {
- bool notify = false;
- {
- base::AutoLock lock(lock_);
- OriginIdentifierValueMap* map = GetValueMap(ext_id, scope);
- notify = !map->empty();
- map->clear();
- }
- if (notify) {
- NotifyOfContentSettingChanged(ext_id, scope != kExtensionPrefsScopeRegular);
- }
-}
-
-base::ListValue* ExtensionContentSettingsStore::GetSettingsForExtension(
- const std::string& extension_id,
- ExtensionPrefsScope scope) const {
- base::AutoLock lock(lock_);
- const OriginIdentifierValueMap* map = GetValueMap(extension_id, scope);
- if (!map)
- return NULL;
- base::ListValue* settings = new base::ListValue();
- OriginIdentifierValueMap::EntryMap::const_iterator it;
- for (it = map->begin(); it != map->end(); ++it) {
- scoped_ptr<RuleIterator> rule_iterator(
- map->GetRuleIterator(it->first.content_type,
- it->first.resource_identifier,
- NULL)); // We already hold the lock.
- while (rule_iterator->HasNext()) {
- const Rule& rule = rule_iterator->Next();
- base::DictionaryValue* setting_dict = new base::DictionaryValue();
- setting_dict->SetString(keys::kPrimaryPatternKey,
- rule.primary_pattern.ToString());
- setting_dict->SetString(keys::kSecondaryPatternKey,
- rule.secondary_pattern.ToString());
- setting_dict->SetString(
- keys::kContentSettingsTypeKey,
- helpers::ContentSettingsTypeToString(it->first.content_type));
- setting_dict->SetString(keys::kResourceIdentifierKey,
- it->first.resource_identifier);
- ContentSetting content_setting = ValueToContentSetting(rule.value.get());
- DCHECK_NE(CONTENT_SETTING_DEFAULT, content_setting);
- setting_dict->SetString(
- keys::kContentSettingKey,
- helpers::ContentSettingToString(content_setting));
- settings->Append(setting_dict);
- }
- }
- return settings;
-}
-
-void ExtensionContentSettingsStore::SetExtensionContentSettingsFromList(
- const std::string& extension_id,
- const base::ListValue* list,
- ExtensionPrefsScope scope) {
- for (base::ListValue::const_iterator it = list->begin();
- it != list->end(); ++it) {
- if ((*it)->GetType() != Value::TYPE_DICTIONARY) {
- NOTREACHED();
- continue;
- }
- base::DictionaryValue* dict = static_cast<base::DictionaryValue*>(*it);
- std::string primary_pattern_str;
- dict->GetString(keys::kPrimaryPatternKey, &primary_pattern_str);
- ContentSettingsPattern primary_pattern =
- ContentSettingsPattern::FromString(primary_pattern_str);
- DCHECK(primary_pattern.IsValid());
-
- std::string secondary_pattern_str;
- dict->GetString(keys::kSecondaryPatternKey, &secondary_pattern_str);
- ContentSettingsPattern secondary_pattern =
- ContentSettingsPattern::FromString(secondary_pattern_str);
- DCHECK(secondary_pattern.IsValid());
-
- std::string content_settings_type_str;
- dict->GetString(keys::kContentSettingsTypeKey, &content_settings_type_str);
- ContentSettingsType content_settings_type =
- helpers::StringToContentSettingsType(content_settings_type_str);
- DCHECK_NE(CONTENT_SETTINGS_TYPE_DEFAULT, content_settings_type);
-
- std::string resource_identifier;
- dict->GetString(keys::kResourceIdentifierKey, &resource_identifier);
-
- std::string content_setting_string;
- dict->GetString(keys::kContentSettingKey, &content_setting_string);
- ContentSetting setting = CONTENT_SETTING_DEFAULT;
- bool result =
- helpers::StringToContentSetting(content_setting_string, &setting);
- DCHECK(result);
-
- SetExtensionContentSetting(extension_id,
- primary_pattern,
- secondary_pattern,
- content_settings_type,
- resource_identifier,
- setting,
- scope);
- }
-}
-
-void ExtensionContentSettingsStore::AddObserver(Observer* observer) {
- DCHECK(OnCorrectThread());
- observers_.AddObserver(observer);
-}
-
-void ExtensionContentSettingsStore::RemoveObserver(Observer* observer) {
- DCHECK(OnCorrectThread());
- observers_.RemoveObserver(observer);
-}
-
-void ExtensionContentSettingsStore::NotifyOfContentSettingChanged(
- const std::string& extension_id,
- bool incognito) {
- FOR_EACH_OBSERVER(
- ExtensionContentSettingsStore::Observer,
- observers_,
- OnContentSettingChanged(extension_id, incognito));
-}
-
-bool ExtensionContentSettingsStore::OnCorrectThread() {
- // If there is no UI thread, we're most likely in a unit test.
- return !BrowserThread::IsWellKnownThread(BrowserThread::UI) ||
- BrowserThread::CurrentlyOn(BrowserThread::UI);
-}
-
-ExtensionContentSettingsStore::ExtensionEntryMap::iterator
-ExtensionContentSettingsStore::FindEntry(const std::string& ext_id) {
- ExtensionEntryMap::iterator i;
- for (i = entries_.begin(); i != entries_.end(); ++i) {
- if (i->second->id == ext_id)
- return i;
- }
- return entries_.end();
-}
-
-ExtensionContentSettingsStore::ExtensionEntryMap::const_iterator
-ExtensionContentSettingsStore::FindEntry(const std::string& ext_id) const {
- ExtensionEntryMap::const_iterator i;
- for (i = entries_.begin(); i != entries_.end(); ++i) {
- if (i->second->id == ext_id)
- return i;
- }
- return entries_.end();
-}

Powered by Google App Engine
This is Rietveld 408576698