Index: chrome/browser/sync/glue/generic_change_processor.cc |
diff --git a/chrome/browser/sync/glue/generic_change_processor.cc b/chrome/browser/sync/glue/generic_change_processor.cc |
index a8accd94598001ab029a78b492bae596508033a8..771aa488d47c8b1281c9bffeedc5ea73ea4d70ac 100644 |
--- a/chrome/browser/sync/glue/generic_change_processor.cc |
+++ b/chrome/browser/sync/glue/generic_change_processor.cc |
@@ -191,16 +191,43 @@ SyncError GenericChangeProcessor::ProcessSyncChanges( |
error.message()); |
return error; |
} |
- if (!sync_node.InitUniqueByCreation(change.sync_data().GetDataType(), |
+ sync_api::WriteNode::InitUniqueByCreationResult result = |
+ sync_node.InitUniqueByCreation(change.sync_data().GetDataType(), |
root_node, |
- change.sync_data().GetTag())) { |
+ change.sync_data().GetTag()); |
+ if (result != sync_api::WriteNode::INIT_SUCCESS) { |
NOTREACHED(); |
- SyncError error(FROM_HERE, |
- "Failed to create " + type_str + " node.", |
+ std::string error_prefix = "Failed to create " + type_str + " node: "; |
+ SyncError error; |
+ switch (result) { |
+ case sync_api::WriteNode::INIT_FAILED_EMPTY_TAG: |
+ error.Reset(FROM_HERE, error_prefix + "empty tag", type); |
+ error_handler()->OnSingleDatatypeUnrecoverableError( |
+ error.location(), error.message()); |
+ return error; |
+ case sync_api::WriteNode::INIT_FAILED_ENTRY_ALREADY_EXISTS: |
+ error.Reset(FROM_HERE, error_prefix + "entry already exists", type); |
+ error_handler()->OnSingleDatatypeUnrecoverableError( |
+ error.location(), error.message()); |
+ return error; |
+ case sync_api::WriteNode::INIT_FAILED_COULD_NOT_CREATE_ENTRY: |
+ error.Reset(FROM_HERE, error_prefix + "failed to create entry", |
type); |
- error_handler()->OnSingleDatatypeUnrecoverableError(error.location(), |
- error.message()); |
- return error; |
+ error_handler()->OnSingleDatatypeUnrecoverableError( |
+ error.location(), error.message()); |
+ return error; |
+ case sync_api::WriteNode::INIT_FAILED_SET_PREDECESSOR: |
+ error.Reset(FROM_HERE, error_prefix + "failed to set predecessor", |
+ type); |
+ error_handler()->OnSingleDatatypeUnrecoverableError( |
+ error.location(), error.message()); |
+ return error; |
+ default: |
+ error.Reset(FROM_HERE, error_prefix + "unknown error", type); |
+ error_handler()->OnSingleDatatypeUnrecoverableError( |
+ error.location(), error.message()); |
+ return error; |
+ } |
} |
sync_node.SetTitle(UTF8ToWide(change.sync_data().GetTitle())); |
sync_node.SetEntitySpecifics(change.sync_data().GetSpecifics()); |