diff options
author | markusheintz@chromium.org <markusheintz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-24 10:50:41 +0000 |
---|---|---|
committer | markusheintz@chromium.org <markusheintz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-24 10:50:41 +0000 |
commit | d266ae08c3472b66d10d2852650b2af64628b110 (patch) | |
tree | a7033567267266bdc4b147279605f5854dbe43e5 /chrome/browser | |
parent | 35785498c50f575479c8d890ec154e215ee23bff (diff) | |
download | chromium_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.cc | 31 |
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() { |