OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "sync/api/sync_error.h" | 5 #include "sync/api/sync_error.h" |
6 | 6 |
7 #include <ostream> | 7 #include <ostream> |
8 | 8 |
9 #include "base/location.h" | 9 #include "base/location.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
11 #include "sync/internal_api/public/base/model_type.h" | 11 #include "sync/internal_api/public/base/model_type.h" |
12 | 12 |
13 namespace syncer { | 13 namespace syncer { |
14 | 14 |
15 SyncError::SyncError() { | 15 SyncError::SyncError() { |
16 Clear(); | 16 Clear(); |
17 } | 17 } |
18 | 18 |
19 SyncError::SyncError(const tracked_objects::Location& location, | 19 SyncError::SyncError(const tracked_objects::Location& location, |
20 ErrorType error_type, | 20 ErrorType error_type, |
21 const std::string& custom_message, | 21 const std::string& message, |
22 ModelType model_type) { | 22 ModelType model_type) { |
23 std::string type_message; | 23 DCHECK(error_type != UNSET); |
24 switch (error_type) { | 24 Init(location, message, model_type, error_type); |
25 case UNRECOVERABLE_ERROR: | |
26 type_message = "unrecoverable error was encountered: "; | |
27 break; | |
28 case DATATYPE_ERROR: | |
29 type_message = "datatype error was encountered: "; | |
30 break; | |
31 case PERSISTENCE_ERROR: | |
32 type_message = "persistence error was encountered: "; | |
33 break; | |
34 case CRYPTO_ERROR: | |
35 type_message = "cryptographer error was encountered: "; | |
36 break; | |
37 case UNREADY_ERROR: | |
38 type_message = "unready error was encountered: "; | |
39 break; | |
40 case UNSET: | |
41 NOTREACHED() << "Invalid error type"; | |
42 return; | |
43 } | |
44 Init(location, type_message + custom_message, model_type, error_type); | |
45 PrintLogError(); | 25 PrintLogError(); |
46 } | 26 } |
47 | 27 |
48 SyncError::SyncError(const SyncError& other) { | 28 SyncError::SyncError(const SyncError& other) { |
49 Copy(other); | 29 Copy(other); |
50 } | 30 } |
51 | 31 |
52 SyncError::~SyncError() { | 32 SyncError::~SyncError() { |
53 } | 33 } |
54 | 34 |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 ModelType SyncError::model_type() const { | 93 ModelType SyncError::model_type() const { |
114 CHECK(IsSet()); | 94 CHECK(IsSet()); |
115 return model_type_; | 95 return model_type_; |
116 } | 96 } |
117 | 97 |
118 SyncError::ErrorType SyncError::error_type() const { | 98 SyncError::ErrorType SyncError::error_type() const { |
119 CHECK(IsSet()); | 99 CHECK(IsSet()); |
120 return error_type_; | 100 return error_type_; |
121 } | 101 } |
122 | 102 |
| 103 SyncError::Severity SyncError::GetSeverity() const { |
| 104 switch (error_type_) { |
| 105 case UNREADY_ERROR: |
| 106 case DATATYPE_POLICY_ERROR: |
| 107 return SYNC_ERROR_SEVERITY_INFO; |
| 108 default: |
| 109 return SYNC_ERROR_SEVERITY_ERROR; |
| 110 } |
| 111 } |
| 112 |
| 113 std::string SyncError::GetMessagePrefix() const { |
| 114 std::string type_message; |
| 115 switch (error_type_) { |
| 116 case UNRECOVERABLE_ERROR: |
| 117 type_message = "unrecoverable error was encountered: "; |
| 118 break; |
| 119 case DATATYPE_ERROR: |
| 120 type_message = "datatype error was encountered: "; |
| 121 break; |
| 122 case PERSISTENCE_ERROR: |
| 123 type_message = "persistence error was encountered: "; |
| 124 break; |
| 125 case CRYPTO_ERROR: |
| 126 type_message = "cryptographer error was encountered: "; |
| 127 break; |
| 128 case UNREADY_ERROR: |
| 129 type_message = "unready error was encountered: "; |
| 130 break; |
| 131 case DATATYPE_POLICY_ERROR: |
| 132 type_message = "disabled due to configuration constraints: "; |
| 133 break; |
| 134 case UNSET: |
| 135 NOTREACHED() << "Invalid error type"; |
| 136 break; |
| 137 } |
| 138 return type_message; |
| 139 } |
| 140 |
123 std::string SyncError::ToString() const { | 141 std::string SyncError::ToString() const { |
124 if (!IsSet()) { | 142 if (!IsSet()) { |
125 return std::string(); | 143 return std::string(); |
126 } | 144 } |
127 return location_->ToString() + ", " + ModelTypeToString(model_type_) + | 145 return location_->ToString() + ", " + ModelTypeToString(model_type_) + |
128 " " + message_; | 146 " " + GetMessagePrefix() + message_; |
129 } | 147 } |
130 | 148 |
131 void SyncError::PrintLogError() const { | 149 void SyncError::PrintLogError() const { |
| 150 logging::LogSeverity logSeverity = |
| 151 (GetSeverity() == SYNC_ERROR_SEVERITY_INFO) |
| 152 ? logging::LOG_INFO : logging::LOG_ERROR; |
| 153 |
132 LAZY_STREAM(logging::LogMessage(location_->file_name(), | 154 LAZY_STREAM(logging::LogMessage(location_->file_name(), |
133 location_->line_number(), | 155 location_->line_number(), |
134 logging::LOG_ERROR).stream(), | 156 logSeverity).stream(), |
135 LOG_IS_ON(ERROR)) | 157 logSeverity >= ::logging::GetMinLogLevel()) |
136 << ModelTypeToString(model_type_) << " " << message_; | 158 << ModelTypeToString(model_type_) << " " |
| 159 << GetMessagePrefix() << message_; |
137 } | 160 } |
138 | 161 |
139 void PrintTo(const SyncError& sync_error, std::ostream* os) { | 162 void PrintTo(const SyncError& sync_error, std::ostream* os) { |
140 *os << sync_error.ToString(); | 163 *os << sync_error.ToString(); |
141 } | 164 } |
142 | 165 |
143 } // namespace syncer | 166 } // namespace syncer |
OLD | NEW |