| Index: chrome/browser/sync/glue/failed_data_types_handler.cc
|
| diff --git a/chrome/browser/sync/glue/failed_data_types_handler.cc b/chrome/browser/sync/glue/failed_data_types_handler.cc
|
| index 594911fcf4e6b967fdd952241f8ac9496ef57467..01a32149f05a69f50881474ddeeb9103acdbe232 100644
|
| --- a/chrome/browser/sync/glue/failed_data_types_handler.cc
|
| +++ b/chrome/browser/sync/glue/failed_data_types_handler.cc
|
| @@ -30,40 +30,53 @@ FailedDataTypesHandler::FailedDataTypesHandler() {
|
| FailedDataTypesHandler::~FailedDataTypesHandler() {
|
| }
|
|
|
| -bool FailedDataTypesHandler::UpdateFailedDataTypes(
|
| - const TypeErrorMap& errors,
|
| - FailureType failure_type) {
|
| - if (failure_type == RUNTIME) {
|
| - runtime_errors_.insert(errors.begin(), errors.end());
|
| - } else if (failure_type == STARTUP) {
|
| - startup_errors_.insert(errors.begin(), errors.end());
|
| - } else if (failure_type == CRYPTO) {
|
| - crypto_errors_.insert(errors.begin(), errors.end());
|
| - } else {
|
| - NOTREACHED();
|
| +bool FailedDataTypesHandler::UpdateFailedDataTypes(const TypeErrorMap& errors) {
|
| + if (errors.empty())
|
| + return false;
|
| +
|
| + for (TypeErrorMap::const_iterator iter = errors.begin(); iter != errors.end();
|
| + ++iter) {
|
| + syncer::SyncError::ErrorType failure_type = iter->second.error_type();
|
| + switch (failure_type) {
|
| + case syncer::SyncError::UNRECOVERABLE_ERROR:
|
| + case syncer::SyncError::DATATYPE_ERROR:
|
| + fatal_errors_.insert(*iter);
|
| + break;
|
| + case syncer::SyncError::CRYPTO_ERROR:
|
| + crypto_errors_.insert(*iter);
|
| + break;
|
| + case syncer::SyncError::PERSISTENCE_ERROR:
|
| + persistence_errors_.insert(*iter);
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + }
|
| }
|
| -
|
| - return !errors.empty();
|
| + return true;
|
| }
|
|
|
| void FailedDataTypesHandler::Reset() {
|
| - startup_errors_.clear();
|
| - runtime_errors_.clear();
|
| + fatal_errors_.clear();
|
| crypto_errors_.clear();
|
| + persistence_errors_.clear();
|
| }
|
|
|
| void FailedDataTypesHandler::ResetCryptoErrors() {
|
| crypto_errors_.clear();
|
| }
|
|
|
| +void FailedDataTypesHandler::ResetPersistenceErrors() {
|
| + persistence_errors_.clear();
|
| +}
|
| +
|
| FailedDataTypesHandler::TypeErrorMap FailedDataTypesHandler::GetAllErrors()
|
| const {
|
| TypeErrorMap result;
|
|
|
| if (AnyFailedDataType()) {
|
| - result = startup_errors_;
|
| - result.insert(runtime_errors_.begin(), runtime_errors_.end());
|
| + result = fatal_errors_;
|
| result.insert(crypto_errors_.begin(), crypto_errors_.end());
|
| + result.insert(persistence_errors_.begin(), persistence_errors_.end());
|
| }
|
| return result;
|
| }
|
| @@ -75,9 +88,7 @@ syncer::ModelTypeSet FailedDataTypesHandler::GetFailedTypes() const {
|
| }
|
|
|
| syncer::ModelTypeSet FailedDataTypesHandler::GetFatalErrorTypes() const {
|
| - syncer::ModelTypeSet result = GetTypesFromErrorMap(startup_errors_);
|
| - result.PutAll(GetTypesFromErrorMap(runtime_errors_));
|
| - return result;
|
| + return GetTypesFromErrorMap(fatal_errors_);;
|
| }
|
|
|
| syncer::ModelTypeSet FailedDataTypesHandler::GetCryptoErrorTypes() const {
|
| @@ -85,9 +96,15 @@ syncer::ModelTypeSet FailedDataTypesHandler::GetCryptoErrorTypes() const {
|
| return result;
|
| }
|
|
|
| +syncer::ModelTypeSet FailedDataTypesHandler::GetPersistenceErrorTypes() const {
|
| + syncer::ModelTypeSet result = GetTypesFromErrorMap(persistence_errors_);
|
| + return result;
|
| +}
|
| +
|
| bool FailedDataTypesHandler::AnyFailedDataType() const {
|
| - return (!startup_errors_.empty() || !runtime_errors_.empty() ||
|
| - !crypto_errors_.empty());
|
| + // 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();
|
| }
|
|
|
| } // namespace browser_sync
|
|
|