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 sync_driver { | 9 namespace syncer { |
10 | 10 |
11 namespace { | 11 namespace { |
12 | 12 |
13 syncer::ModelTypeSet GetTypesFromErrorMap( | 13 ModelTypeSet GetTypesFromErrorMap( |
14 const DataTypeStatusTable::TypeErrorMap& errors) { | 14 const DataTypeStatusTable::TypeErrorMap& errors) { |
15 syncer::ModelTypeSet result; | 15 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 syncer::SyncError::ErrorType failure_type = iter->second.error_type(); | 38 SyncError::ErrorType failure_type = iter->second.error_type(); |
39 switch (failure_type) { | 39 switch (failure_type) { |
40 case syncer::SyncError::UNSET: | 40 case SyncError::UNSET: |
41 NOTREACHED(); | 41 NOTREACHED(); |
42 break; | 42 break; |
43 case syncer::SyncError::UNRECOVERABLE_ERROR: | 43 case SyncError::UNRECOVERABLE_ERROR: |
44 unrecoverable_errors_.insert(*iter); | 44 unrecoverable_errors_.insert(*iter); |
45 break; | 45 break; |
46 case syncer::SyncError::DATATYPE_ERROR: | 46 case SyncError::DATATYPE_ERROR: |
47 case syncer::SyncError::DATATYPE_POLICY_ERROR: | 47 case SyncError::DATATYPE_POLICY_ERROR: |
48 data_type_errors_.insert(*iter); | 48 data_type_errors_.insert(*iter); |
49 break; | 49 break; |
50 case syncer::SyncError::CRYPTO_ERROR: | 50 case SyncError::CRYPTO_ERROR: |
51 crypto_errors_.insert(*iter); | 51 crypto_errors_.insert(*iter); |
52 break; | 52 break; |
53 case syncer::SyncError::PERSISTENCE_ERROR: | 53 case SyncError::PERSISTENCE_ERROR: |
54 persistence_errors_.insert(*iter); | 54 persistence_errors_.insert(*iter); |
55 break; | 55 break; |
56 case syncer::SyncError::UNREADY_ERROR: | 56 case 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 syncer::ModelTypeSet purged_types) { | 77 ModelTypeSet purged_types) { |
78 for (syncer::ModelTypeSet::Iterator iter = purged_types.First(); iter.Good(); | 78 for (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(syncer::ModelType type) { | 84 bool DataTypeStatusTable::ResetDataTypeErrorFor(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(syncer::ModelType type) { | 88 bool DataTypeStatusTable::ResetUnreadyErrorFor(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 syncer::ModelTypeSet DataTypeStatusTable::GetFailedTypes() const { | 102 ModelTypeSet DataTypeStatusTable::GetFailedTypes() const { |
103 syncer::ModelTypeSet result = GetFatalErrorTypes(); | 103 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 syncer::ModelTypeSet DataTypeStatusTable::GetFatalErrorTypes() const { | 109 ModelTypeSet DataTypeStatusTable::GetFatalErrorTypes() const { |
110 syncer::ModelTypeSet result; | 110 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 syncer::ModelTypeSet DataTypeStatusTable::GetCryptoErrorTypes() const { | 116 ModelTypeSet DataTypeStatusTable::GetCryptoErrorTypes() const { |
117 syncer::ModelTypeSet result = GetTypesFromErrorMap(crypto_errors_); | 117 ModelTypeSet result = GetTypesFromErrorMap(crypto_errors_); |
118 return result; | 118 return result; |
119 } | 119 } |
120 | 120 |
121 syncer::ModelTypeSet DataTypeStatusTable::GetPersistenceErrorTypes() const { | 121 ModelTypeSet DataTypeStatusTable::GetPersistenceErrorTypes() const { |
122 syncer::ModelTypeSet result = GetTypesFromErrorMap(persistence_errors_); | 122 ModelTypeSet result = GetTypesFromErrorMap(persistence_errors_); |
123 return result; | 123 return result; |
124 } | 124 } |
125 | 125 |
126 syncer::ModelTypeSet DataTypeStatusTable::GetUnreadyErrorTypes() const { | 126 ModelTypeSet DataTypeStatusTable::GetUnreadyErrorTypes() const { |
127 syncer::ModelTypeSet result = GetTypesFromErrorMap(unready_errors_); | 127 ModelTypeSet result = GetTypesFromErrorMap(unready_errors_); |
128 return result; | 128 return result; |
129 } | 129 } |
130 | 130 |
131 syncer::ModelTypeSet DataTypeStatusTable::GetUnrecoverableErrorTypes() const { | 131 ModelTypeSet DataTypeStatusTable::GetUnrecoverableErrorTypes() const { |
132 syncer::ModelTypeSet result = GetTypesFromErrorMap(unrecoverable_errors_); | 132 ModelTypeSet result = GetTypesFromErrorMap(unrecoverable_errors_); |
133 return result; | 133 return result; |
134 } | 134 } |
135 | 135 |
136 syncer::SyncError DataTypeStatusTable::GetUnrecoverableError() const { | 136 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 ? syncer::SyncError() | 141 ? SyncError() |
142 : unrecoverable_errors_.begin()->second); | 142 : unrecoverable_errors_.begin()->second); |
143 } | 143 } |
144 | 144 |
145 } // namespace sync_driver | 145 } // namespace syncer |
OLD | NEW |