summaryrefslogtreecommitdiffstats
path: root/chrome/browser/pref_service.cc
diff options
context:
space:
mode:
authorskrul@chromium.org <skrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-02 17:36:18 +0000
committerskrul@chromium.org <skrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-02 17:36:18 +0000
commitecde2747b368a859e01614c7894fca25f670f1e5 (patch)
treedc4f54c2601f376cb60d0a45547cf85b27ee35c0 /chrome/browser/pref_service.cc
parent585d1c413d6316fc0e0be535f9eafb74ab4d0236 (diff)
downloadchromium_src-ecde2747b368a859e01614c7894fca25f670f1e5.zip
chromium_src-ecde2747b368a859e01614c7894fca25f670f1e5.tar.gz
chromium_src-ecde2747b368a859e01614c7894fca25f670f1e5.tar.bz2
Add a bunch of preferences to sync.
This includes a fix for not crashing when we encounter a preference that is not registered. BUG=39958 Review URL: http://codereview.chromium.org/1571006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@43497 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/pref_service.cc')
-rw-r--r--chrome/browser/pref_service.cc13
1 files changed, 13 insertions, 0 deletions
diff --git a/chrome/browser/pref_service.cc b/chrome/browser/pref_service.cc
index 6abfd0f..d30b544 100644
--- a/chrome/browser/pref_service.cc
+++ b/chrome/browser/pref_service.cc
@@ -407,6 +407,19 @@ void PrefService::Set(const wchar_t* path, const Value& value) {
NOTREACHED() << "Trying to write an unregistered pref: " << path;
return;
}
+
+ // Allow dictionary and list types to be set to null.
+ if (value.GetType() == Value::TYPE_NULL &&
+ (pref->type() == Value::TYPE_DICTIONARY ||
+ pref->type() == Value::TYPE_LIST)) {
+ scoped_ptr<Value> old_value(GetPrefCopy(path));
+ if (!old_value->Equals(&value)) {
+ persistent_->Remove(path, NULL);
+ FireObservers(path);
+ }
+ return;
+ }
+
if (pref->type() != value.GetType()) {
NOTREACHED() << "Wrong type for Set: " << path;
}