Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(60)

Side by Side Diff: chrome/browser/sync/glue/preference_model_associator.cc

Issue 6288016: Handle sync values of wrong type more graceful (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Clear pref if it's TYPE_NULL Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/sync/glue/preference_model_associator.h" 5 #include "chrome/browser/sync/glue/preference_model_associator.h"
6 6
7 #include "base/json/json_reader.h" 7 #include "base/json/json_reader.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 LOG(ERROR) << "Failed to deserialize preference value: " 66 LOG(ERROR) << "Failed to deserialize preference value: "
67 << reader.GetErrorMessage(); 67 << reader.GetErrorMessage();
68 return false; 68 return false;
69 } 69 }
70 70
71 // Merge the server value of this preference with the local value. 71 // Merge the server value of this preference with the local value.
72 scoped_ptr<Value> new_value(MergePreference(*pref, *value)); 72 scoped_ptr<Value> new_value(MergePreference(*pref, *value));
73 73
74 // Update the local preference based on what we got from the 74 // Update the local preference based on what we got from the
75 // sync server. 75 // sync server.
76 if (!pref->GetValue()->Equals(new_value.get())) 76 if (new_value->IsType(Value::TYPE_NULL)) {
77 pref_service->ClearPref(pref_name.c_str());
78 } else if (!new_value->IsType(pref->GetType())) {
79 LOG(WARNING) << "Synced value for " << preference.name()
80 << " is of type " << new_value->GetType()
81 << " which doesn't match pref type " << pref->GetType();
82 } else if (!pref->GetValue()->Equals(new_value.get())) {
77 pref_service->Set(pref_name.c_str(), *new_value); 83 pref_service->Set(pref_name.c_str(), *new_value);
84 }
78 85
79 AfterUpdateOperations(pref_name); 86 AfterUpdateOperations(pref_name);
80 87
81 // If the merge resulted in an updated value, write it back to 88 // If the merge resulted in an updated value, write it back to
82 // the sync node. 89 // the sync node.
83 if (!value->Equals(new_value.get()) && 90 if (!value->Equals(new_value.get()) &&
84 !WritePreferenceToNode(pref->name(), *new_value, &node)) 91 !WritePreferenceToNode(pref->name(), *new_value, &node))
85 return false; 92 return false;
86 } 93 }
87 Associate(pref, node.GetId()); 94 Associate(pref, node.GetId());
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 // notification to update the UI. 320 // notification to update the UI.
314 if (0 == pref_name.compare(prefs::kShowBookmarkBar)) { 321 if (0 == pref_name.compare(prefs::kShowBookmarkBar)) {
315 NotificationService::current()->Notify( 322 NotificationService::current()->Notify(
316 NotificationType::BOOKMARK_BAR_VISIBILITY_PREF_CHANGED, 323 NotificationType::BOOKMARK_BAR_VISIBILITY_PREF_CHANGED,
317 Source<PreferenceModelAssociator>(this), 324 Source<PreferenceModelAssociator>(this),
318 NotificationService::NoDetails()); 325 NotificationService::NoDetails());
319 } 326 }
320 } 327 }
321 328
322 } // namespace browser_sync 329 } // namespace browser_sync
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698