Index: chrome/browser/content_settings/content_settings_default_provider.cc |
diff --git a/chrome/browser/content_settings/content_settings_default_provider.cc b/chrome/browser/content_settings/content_settings_default_provider.cc |
index 8c44d8cabbb9fae94409e9ffd5d9069a7a4ca01d..15b31de6d5bba2983be216e8b462d2b9861a7ee8 100644 |
--- a/chrome/browser/content_settings/content_settings_default_provider.cc |
+++ b/chrome/browser/content_settings/content_settings_default_provider.cc |
@@ -134,7 +134,7 @@ bool DefaultProvider::SetWebsiteSetting( |
const ContentSettingsPattern& secondary_pattern, |
ContentSettingsType content_type, |
const ResourceIdentifier& resource_identifier, |
- Value* value) { |
+ Value* in_value) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
DCHECK(prefs_); |
@@ -149,12 +149,15 @@ bool DefaultProvider::SetWebsiteSetting( |
if (is_incognito_) |
return false; |
+ // Put |in_value| in a scoped pointer to ensure that it gets cleaned up |
+ // properly if we don't pass on the ownership. |
+ scoped_ptr<base::Value> value(in_value); |
{ |
AutoReset<bool> auto_reset(&updating_preferences_, true); |
// Keep the obsolete pref in sync as long as backwards compatibility is |
// required. This is required to keep sync working correctly. |
if (content_type == CONTENT_SETTINGS_TYPE_GEOLOCATION) { |
- if (value) { |
+ if (value.get()) { |
prefs_->Set(prefs::kGeolocationDefaultContentSetting, *value); |
} else { |
prefs_->ClearPref(prefs::kGeolocationDefaultContentSetting); |
@@ -169,8 +172,8 @@ bool DefaultProvider::SetWebsiteSetting( |
DictionaryPrefUpdate update(prefs_, prefs::kDefaultContentSettings); |
DictionaryValue* default_settings_dictionary = update.Get(); |
base::AutoLock lock(lock_); |
- if (value == NULL || |
- ValueToContentSetting(value) == kDefaultSettings[content_type]) { |
+ if (value.get() == NULL || |
+ ValueToContentSetting(value.get()) == kDefaultSettings[content_type]) { |
// If |value| is NULL we need to reset the default setting the the |
// hardcoded default. |
default_settings_[content_type].reset( |
@@ -184,7 +187,7 @@ bool DefaultProvider::SetWebsiteSetting( |
default_settings_[content_type].reset(value->DeepCopy()); |
// Transfer ownership of |value| to the |default_settings_dictionary|. |
default_settings_dictionary->SetWithoutPathExpansion( |
- GetTypeName(content_type), value); |
+ GetTypeName(content_type), value.release()); |
} |
} |