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..4f3ff13d1fc88cd604fb249f8b3c719188f027f2 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(); |
@@ -40,7 +42,7 @@ bool FailedDataTypesHandler::UpdateFailedDataTypes(const TypeErrorMap& errors) { |
NOTREACHED(); |
break; |
case syncer::SyncError::UNRECOVERABLE_ERROR: |
- unrecoverable_errors_.insert(*iter); |
+ unrecoverable_error_ = iter->second; |
break; |
case syncer::SyncError::DATATYPE_ERROR: |
case syncer::SyncError::DATATYPE_POLICY_ERROR: |
@@ -61,7 +63,7 @@ bool FailedDataTypesHandler::UpdateFailedDataTypes(const TypeErrorMap& errors) { |
} |
void FailedDataTypesHandler::Reset() { |
- unrecoverable_errors_.clear(); |
+ unrecoverable_error_ = syncer::SyncError(); |
data_type_errors_.clear(); |
crypto_errors_.clear(); |
persistence_errors_.clear(); |
@@ -91,11 +93,12 @@ 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()); |
+ if (unrecoverable_error_.IsSet()) |
+ result[unrecoverable_error_.model_type()] = unrecoverable_error_; |
return result; |
} |
@@ -108,7 +111,9 @@ syncer::ModelTypeSet FailedDataTypesHandler::GetFailedTypes() const { |
syncer::ModelTypeSet FailedDataTypesHandler::GetFatalErrorTypes() |
const { |
- syncer::ModelTypeSet result = GetTypesFromErrorMap(unrecoverable_errors_); |
+ syncer::ModelTypeSet result; |
+ if (unrecoverable_error_.IsSet()) |
+ result.Put(unrecoverable_error_.model_type()); |
result.PutAll(GetTypesFromErrorMap(data_type_errors_)); |
return result; |
} |
@@ -128,10 +133,14 @@ syncer::ModelTypeSet FailedDataTypesHandler::GetUnreadyErrorTypes() const { |
return result; |
} |
+syncer::SyncError FailedDataTypesHandler::GetUnrecoverableError() const { |
+ return unrecoverable_error_; |
+} |
+ |
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_error_.IsSet() || |
!data_type_errors_.empty() || |
!crypto_errors_.empty(); |
} |