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

Unified Diff: sync/engine/conflict_util.cc

Issue 10832286: sync: Introduce control data types (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add ToFullModelTypeSet() function Created 8 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: sync/engine/conflict_util.cc
diff --git a/sync/engine/conflict_util.cc b/sync/engine/conflict_util.cc
new file mode 100644
index 0000000000000000000000000000000000000000..fbb684e5132467f33b39d99a92cd8d7327f710f6
--- /dev/null
+++ b/sync/engine/conflict_util.cc
@@ -0,0 +1,51 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "sync/engine/conflict_util.h"
+
+#include "sync/syncable/mutable_entry.h"
+
+namespace syncer {
+
+using syncable::BASE_VERSION;
+using syncable::IS_UNAPPLIED_UPDATE;
+using syncable::IS_UNSYNCED;
+using syncable::SERVER_VERSION;
+
+using syncable::MutableEntry;
+
+// Allow the server's changes to take precedence.
+// This will take effect during the next ApplyUpdates step.
+void IgnoreLocalChanges(MutableEntry* entry) {
+ DCHECK(entry->Get(IS_UNSYNCED));
+ DCHECK(entry->Get(IS_UNAPPLIED_UPDATE));
+ entry->Put(IS_UNSYNCED, false);
+}
+
+// Overwrite the server with our own value.
+// We will commit our local data, overwriting the server, at the next
+// opportunity.
+void OverwriteServerChanges(MutableEntry* entry) {
+ DCHECK(entry->Get(IS_UNSYNCED));
+ DCHECK(entry->Get(IS_UNAPPLIED_UPDATE));
+ entry->Put(BASE_VERSION, entry->Get(SERVER_VERSION));
+ entry->Put(IS_UNAPPLIED_UPDATE, false);
+}
+
+// Having determined that everything matches, we ignore the non-conflict.
+void IgnoreConflict(MutableEntry* entry) {
+ // If we didn't also unset IS_UNAPPLIED_UPDATE, then we would lose unsynced
+ // positional data from adjacent entries when the server update gets applied
+ // and the item is re-inserted into the PREV_ID/NEXT_ID linked list. This is
+ // primarily an issue because we commit after applying updates, and is most
+ // commonly seen when positional changes are made while a passphrase is
+ // required (and hence there will be many encryption conflicts).
+ DCHECK(entry->Get(IS_UNSYNCED));
+ DCHECK(entry->Get(IS_UNAPPLIED_UPDATE));
+ entry->Put(BASE_VERSION, entry->Get(SERVER_VERSION));
+ entry->Put(IS_UNAPPLIED_UPDATE, false);
+ entry->Put(IS_UNSYNCED, false);
+}
+
+} // namespace syncer

Powered by Google App Engine
This is Rietveld 408576698