Index: chrome/browser/sync/engine/syncer_util.cc |
diff --git a/chrome/browser/sync/engine/syncer_util.cc b/chrome/browser/sync/engine/syncer_util.cc |
index bf1456e662da5ebf12deedafce8c683dbf9486d9..e79bb5e98828291b098b295913e0ef16e541f03a 100644 |
--- a/chrome/browser/sync/engine/syncer_util.cc |
+++ b/chrome/browser/sync/engine/syncer_util.cc |
@@ -311,7 +311,7 @@ UpdateAttemptResponse SyncerUtil::AttemptToUpdateEntry( |
// passphrase may not arrive within this GetUpdates, we can't just return |
// conflict, else we try to perform normal conflict resolution prematurely or |
// the syncer may get stuck. As such, we return CONFLICT_ENCRYPTION, which is |
- // treated as a non-blocking conflict. See the description in syncer_types.h. |
+ // treated as an unresolvable conflict. See the description in syncer_types.h. |
// This prevents any unsynced changes from commiting and postpones conflict |
// resolution until all data can be decrypted. |
if (specifics.has_encrypted() && |
@@ -333,11 +333,6 @@ UpdateAttemptResponse SyncerUtil::AttemptToUpdateEntry( |
} |
} |
- if (entry->Get(IS_UNSYNCED)) { |
- DVLOG(1) << "Skipping update, returning conflict for: " << id |
- << " ; it's unsynced."; |
- return CONFLICT; |
- } |
if (!entry->Get(SERVER_IS_DEL)) { |
syncable::Id new_parent = entry->Get(SERVER_PARENT_ID); |
Entry parent(trans, GET_BY_ID, new_parent); |
@@ -348,13 +343,13 @@ UpdateAttemptResponse SyncerUtil::AttemptToUpdateEntry( |
// different ways we deal with it once here to reduce the amount of code and |
// potential errors. |
if (!parent.good() || parent.Get(IS_DEL) || !parent.Get(IS_DIR)) { |
- return CONFLICT; |
+ return CONFLICT_HIERARCHY; |
} |
if (entry->Get(PARENT_ID) != new_parent) { |
if (!entry->Get(IS_DEL) && !IsLegalNewParent(trans, id, new_parent)) { |
DVLOG(1) << "Not updating item " << id |
<< ", illegal new parent (would cause loop)."; |
- return CONFLICT; |
+ return CONFLICT_HIERARCHY; |
} |
} |
} else if (entry->Get(IS_DIR)) { |
@@ -364,10 +359,16 @@ UpdateAttemptResponse SyncerUtil::AttemptToUpdateEntry( |
// If we have still-existing children, then we need to deal with |
// them before we can process this change. |
DVLOG(1) << "Not deleting directory; it's not empty " << *entry; |
- return CONFLICT; |
+ return CONFLICT_HIERARCHY; |
} |
} |
+ if (entry->Get(IS_UNSYNCED)) { |
+ DVLOG(1) << "Skipping update, returning conflict for: " << id |
+ << " ; it's unsynced."; |
+ return CONFLICT_SIMPLE; |
+ } |
+ |
if (specifics.has_encrypted()) { |
DVLOG(2) << "Received a decryptable " |
<< syncable::ModelTypeToString(entry->GetServerModelType()) |