| Index: chrome/browser/content_settings/content_settings_policy_provider.cc
|
| diff --git a/chrome/browser/content_settings/content_settings_policy_provider.cc b/chrome/browser/content_settings/content_settings_policy_provider.cc
|
| index 13198e50137bbaacecc0a940411429d89ff47dc8..e747c28b73ddf121c058cba2f15528f6c544b450 100644
|
| --- a/chrome/browser/content_settings/content_settings_policy_provider.cc
|
| +++ b/chrome/browser/content_settings/content_settings_policy_provider.cc
|
| @@ -353,11 +353,12 @@ void PolicyProvider::GetAutoSelectCertificateSettingsFromPreferences(
|
| scoped_ptr<base::DictionaryValue> pattern_filter_pair(
|
| static_cast<base::DictionaryValue*>(value.release()));
|
| std::string pattern_str;
|
| - bool pattern_read = pattern_filter_pair->GetString("pattern", &pattern_str);
|
| - scoped_ptr<base::Value> cert_filter;
|
| - bool filter_read = pattern_filter_pair->Remove("filter", &cert_filter);
|
| - if (!pattern_read || !filter_read ||
|
| - !cert_filter->IsType(base::Value::TYPE_DICTIONARY)) {
|
| + bool pattern_read = pattern_filter_pair->GetStringWithoutPathExpansion(
|
| + "pattern", &pattern_str);
|
| + base::DictionaryValue* cert_filter = NULL;
|
| + pattern_filter_pair->GetDictionaryWithoutPathExpansion("filter",
|
| + &cert_filter);
|
| + if (!pattern_read || !cert_filter) {
|
| VLOG(1) << "Ignoring invalid certificate auto select setting. Reason:"
|
| " Missing pattern or filter.";
|
| continue;
|
| @@ -372,11 +373,13 @@ void PolicyProvider::GetAutoSelectCertificateSettingsFromPreferences(
|
| continue;
|
| }
|
|
|
| + // Don't pass removed values from |value|, because base::Values read with
|
| + // JSONReader use a shared string buffer. Instead, DeepCopy here.
|
| value_map->SetValue(pattern,
|
| ContentSettingsPattern::Wildcard(),
|
| CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE,
|
| std::string(),
|
| - cert_filter.release());
|
| + cert_filter->DeepCopy());
|
| }
|
| }
|
|
|
|
|