Index: components/sync_driver/failed_data_types_handler.cc |
diff --git a/components/sync_driver/failed_data_types_handler.cc b/components/sync_driver/failed_data_types_handler.cc |
index cb18febac7f2f30b0abe80b6a4c0dde1a13a6c74..8ee9c1dea6531b27a649af9be3d10e0a18255ff1 100644 |
--- a/components/sync_driver/failed_data_types_handler.cc |
+++ b/components/sync_driver/failed_data_types_handler.cc |
@@ -32,6 +32,8 @@ bool FailedDataTypesHandler::UpdateFailedDataTypes(const TypeErrorMap& errors) { |
if (errors.empty()) |
return false; |
+ DVLOG(1) << "Setting " << errors.size() << " new failed types."; |
+ |
for (TypeErrorMap::const_iterator iter = errors.begin(); iter != errors.end(); |
++iter) { |
syncer::SyncError::ErrorType failure_type = iter->second.error_type(); |
@@ -91,11 +93,11 @@ bool FailedDataTypesHandler::ResetUnreadyErrorFor(syncer::ModelType type) { |
FailedDataTypesHandler::TypeErrorMap FailedDataTypesHandler::GetAllErrors() |
const { |
TypeErrorMap result; |
- result = unrecoverable_errors_; |
result.insert(data_type_errors_.begin(), data_type_errors_.end()); |
result.insert(crypto_errors_.begin(), crypto_errors_.end()); |
result.insert(persistence_errors_.begin(), persistence_errors_.end()); |
result.insert(unready_errors_.begin(), unready_errors_.end()); |
+ result.insert(unrecoverable_errors_.begin(), unrecoverable_errors_.end()); |
return result; |
} |
@@ -108,8 +110,9 @@ syncer::ModelTypeSet FailedDataTypesHandler::GetFailedTypes() const { |
syncer::ModelTypeSet FailedDataTypesHandler::GetFatalErrorTypes() |
const { |
- syncer::ModelTypeSet result = GetTypesFromErrorMap(unrecoverable_errors_); |
+ syncer::ModelTypeSet result; |
result.PutAll(GetTypesFromErrorMap(data_type_errors_)); |
+ result.PutAll(GetTypesFromErrorMap(unrecoverable_errors_)); |
return result; |
} |
@@ -128,10 +131,25 @@ syncer::ModelTypeSet FailedDataTypesHandler::GetUnreadyErrorTypes() const { |
return result; |
} |
+syncer::ModelTypeSet FailedDataTypesHandler::GetUnrecoverableErrorTypes() |
+ const { |
+ syncer::ModelTypeSet result = GetTypesFromErrorMap(unrecoverable_errors_); |
+ return result; |
+} |
+ |
+syncer::SyncError FailedDataTypesHandler::GetUnrecoverableError() const { |
+ // Just return the first one. It is assumed all the unrecoverable errors |
+ // have the same cause. The others are just tracked to know which types |
+ // were involved. |
+ return (unrecoverable_errors_.empty() |
+ ? syncer::SyncError() |
+ : unrecoverable_errors_.begin()->second); |
+} |
+ |
bool FailedDataTypesHandler::AnyFailedDataType() const { |
// Note: persistence errors are not failed types. They just trigger automatic |
// unapply + getupdates, at which point they are associated like normal. |
- return !unrecoverable_errors_.empty() || |
+ return unrecoverable_errors_.empty() || |
!data_type_errors_.empty() || |
!crypto_errors_.empty(); |
} |