| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/sync/driver/data_type_status_table.h" | 5 #include "components/sync/driver/data_type_status_table.h" |
| 6 | 6 |
| 7 #include "components/sync/driver/data_type_manager.h" | 7 #include "components/sync/driver/data_type_manager.h" |
| 8 | 8 |
| 9 namespace syncer { | 9 namespace sync_driver { |
| 10 | 10 |
| 11 namespace { | 11 namespace { |
| 12 | 12 |
| 13 ModelTypeSet GetTypesFromErrorMap( | 13 syncer::ModelTypeSet GetTypesFromErrorMap( |
| 14 const DataTypeStatusTable::TypeErrorMap& errors) { | 14 const DataTypeStatusTable::TypeErrorMap& errors) { |
| 15 ModelTypeSet result; | 15 syncer::ModelTypeSet result; |
| 16 for (DataTypeStatusTable::TypeErrorMap::const_iterator it = errors.begin(); | 16 for (DataTypeStatusTable::TypeErrorMap::const_iterator it = errors.begin(); |
| 17 it != errors.end(); ++it) { | 17 it != errors.end(); ++it) { |
| 18 DCHECK(!result.Has(it->first)); | 18 DCHECK(!result.Has(it->first)); |
| 19 result.Put(it->first); | 19 result.Put(it->first); |
| 20 } | 20 } |
| 21 return result; | 21 return result; |
| 22 } | 22 } |
| 23 | 23 |
| 24 } // namespace | 24 } // namespace |
| 25 | 25 |
| 26 DataTypeStatusTable::DataTypeStatusTable() {} | 26 DataTypeStatusTable::DataTypeStatusTable() {} |
| 27 | 27 |
| 28 DataTypeStatusTable::DataTypeStatusTable(const DataTypeStatusTable& other) = | 28 DataTypeStatusTable::DataTypeStatusTable(const DataTypeStatusTable& other) = |
| 29 default; | 29 default; |
| 30 | 30 |
| 31 DataTypeStatusTable::~DataTypeStatusTable() {} | 31 DataTypeStatusTable::~DataTypeStatusTable() {} |
| 32 | 32 |
| 33 void DataTypeStatusTable::UpdateFailedDataTypes(const TypeErrorMap& errors) { | 33 void DataTypeStatusTable::UpdateFailedDataTypes(const TypeErrorMap& errors) { |
| 34 DVLOG(1) << "Setting " << errors.size() << " new failed types."; | 34 DVLOG(1) << "Setting " << errors.size() << " new failed types."; |
| 35 | 35 |
| 36 for (TypeErrorMap::const_iterator iter = errors.begin(); iter != errors.end(); | 36 for (TypeErrorMap::const_iterator iter = errors.begin(); iter != errors.end(); |
| 37 ++iter) { | 37 ++iter) { |
| 38 SyncError::ErrorType failure_type = iter->second.error_type(); | 38 syncer::SyncError::ErrorType failure_type = iter->second.error_type(); |
| 39 switch (failure_type) { | 39 switch (failure_type) { |
| 40 case SyncError::UNSET: | 40 case syncer::SyncError::UNSET: |
| 41 NOTREACHED(); | 41 NOTREACHED(); |
| 42 break; | 42 break; |
| 43 case SyncError::UNRECOVERABLE_ERROR: | 43 case syncer::SyncError::UNRECOVERABLE_ERROR: |
| 44 unrecoverable_errors_.insert(*iter); | 44 unrecoverable_errors_.insert(*iter); |
| 45 break; | 45 break; |
| 46 case SyncError::DATATYPE_ERROR: | 46 case syncer::SyncError::DATATYPE_ERROR: |
| 47 case SyncError::DATATYPE_POLICY_ERROR: | 47 case syncer::SyncError::DATATYPE_POLICY_ERROR: |
| 48 data_type_errors_.insert(*iter); | 48 data_type_errors_.insert(*iter); |
| 49 break; | 49 break; |
| 50 case SyncError::CRYPTO_ERROR: | 50 case syncer::SyncError::CRYPTO_ERROR: |
| 51 crypto_errors_.insert(*iter); | 51 crypto_errors_.insert(*iter); |
| 52 break; | 52 break; |
| 53 case SyncError::PERSISTENCE_ERROR: | 53 case syncer::SyncError::PERSISTENCE_ERROR: |
| 54 persistence_errors_.insert(*iter); | 54 persistence_errors_.insert(*iter); |
| 55 break; | 55 break; |
| 56 case SyncError::UNREADY_ERROR: | 56 case syncer::SyncError::UNREADY_ERROR: |
| 57 unready_errors_.insert(*iter); | 57 unready_errors_.insert(*iter); |
| 58 break; | 58 break; |
| 59 } | 59 } |
| 60 } | 60 } |
| 61 } | 61 } |
| 62 | 62 |
| 63 void DataTypeStatusTable::Reset() { | 63 void DataTypeStatusTable::Reset() { |
| 64 DVLOG(1) << "Resetting data type errors."; | 64 DVLOG(1) << "Resetting data type errors."; |
| 65 unrecoverable_errors_.clear(); | 65 unrecoverable_errors_.clear(); |
| 66 data_type_errors_.clear(); | 66 data_type_errors_.clear(); |
| 67 crypto_errors_.clear(); | 67 crypto_errors_.clear(); |
| 68 persistence_errors_.clear(); | 68 persistence_errors_.clear(); |
| 69 unready_errors_.clear(); | 69 unready_errors_.clear(); |
| 70 } | 70 } |
| 71 | 71 |
| 72 void DataTypeStatusTable::ResetCryptoErrors() { | 72 void DataTypeStatusTable::ResetCryptoErrors() { |
| 73 crypto_errors_.clear(); | 73 crypto_errors_.clear(); |
| 74 } | 74 } |
| 75 | 75 |
| 76 void DataTypeStatusTable::ResetPersistenceErrorsFrom( | 76 void DataTypeStatusTable::ResetPersistenceErrorsFrom( |
| 77 ModelTypeSet purged_types) { | 77 syncer::ModelTypeSet purged_types) { |
| 78 for (ModelTypeSet::Iterator iter = purged_types.First(); iter.Good(); | 78 for (syncer::ModelTypeSet::Iterator iter = purged_types.First(); iter.Good(); |
| 79 iter.Inc()) { | 79 iter.Inc()) { |
| 80 persistence_errors_.erase(iter.Get()); | 80 persistence_errors_.erase(iter.Get()); |
| 81 } | 81 } |
| 82 } | 82 } |
| 83 | 83 |
| 84 bool DataTypeStatusTable::ResetDataTypeErrorFor(ModelType type) { | 84 bool DataTypeStatusTable::ResetDataTypeErrorFor(syncer::ModelType type) { |
| 85 return data_type_errors_.erase(type) > 0; | 85 return data_type_errors_.erase(type) > 0; |
| 86 } | 86 } |
| 87 | 87 |
| 88 bool DataTypeStatusTable::ResetUnreadyErrorFor(ModelType type) { | 88 bool DataTypeStatusTable::ResetUnreadyErrorFor(syncer::ModelType type) { |
| 89 return unready_errors_.erase(type) > 0; | 89 return unready_errors_.erase(type) > 0; |
| 90 } | 90 } |
| 91 | 91 |
| 92 DataTypeStatusTable::TypeErrorMap DataTypeStatusTable::GetAllErrors() const { | 92 DataTypeStatusTable::TypeErrorMap DataTypeStatusTable::GetAllErrors() const { |
| 93 TypeErrorMap result; | 93 TypeErrorMap result; |
| 94 result.insert(data_type_errors_.begin(), data_type_errors_.end()); | 94 result.insert(data_type_errors_.begin(), data_type_errors_.end()); |
| 95 result.insert(crypto_errors_.begin(), crypto_errors_.end()); | 95 result.insert(crypto_errors_.begin(), crypto_errors_.end()); |
| 96 result.insert(persistence_errors_.begin(), persistence_errors_.end()); | 96 result.insert(persistence_errors_.begin(), persistence_errors_.end()); |
| 97 result.insert(unready_errors_.begin(), unready_errors_.end()); | 97 result.insert(unready_errors_.begin(), unready_errors_.end()); |
| 98 result.insert(unrecoverable_errors_.begin(), unrecoverable_errors_.end()); | 98 result.insert(unrecoverable_errors_.begin(), unrecoverable_errors_.end()); |
| 99 return result; | 99 return result; |
| 100 } | 100 } |
| 101 | 101 |
| 102 ModelTypeSet DataTypeStatusTable::GetFailedTypes() const { | 102 syncer::ModelTypeSet DataTypeStatusTable::GetFailedTypes() const { |
| 103 ModelTypeSet result = GetFatalErrorTypes(); | 103 syncer::ModelTypeSet result = GetFatalErrorTypes(); |
| 104 result.PutAll(GetCryptoErrorTypes()); | 104 result.PutAll(GetCryptoErrorTypes()); |
| 105 result.PutAll(GetUnreadyErrorTypes()); | 105 result.PutAll(GetUnreadyErrorTypes()); |
| 106 return result; | 106 return result; |
| 107 } | 107 } |
| 108 | 108 |
| 109 ModelTypeSet DataTypeStatusTable::GetFatalErrorTypes() const { | 109 syncer::ModelTypeSet DataTypeStatusTable::GetFatalErrorTypes() const { |
| 110 ModelTypeSet result; | 110 syncer::ModelTypeSet result; |
| 111 result.PutAll(GetTypesFromErrorMap(data_type_errors_)); | 111 result.PutAll(GetTypesFromErrorMap(data_type_errors_)); |
| 112 result.PutAll(GetTypesFromErrorMap(unrecoverable_errors_)); | 112 result.PutAll(GetTypesFromErrorMap(unrecoverable_errors_)); |
| 113 return result; | 113 return result; |
| 114 } | 114 } |
| 115 | 115 |
| 116 ModelTypeSet DataTypeStatusTable::GetCryptoErrorTypes() const { | 116 syncer::ModelTypeSet DataTypeStatusTable::GetCryptoErrorTypes() const { |
| 117 ModelTypeSet result = GetTypesFromErrorMap(crypto_errors_); | 117 syncer::ModelTypeSet result = GetTypesFromErrorMap(crypto_errors_); |
| 118 return result; | 118 return result; |
| 119 } | 119 } |
| 120 | 120 |
| 121 ModelTypeSet DataTypeStatusTable::GetPersistenceErrorTypes() const { | 121 syncer::ModelTypeSet DataTypeStatusTable::GetPersistenceErrorTypes() const { |
| 122 ModelTypeSet result = GetTypesFromErrorMap(persistence_errors_); | 122 syncer::ModelTypeSet result = GetTypesFromErrorMap(persistence_errors_); |
| 123 return result; | 123 return result; |
| 124 } | 124 } |
| 125 | 125 |
| 126 ModelTypeSet DataTypeStatusTable::GetUnreadyErrorTypes() const { | 126 syncer::ModelTypeSet DataTypeStatusTable::GetUnreadyErrorTypes() const { |
| 127 ModelTypeSet result = GetTypesFromErrorMap(unready_errors_); | 127 syncer::ModelTypeSet result = GetTypesFromErrorMap(unready_errors_); |
| 128 return result; | 128 return result; |
| 129 } | 129 } |
| 130 | 130 |
| 131 ModelTypeSet DataTypeStatusTable::GetUnrecoverableErrorTypes() const { | 131 syncer::ModelTypeSet DataTypeStatusTable::GetUnrecoverableErrorTypes() const { |
| 132 ModelTypeSet result = GetTypesFromErrorMap(unrecoverable_errors_); | 132 syncer::ModelTypeSet result = GetTypesFromErrorMap(unrecoverable_errors_); |
| 133 return result; | 133 return result; |
| 134 } | 134 } |
| 135 | 135 |
| 136 SyncError DataTypeStatusTable::GetUnrecoverableError() const { | 136 syncer::SyncError DataTypeStatusTable::GetUnrecoverableError() const { |
| 137 // Just return the first one. It is assumed all the unrecoverable errors | 137 // Just return the first one. It is assumed all the unrecoverable errors |
| 138 // have the same cause. The others are just tracked to know which types | 138 // have the same cause. The others are just tracked to know which types |
| 139 // were involved. | 139 // were involved. |
| 140 return (unrecoverable_errors_.empty() | 140 return (unrecoverable_errors_.empty() |
| 141 ? SyncError() | 141 ? syncer::SyncError() |
| 142 : unrecoverable_errors_.begin()->second); | 142 : unrecoverable_errors_.begin()->second); |
| 143 } | 143 } |
| 144 | 144 |
| 145 } // namespace syncer | 145 } // namespace sync_driver |
| OLD | NEW |