summaryrefslogtreecommitdiffstats
path: root/chrome/browser/sync/glue/generic_change_processor.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/sync/glue/generic_change_processor.cc')
-rw-r--r--chrome/browser/sync/glue/generic_change_processor.cc41
1 files changed, 34 insertions, 7 deletions
diff --git a/chrome/browser/sync/glue/generic_change_processor.cc b/chrome/browser/sync/glue/generic_change_processor.cc
index 0c9ac04..3cde180 100644
--- a/chrome/browser/sync/glue/generic_change_processor.cc
+++ b/chrome/browser/sync/glue/generic_change_processor.cc
@@ -253,16 +253,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());