Index: trunk/src/components/sync_driver/generic_change_processor.cc |
=================================================================== |
--- trunk/src/components/sync_driver/generic_change_processor.cc (revision 289111) |
+++ trunk/src/components/sync_driver/generic_change_processor.cc (working copy) |
@@ -144,13 +144,10 @@ |
// Need to load specifics from node. |
syncer::ReadNode read_node(trans); |
if (read_node.InitByIdLookup(it->id) != syncer::BaseNode::INIT_OK) { |
- syncer::SyncError error( |
+ error_handler()->OnSingleDatatypeUnrecoverableError( |
FROM_HERE, |
- syncer::SyncError::DATATYPE_ERROR, |
"Failed to look up data for received change with id " + |
- base::Int64ToString(it->id), |
- syncer::GetModelTypeFromSpecifics(it->specifics)); |
- error_handler()->OnSingleDataTypeUnrecoverableError(error); |
+ base::Int64ToString(it->id)); |
return; |
} |
syncer_changes_.push_back(syncer::SyncChange( |
@@ -171,14 +168,17 @@ |
syncer::SyncError::DATATYPE_ERROR, |
"Local service destroyed.", |
type); |
- error_handler()->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler()->OnSingleDatatypeUnrecoverableError(error.location(), |
+ error.message()); |
return; |
} |
syncer::SyncError error = local_service_->ProcessSyncChanges(FROM_HERE, |
syncer_changes_); |
syncer_changes_.clear(); |
- if (error.IsSet()) |
- error_handler()->OnSingleDataTypeUnrecoverableError(error); |
+ if (error.IsSet()) { |
+ error_handler()->OnSingleDatatypeUnrecoverableError( |
+ error.location(), error.message()); |
+ } |
} |
syncer::SyncDataList GenericChangeProcessor::GetAllSyncData( |
@@ -285,8 +285,9 @@ |
namespace { |
+// TODO(isherman): Investigating http://crbug.com/121592 |
// WARNING: this code is sensitive to compiler optimizations. Be careful |
-// modifying any code around an OnSingleDataTypeUnrecoverableError call, else |
+// modifying any code around an OnSingleDatatypeUnrecoverableError call, else |
// the compiler attempts to merge it with other calls, losing useful information |
// in breakpad uploads. |
syncer::SyncError LogLookupFailure( |
@@ -302,21 +303,24 @@ |
error_prefix + |
"could not find entry matching the lookup criteria.", |
type); |
- error_handler->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ error.message()); |
LOG(ERROR) << "Delete: Bad entry."; |
return error; |
} |
case syncer::BaseNode::INIT_FAILED_ENTRY_IS_DEL: { |
syncer::SyncError error; |
error.Reset(from_here, error_prefix + "entry is already deleted.", type); |
- error_handler->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ error.message()); |
LOG(ERROR) << "Delete: Deleted entry."; |
return error; |
} |
case syncer::BaseNode::INIT_FAILED_DECRYPT_IF_NECESSARY: { |
syncer::SyncError error; |
error.Reset(from_here, error_prefix + "unable to decrypt", type); |
- error_handler->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ error.message()); |
LOG(ERROR) << "Delete: Undecryptable entry."; |
return error; |
} |
@@ -325,7 +329,8 @@ |
error.Reset(from_here, |
error_prefix + "a precondition was not met for calling init.", |
type); |
- error_handler->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ error.message()); |
LOG(ERROR) << "Delete: Failed precondition."; |
return error; |
} |
@@ -333,7 +338,8 @@ |
syncer::SyncError error; |
// Should have listed all the possible error cases above. |
error.Reset(from_here, error_prefix + "unknown error", type); |
- error_handler->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ error.message()); |
LOG(ERROR) << "Delete: Unknown error."; |
return error; |
} |
@@ -355,7 +361,8 @@ |
"Failed to delete " + type_str + " node. Local data, empty tag. " + |
change.location().ToString(), |
type); |
- error_handler->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler->OnSingleDatatypeUnrecoverableError(error.location(), |
+ error.message()); |
NOTREACHED(); |
return error; |
} |
@@ -457,7 +464,8 @@ |
"Received unset SyncChange in the change processor, " + |
change.location().ToString(), |
type); |
- error_handler()->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ error.message()); |
NOTREACHED(); |
LOG(ERROR) << "Unset sync change."; |
return error; |
@@ -472,7 +480,7 @@ |
} |
// WARNING: this code is sensitive to compiler optimizations. Be careful |
-// modifying any code around an OnSingleDataTypeUnrecoverableError call, else |
+// modifying any code around an OnSingleDatatypeUnrecoverableError call, else |
// the compiler attempts to merge it with other calls, losing useful information |
// in breakpad uploads. |
syncer::SyncError GenericChangeProcessor::HandleActionAdd( |
@@ -492,7 +500,8 @@ |
syncer::SyncError::DATATYPE_ERROR, |
"Failed to look up root node for type " + type_str, |
type); |
- error_handler()->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ error.message()); |
NOTREACHED(); |
LOG(ERROR) << "Create: no root node."; |
return error; |
@@ -507,21 +516,24 @@ |
case syncer::WriteNode::INIT_FAILED_EMPTY_TAG: { |
syncer::SyncError error; |
error.Reset(FROM_HERE, error_prefix + "empty tag", type); |
- error_handler()->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ error.message()); |
LOG(ERROR) << "Create: Empty tag."; |
return error; |
} |
case syncer::WriteNode::INIT_FAILED_ENTRY_ALREADY_EXISTS: { |
syncer::SyncError error; |
error.Reset(FROM_HERE, error_prefix + "entry already exists", type); |
- error_handler()->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ error.message()); |
LOG(ERROR) << "Create: Entry exists."; |
return error; |
} |
case syncer::WriteNode::INIT_FAILED_COULD_NOT_CREATE_ENTRY: { |
syncer::SyncError error; |
error.Reset(FROM_HERE, error_prefix + "failed to create entry", type); |
- error_handler()->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ error.message()); |
LOG(ERROR) << "Create: Could not create entry."; |
return error; |
} |
@@ -529,14 +541,16 @@ |
syncer::SyncError error; |
error.Reset( |
FROM_HERE, error_prefix + "failed to set predecessor", type); |
- error_handler()->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ error.message()); |
LOG(ERROR) << "Create: Bad predecessor."; |
return error; |
} |
default: { |
syncer::SyncError error; |
error.Reset(FROM_HERE, error_prefix + "unknown error", type); |
- error_handler()->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ error.message()); |
LOG(ERROR) << "Create: Unknown error."; |
return error; |
} |
@@ -561,7 +575,7 @@ |
return syncer::SyncError(); |
} |
// WARNING: this code is sensitive to compiler optimizations. Be careful |
-// modifying any code around an OnSingleDataTypeUnrecoverableError call, else |
+// modifying any code around an OnSingleDatatypeUnrecoverableError call, else |
// the compiler attempts to merge it with other calls, losing useful information |
// in breakpad uploads. |
syncer::SyncError GenericChangeProcessor::HandleActionUpdate( |
@@ -583,19 +597,22 @@ |
if (result == syncer::BaseNode::INIT_FAILED_PRECONDITION) { |
syncer::SyncError error; |
error.Reset(FROM_HERE, error_prefix + "empty tag", type); |
- error_handler()->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ error.message()); |
LOG(ERROR) << "Update: Empty tag."; |
return error; |
} else if (result == syncer::BaseNode::INIT_FAILED_ENTRY_NOT_GOOD) { |
syncer::SyncError error; |
error.Reset(FROM_HERE, error_prefix + "bad entry", type); |
- error_handler()->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ error.message()); |
LOG(ERROR) << "Update: bad entry."; |
return error; |
} else if (result == syncer::BaseNode::INIT_FAILED_ENTRY_IS_DEL) { |
syncer::SyncError error; |
error.Reset(FROM_HERE, error_prefix + "deleted entry", type); |
- error_handler()->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ error.message()); |
LOG(ERROR) << "Update: deleted entry."; |
return error; |
} else { |
@@ -613,7 +630,8 @@ |
"nigori mismatch for " + |
type_str + ".", |
type); |
- error_handler()->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ error.message()); |
LOG(ERROR) << "Update: encr case 1."; |
return error; |
} else if (agreement && can_decrypt) { |
@@ -623,7 +641,8 @@ |
"and the nigori matches (?!) for " + |
type_str + ".", |
type); |
- error_handler()->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ error.message()); |
LOG(ERROR) << "Update: encr case 2."; |
return error; |
} else if (agreement) { |
@@ -633,7 +652,8 @@ |
"the nigori matches for " + |
type_str + ".", |
type); |
- error_handler()->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ error.message()); |
LOG(ERROR) << "Update: encr case 3."; |
return error; |
} else { |
@@ -643,7 +663,8 @@ |
"(?!) and nigori mismatch for " + |
type_str + ".", |
type); |
- error_handler()->OnSingleDataTypeUnrecoverableError(error); |
+ error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE, |
+ error.message()); |
LOG(ERROR) << "Update: encr case 4."; |
return error; |
} |