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 d185dcddf73b178e5a3a794706c5a39e125fff24..d19fdb3d9489071bc18d2994ef27d89ba87643a4 100644 |
--- a/chrome/browser/content_settings/content_settings_pref_provider.cc |
+++ b/chrome/browser/content_settings/content_settings_pref_provider.cc |
@@ -14,6 +14,7 @@ |
#include "base/metrics/histogram.h" |
#include "chrome/browser/content_settings/content_settings_rule.h" |
#include "chrome/browser/content_settings/content_settings_utils.h" |
+#include "chrome/browser/content_settings/host_content_settings_map.h" |
#include "chrome/browser/prefs/pref_service.h" |
#include "chrome/browser/prefs/scoped_user_pref_update.h" |
#include "chrome/common/chrome_notification_types.h" |
@@ -361,17 +362,33 @@ void PrefProvider::ReadContentSettingsFromPref(bool overwrite) { |
} |
} |
} |
- int setting = CONTENT_SETTING_DEFAULT; |
- if (settings_dictionary->GetIntegerWithoutPathExpansion( |
- GetTypeName(ContentSettingsType(i)), &setting)) { |
- DCHECK_NE(CONTENT_SETTING_DEFAULT, setting); |
- setting = FixObsoleteCookiePromptMode(content_type, |
- ContentSetting(setting)); |
+ Value* value = NULL; |
+ if (HostContentSettingsMap::ContentTypeHasCompoundValue(content_type)) { |
+ DictionaryValue* setting = NULL; |
+ // TODO(xians): Handle the non-dictionary types. |
+ if (settings_dictionary->GetDictionaryWithoutPathExpansion( |
+ GetTypeName(ContentSettingsType(i)), &setting)) { |
+ DCHECK(!setting->empty()); |
+ value = setting->DeepCopy(); |
+ } |
+ } else { |
+ int setting = CONTENT_SETTING_DEFAULT; |
+ if (settings_dictionary->GetIntegerWithoutPathExpansion( |
+ GetTypeName(ContentSettingsType(i)), &setting)) { |
+ DCHECK_NE(CONTENT_SETTING_DEFAULT, setting); |
+ setting = FixObsoleteCookiePromptMode(content_type, |
+ ContentSetting(setting)); |
+ value = Value::CreateIntegerValue(setting); |
+ } |
+ } |
+ |
+ // |value_map_| will take the ownership of |value|. |
+ if (value != NULL) { |
value_map_.SetValue(pattern_pair.first, |
pattern_pair.second, |
content_type, |
ResourceIdentifier(""), |
- Value::CreateIntegerValue(setting)); |
+ value); |
} |
} |
} |