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

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

Issue 8539004: Replace SetContentSetting method of the content_settings::Provider interface with GetWebsiteSetting (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase onto origin/trunk Created 9 years, 1 month 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/content_settings_pref_provider.cc
diff --git a/chrome/browser/content_settings/content_settings_pref_provider.cc b/chrome/browser/content_settings/content_settings_pref_provider.cc
index cc6cf8b58a6720fd48d1d420612f2a62b6083389..d1d17a316c98e57affcaeb935db87ad3ad2715dd 100644
--- a/chrome/browser/content_settings/content_settings_pref_provider.cc
+++ b/chrome/browser/content_settings/content_settings_pref_provider.cc
@@ -151,15 +151,26 @@ PrefProvider::PrefProvider(PrefService* prefs,
pref_change_registrar_.Add(prefs::kDesktopNotificationDeniedOrigins, this);
}
-void PrefProvider::SetContentSetting(
+bool PrefProvider::SetWebsiteSetting(
const ContentSettingsPattern& primary_pattern,
const ContentSettingsPattern& secondary_pattern,
ContentSettingsType content_type,
const ResourceIdentifier& resource_identifier,
- ContentSetting setting) {
+ Value* in_value) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(prefs_);
+ // Default settings are set using a wildcard pattern for both
+ // |primary_pattern| and |secondary_pattern|. Don't store default settings in
+ // the |PrefProvider|. The |PrefProvider| handles settings for specific
+ // sites/origins defined by the |primary_pattern| and the |secondary_pattern|.
+ // Default settings are handled by the |DefaultProvider|.
+ if (primary_pattern == ContentSettingsPattern::Wildcard() &&
+ secondary_pattern == ContentSettingsPattern::Wildcard()) {
+ return false;
+ }
+ // At this point take the ownership of the |in_value|.
+ scoped_ptr<base::Value> value(in_value);
// Update in memory value map.
OriginIdentifierValueMap* map_to_modify = &incognito_value_map_;
if (!is_incognito_)
@@ -167,19 +178,19 @@ void PrefProvider::SetContentSetting(
{
base::AutoLock auto_lock(lock_);
- if (setting == CONTENT_SETTING_DEFAULT) {
- map_to_modify->DeleteValue(
+ if (value.get()) {
+ map_to_modify->SetValue(
primary_pattern,
secondary_pattern,
content_type,
- resource_identifier);
+ resource_identifier,
+ value->DeepCopy());
} else {
- map_to_modify->SetValue(
+ map_to_modify->DeleteValue(
primary_pattern,
secondary_pattern,
content_type,
- resource_identifier,
- Value::CreateIntegerValue(setting));
+ resource_identifier);
}
}
// Update the content settings preference.
@@ -188,12 +199,14 @@ void PrefProvider::SetContentSetting(
secondary_pattern,
content_type,
resource_identifier,
- setting);
+ value.get());
prefs_->ScheduleSavePersistentPrefs();
}
NotifyObservers(
primary_pattern, secondary_pattern, content_type, resource_identifier);
+
+ return true;
}
void PrefProvider::ClearAllContentSettingsRules(
@@ -225,7 +238,7 @@ void PrefProvider::ClearAllContentSettingsRules(
it->secondary_pattern,
content_type,
"",
- CONTENT_SETTING_DEFAULT);
+ NULL);
}
NotifyObservers(ContentSettingsPattern(),
ContentSettingsPattern(),
@@ -297,7 +310,7 @@ void PrefProvider::UpdatePref(
const ContentSettingsPattern& secondary_pattern,
ContentSettingsType content_type,
const ResourceIdentifier& resource_identifier,
- ContentSetting setting) {
+ const base::Value* value) {
// Ensure that |lock_| is not held by this thread, since this function will
// send out notifications (by |~DictionaryPrefUpdate|).
AssertLockNotHeld();
@@ -311,7 +324,7 @@ void PrefProvider::UpdatePref(
secondary_pattern,
content_type,
resource_identifier,
- setting,
+ value,
pattern_pairs_settings);
}
if (content_type != CONTENT_SETTINGS_TYPE_GEOLOCATION &&
@@ -320,9 +333,12 @@ void PrefProvider::UpdatePref(
secondary_pattern,
content_type,
resource_identifier,
- setting);
+ ValueToContentSetting(value));
} else if (content_type == CONTENT_SETTINGS_TYPE_GEOLOCATION) {
- UpdateObsoleteGeolocationPref(primary_pattern, secondary_pattern, setting);
+ UpdateObsoleteGeolocationPref(
+ primary_pattern,
+ secondary_pattern,
+ ValueToContentSetting(value));
} else if (content_type == CONTENT_SETTINGS_TYPE_NOTIFICATIONS) {
ListPrefUpdate update_allowed_sites(
prefs_, prefs::kDesktopNotificationAllowedOrigins);
@@ -330,7 +346,7 @@ void PrefProvider::UpdatePref(
prefs_, prefs::kDesktopNotificationDeniedOrigins);
UpdateObsoleteNotificationsSettings(primary_pattern,
secondary_pattern,
- setting,
+ ValueToContentSetting(value),
update_allowed_sites.Get(),
update_denied_sites.Get());
}
@@ -507,7 +523,7 @@ void PrefProvider::UpdatePatternPairsSettings(
const ContentSettingsPattern& secondary_pattern,
ContentSettingsType content_type,
const ResourceIdentifier& resource_identifier,
- ContentSetting setting,
+ const base::Value* value,
DictionaryValue* pattern_pairs_settings) {
// Get settings dictionary for the given patterns.
std::string pattern_str(CreatePatternString(primary_pattern,
@@ -516,7 +532,7 @@ void PrefProvider::UpdatePatternPairsSettings(
bool found = pattern_pairs_settings->GetDictionaryWithoutPathExpansion(
pattern_str, &settings_dictionary);
- if (!found && (setting != CONTENT_SETTING_DEFAULT)) {
+ if (!found && value) {
settings_dictionary = new DictionaryValue;
pattern_pairs_settings->SetWithoutPathExpansion(
pattern_str, settings_dictionary);
@@ -529,13 +545,13 @@ void PrefProvider::UpdatePatternPairsSettings(
found = settings_dictionary->GetDictionary(
res_dictionary_path, &resource_dictionary);
if (!found) {
- if (setting == CONTENT_SETTING_DEFAULT)
+ if (value == NULL)
return; // Nothing to remove. Exit early.
resource_dictionary = new DictionaryValue;
settings_dictionary->Set(res_dictionary_path, resource_dictionary);
}
// Update resource dictionary.
- if (setting == CONTENT_SETTING_DEFAULT) {
+ if (value == NULL) {
resource_dictionary->RemoveWithoutPathExpansion(resource_identifier,
NULL);
if (resource_dictionary->empty()) {
@@ -544,17 +560,17 @@ void PrefProvider::UpdatePatternPairsSettings(
}
} else {
resource_dictionary->SetWithoutPathExpansion(
- resource_identifier, Value::CreateIntegerValue(setting));
+ resource_identifier, value->DeepCopy());
}
} else {
// Update settings dictionary.
std::string setting_path = GetTypeName(content_type);
- if (setting == CONTENT_SETTING_DEFAULT) {
+ if (value == NULL) {
settings_dictionary->RemoveWithoutPathExpansion(setting_path,
NULL);
} else {
settings_dictionary->SetWithoutPathExpansion(
- setting_path, Value::CreateIntegerValue(setting));
+ setting_path, value->DeepCopy());
}
}
// Remove the settings dictionary if it is empty.
@@ -722,14 +738,13 @@ void PrefProvider::MigrateObsoletePerhostPref() {
setting = FixObsoleteCookiePromptMode(content_type, setting);
setting = ClickToPlayFixup(content_type, setting);
- // TODO(markusheintz): Maybe this check can be removed.
if (setting != CONTENT_SETTING_DEFAULT) {
- SetContentSetting(
+ SetWebsiteSetting(
pattern,
pattern,
content_type,
"",
- setting);
+ Value::CreateIntegerValue(setting));
}
}
}
@@ -746,11 +761,12 @@ void PrefProvider::MigrateObsoletePopupsPref() {
i != whitelist_pref->end(); ++i) {
std::string host;
(*i)->GetAsString(&host);
- SetContentSetting(ContentSettingsPattern::FromString(host),
+ SetWebsiteSetting(ContentSettingsPattern::FromString(host),
ContentSettingsPattern::FromString(host),
CONTENT_SETTINGS_TYPE_POPUPS,
"",
- CONTENT_SETTING_ALLOW);
+ Value::CreateIntegerValue(
+ CONTENT_SETTING_ALLOW));
}
prefs_->ClearPref(prefs::kPopupWhitelistedHosts);
}
@@ -931,9 +947,9 @@ void PrefProvider::MigrateObsoleteGeolocationPref() {
GURL secondary_url(secondary_key);
DCHECK(secondary_url.is_valid());
- int setting_value;
- found = requesting_origin_settings->GetIntegerWithoutPathExpansion(
- secondary_key, &setting_value);
+ base::Value* value = NULL;
+ found = requesting_origin_settings->GetWithoutPathExpansion(
+ secondary_key, &value);
DCHECK(found);
ContentSettingsPattern primary_pattern =
@@ -946,7 +962,7 @@ void PrefProvider::MigrateObsoleteGeolocationPref() {
secondary_pattern,
CONTENT_SETTINGS_TYPE_GEOLOCATION,
std::string(),
- IntToContentSetting(setting_value),
+ value,
pattern_pairs_settings);
}
}
@@ -975,11 +991,13 @@ void PrefProvider::MigrateObsoleteNotificationsPrefs() {
ContentSettingsPattern primary_pattern =
ContentSettingsPattern::FromURLNoWildcard(GURL(url_string));
DCHECK(primary_pattern.IsValid());
+ scoped_ptr<base::Value> value(
+ Value::CreateIntegerValue(CONTENT_SETTING_ALLOW));
UpdatePatternPairsSettings(primary_pattern,
ContentSettingsPattern::Wildcard(),
CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
std::string(),
- CONTENT_SETTING_ALLOW,
+ value.get(),
pattern_pairs_settings);
}
@@ -992,11 +1010,13 @@ void PrefProvider::MigrateObsoleteNotificationsPrefs() {
ContentSettingsPattern primary_pattern =
ContentSettingsPattern::FromURLNoWildcard(GURL(url_string));
DCHECK(primary_pattern.IsValid());
+ scoped_ptr<base::Value> value(
+ Value::CreateIntegerValue(CONTENT_SETTING_BLOCK));
UpdatePatternPairsSettings(primary_pattern,
ContentSettingsPattern::Wildcard(),
CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
std::string(),
- CONTENT_SETTING_BLOCK,
+ value.get(),
pattern_pairs_settings);
}
}

Powered by Google App Engine
This is Rietveld 408576698