| 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 d1d17a316c98e57affcaeb935db87ad3ad2715dd..93f5aed1d011ca0c3c19d46079ebcb7f89c62b70 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() {
|
|
|