Index: components/content_settings/core/browser/content_settings_pref.cc |
diff --git a/components/content_settings/core/browser/content_settings_pref.cc b/components/content_settings/core/browser/content_settings_pref.cc |
index 95d1cd6c87de6e5ba58ee3e6c791d3140f8ffb98..c79c9733d87126e7a457d5a713872af1be04b00d 100644 |
--- a/components/content_settings/core/browser/content_settings_pref.cc |
+++ b/components/content_settings/core/browser/content_settings_pref.cc |
@@ -11,6 +11,8 @@ |
#include "base/prefs/scoped_user_pref_update.h" |
#include "base/strings/string_split.h" |
#include "base/time/clock.h" |
+#include "components/content_settings/core/browser/content_settings_info.h" |
+#include "components/content_settings/core/browser/content_settings_registry.h" |
#include "components/content_settings/core/browser/content_settings_rule.h" |
#include "components/content_settings/core/browser/content_settings_utils.h" |
#include "components/content_settings/core/browser/host_content_settings_map.h" |
@@ -33,6 +35,23 @@ bool SupportsResourceIdentifiers(ContentSettingsType content_type) { |
return content_type == CONTENT_SETTINGS_TYPE_PLUGINS; |
} |
+bool IsValueAllowedForType(const base::Value* value, ContentSettingsType type) { |
+ const content_settings::ContentSettingsInfo* info = |
+ content_settings::ContentSettingsRegistry::GetInstance()->Get(type); |
+ if (info) { |
+ int setting; |
+ if (!value->GetAsInteger(&setting)) |
+ return false; |
+ if (setting == CONTENT_SETTING_DEFAULT) |
+ return false; |
+ return info->IsSettingValid(IntToContentSetting(setting)); |
+ } |
+ |
+ // TODO(raymes): We should permit different types of base::Value for |
+ // website settings. |
+ return value->GetType() == base::Value::TYPE_DICTIONARY; |
+} |
+ |
} // namespace |
namespace content_settings { |
@@ -78,6 +97,7 @@ bool ContentSettingsPref::SetWebsiteSetting( |
const ContentSettingsPattern& secondary_pattern, |
const ResourceIdentifier& resource_identifier, |
base::Value* in_value) { |
+ DCHECK(!in_value || IsValueAllowedForType(in_value, content_type_)); |
DCHECK(thread_checker_.CalledOnValidThread()); |
DCHECK(prefs_); |
DCHECK(primary_pattern != ContentSettingsPattern::Wildcard() || |
@@ -303,8 +323,7 @@ void ContentSettingsPref::ReadContentSettingsFromPref() { |
settings_dictionary->GetWithoutPathExpansion(kSettingPath, &value); |
if (value) { |
- DCHECK( |
- HostContentSettingsMap::IsValueAllowedForType(value, content_type_)); |
+ DCHECK(IsValueAllowedForType(value, content_type_)); |
value_map_.SetValue(pattern_pair.first, |
pattern_pair.second, |
content_type_, |