diff options
author | skrul@chromium.org <skrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-02 17:36:18 +0000 |
---|---|---|
committer | skrul@chromium.org <skrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-02 17:36:18 +0000 |
commit | ecde2747b368a859e01614c7894fca25f670f1e5 (patch) | |
tree | dc4f54c2601f376cb60d0a45547cf85b27ee35c0 /chrome/browser/pref_service.cc | |
parent | 585d1c413d6316fc0e0be535f9eafb74ab4d0236 (diff) | |
download | chromium_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.cc | 13 |
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; } |