summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authormarkusheintz@chromium.org <markusheintz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-24 10:50:41 +0000
committermarkusheintz@chromium.org <markusheintz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-24 10:50:41 +0000
commitd266ae08c3472b66d10d2852650b2af64628b110 (patch)
treea7033567267266bdc4b147279605f5854dbe43e5 /chrome/browser
parent35785498c50f575479c8d890ec154e215ee23bff (diff)
downloadchromium_src-d266ae08c3472b66d10d2852650b2af64628b110.zip
chromium_src-d266ae08c3472b66d10d2852650b2af64628b110.tar.gz
chromium_src-d266ae08c3472b66d10d2852650b2af64628b110.tar.bz2
Remove corrupted values from obsolete geolocation preference.
BUG=103272 TEST=No DCHECK, No Crash Review URL: http://codereview.chromium.org/8676017 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@111518 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r--chrome/browser/content_settings/content_settings_pref_provider.cc31
1 files changed, 30 insertions, 1 deletions
diff --git a/chrome/browser/content_settings/content_settings_pref_provider.cc b/chrome/browser/content_settings/content_settings_pref_provider.cc
index d1d17a3..93f5aed 100644
--- a/chrome/browser/content_settings/content_settings_pref_provider.cc
+++ b/chrome/browser/content_settings/content_settings_pref_provider.cc
@@ -592,6 +592,13 @@ void PrefProvider::UpdateObsoleteGeolocationPref(
if (!prefs_)
return;
+ // Ignore settings with wildcard patterns as they are not supported by the
+ // obsolete preference.
+ if (primary_pattern == ContentSettingsPattern::Wildcard() ||
+ secondary_pattern == ContentSettingsPattern::Wildcard()) {
+ return;
+ }
+
const GURL requesting_origin(primary_pattern.ToString());
const GURL embedding_origin(secondary_pattern.ToString());
DCHECK(requesting_origin.is_valid() && embedding_origin.is_valid());
@@ -926,6 +933,8 @@ void PrefProvider::MigrateObsoleteGeolocationPref() {
const DictionaryValue* geolocation_settings =
prefs_->GetDictionary(prefs::kGeolocationContentSettings);
+
+ std::vector<std::pair<std::string, std::string> > corrupted_keys;
for (DictionaryValue::key_iterator i =
geolocation_settings->begin_keys();
i != geolocation_settings->end_keys();
@@ -945,7 +954,11 @@ void PrefProvider::MigrateObsoleteGeolocationPref() {
++j) {
const std::string& secondary_key(*j);
GURL secondary_url(secondary_key);
- DCHECK(secondary_url.is_valid());
+ // Save corrupted keys to remove them later.
+ if (!secondary_url.is_valid()) {
+ corrupted_keys.push_back(std::make_pair(primary_key, secondary_key));
+ continue;
+ }
base::Value* value = NULL;
found = requesting_origin_settings->GetWithoutPathExpansion(
@@ -966,6 +979,22 @@ void PrefProvider::MigrateObsoleteGeolocationPref() {
pattern_pairs_settings);
}
}
+
+ // Remove corrupted keys.
+ DictionaryPrefUpdate update_geo_settings(
+ prefs_, prefs::kGeolocationContentSettings);
+ base::DictionaryValue* geo_dict = update_geo_settings.Get();
+ std::vector<std::pair<std::string, std::string> >::iterator key_pair;
+ for (key_pair = corrupted_keys.begin();
+ key_pair != corrupted_keys.end();
+ ++key_pair) {
+ base::DictionaryValue* dict;
+ bool found = geo_dict->GetDictionaryWithoutPathExpansion(
+ key_pair->first, &dict);
+ DCHECK(found);
+ DCHECK(dict->HasKey(key_pair->second));
+ dict->RemoveWithoutPathExpansion(key_pair->second, NULL);
+ }
}
void PrefProvider::MigrateObsoleteNotificationsPrefs() {