summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authormnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-27 13:06:42 +0000
committermnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-27 13:06:42 +0000
commite67ce755d9c314743abf9a2227a868282b1bd1a9 (patch)
tree0c1d104716c34a566dabb186b236feb0c2113a60 /chrome
parent934c6e5446780bf26b8ee9fd171aa69db4b0f253 (diff)
downloadchromium_src-e67ce755d9c314743abf9a2227a868282b1bd1a9.zip
chromium_src-e67ce755d9c314743abf9a2227a868282b1bd1a9.tar.gz
chromium_src-e67ce755d9c314743abf9a2227a868282b1bd1a9.tar.bz2
Handle sync values of wrong type more graceful.
Clear prefs that the server reports TYPE_NULL values for and log a warning if the type is off otherwise. BUG=none TEST=compiles and passes tests Review URL: http://codereview.chromium.org/6288016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@72786 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/sync/glue/preference_model_associator.cc9
1 files changed, 8 insertions, 1 deletions
diff --git a/chrome/browser/sync/glue/preference_model_associator.cc b/chrome/browser/sync/glue/preference_model_associator.cc
index be0345e..dd9cb96 100644
--- a/chrome/browser/sync/glue/preference_model_associator.cc
+++ b/chrome/browser/sync/glue/preference_model_associator.cc
@@ -73,8 +73,15 @@ bool PreferenceModelAssociator::InitPrefNodeAndAssociate(
// Update the local preference based on what we got from the
// sync server.
- if (!pref->GetValue()->Equals(new_value.get()))
+ if (new_value->IsType(Value::TYPE_NULL)) {
+ pref_service->ClearPref(pref_name.c_str());
+ } else if (!new_value->IsType(pref->GetType())) {
+ LOG(WARNING) << "Synced value for " << preference.name()
+ << " is of type " << new_value->GetType()
+ << " which doesn't match pref type " << pref->GetType();
+ } else if (!pref->GetValue()->Equals(new_value.get())) {
pref_service->Set(pref_name.c_str(), *new_value);
+ }
AfterUpdateOperations(pref_name);