| 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();
|
| }
|
|
|