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 bf6dde192d6cb9139f846d3008342360a02ed791..790684447ab79cdbfbe036b086f637696d5ef156 100644 |
--- a/components/sync_driver/failed_data_types_handler.cc |
+++ b/components/sync_driver/failed_data_types_handler.cc |
@@ -38,9 +38,14 @@ bool FailedDataTypesHandler::UpdateFailedDataTypes(const TypeErrorMap& errors) { |
++iter) { |
syncer::SyncError::ErrorType failure_type = iter->second.error_type(); |
switch (failure_type) { |
+ case syncer::SyncError::UNSET: |
+ NOTREACHED(); |
+ break; |
case syncer::SyncError::UNRECOVERABLE_ERROR: |
+ unrecoverable_errors_.insert(*iter); |
+ break; |
case syncer::SyncError::DATATYPE_ERROR: |
- fatal_errors_.insert(*iter); |
+ data_type_errors_.insert(*iter); |
break; |
case syncer::SyncError::CRYPTO_ERROR: |
crypto_errors_.insert(*iter); |
@@ -48,17 +53,20 @@ bool FailedDataTypesHandler::UpdateFailedDataTypes(const TypeErrorMap& errors) { |
case syncer::SyncError::PERSISTENCE_ERROR: |
persistence_errors_.insert(*iter); |
break; |
- default: |
- NOTREACHED(); |
+ case syncer::SyncError::UNREADY_ERROR: |
+ unready_errors_.insert(*iter); |
+ break; |
} |
} |
return true; |
} |
void FailedDataTypesHandler::Reset() { |
- fatal_errors_.clear(); |
+ unrecoverable_errors_.clear(); |
+ data_type_errors_.clear(); |
crypto_errors_.clear(); |
persistence_errors_.clear(); |
+ unready_errors_.clear(); |
} |
void FailedDataTypesHandler::ResetCryptoErrors() { |
@@ -73,26 +81,37 @@ void FailedDataTypesHandler::ResetPersistenceErrorsFrom( |
} |
} |
+bool FailedDataTypesHandler::ResetDataTypeErrorFor(syncer::ModelType type) { |
+ return data_type_errors_.erase(type) > 0; |
+} |
+ |
+bool FailedDataTypesHandler::ResetUnreadyErrorFor(syncer::ModelType type) { |
+ return unready_errors_.erase(type) > 0; |
+} |
+ |
FailedDataTypesHandler::TypeErrorMap FailedDataTypesHandler::GetAllErrors() |
const { |
TypeErrorMap result; |
- |
- if (AnyFailedDataType()) { |
- result = fatal_errors_; |
- result.insert(crypto_errors_.begin(), crypto_errors_.end()); |
- result.insert(persistence_errors_.begin(), persistence_errors_.end()); |
- } |
+ 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()); |
return result; |
} |
syncer::ModelTypeSet FailedDataTypesHandler::GetFailedTypes() const { |
syncer::ModelTypeSet result = GetFatalErrorTypes(); |
result.PutAll(GetCryptoErrorTypes()); |
+ result.PutAll(GetUnreadyErrorTypes()); |
return result; |
} |
-syncer::ModelTypeSet FailedDataTypesHandler::GetFatalErrorTypes() const { |
- return GetTypesFromErrorMap(fatal_errors_); |
+syncer::ModelTypeSet FailedDataTypesHandler::GetFatalErrorTypes() |
+ const { |
+ syncer::ModelTypeSet result = GetTypesFromErrorMap(unrecoverable_errors_); |
+ result.PutAll(GetTypesFromErrorMap(data_type_errors_)); |
+ return result; |
} |
syncer::ModelTypeSet FailedDataTypesHandler::GetCryptoErrorTypes() const { |
@@ -105,10 +124,17 @@ syncer::ModelTypeSet FailedDataTypesHandler::GetPersistenceErrorTypes() const { |
return result; |
} |
+syncer::ModelTypeSet FailedDataTypesHandler::GetUnreadyErrorTypes() const { |
+ syncer::ModelTypeSet result = GetTypesFromErrorMap(unready_errors_); |
+ return result; |
+} |
+ |
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 !fatal_errors_.empty() || !crypto_errors_.empty(); |
+ return !unrecoverable_errors_.empty() || |
+ !data_type_errors_.empty() || |
+ !crypto_errors_.empty(); |
} |
} // namespace browser_sync |