OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "sync/api/sync_error.h" | |
6 | |
7 #include <ostream> | |
8 | |
9 #include "base/location.h" | |
10 #include "base/logging.h" | |
11 #include "sync/internal_api/public/base/model_type.h" | |
12 | |
13 namespace syncer { | |
14 | |
15 SyncError::SyncError() { | |
16 Clear(); | |
17 } | |
18 | |
19 SyncError::SyncError(const tracked_objects::Location& location, | |
20 ErrorType error_type, | |
21 const std::string& message, | |
22 ModelType model_type) { | |
23 DCHECK(error_type != UNSET); | |
24 Init(location, message, model_type, error_type); | |
25 PrintLogError(); | |
26 } | |
27 | |
28 SyncError::SyncError(const SyncError& other) { | |
29 Copy(other); | |
30 } | |
31 | |
32 SyncError::~SyncError() { | |
33 } | |
34 | |
35 SyncError& SyncError::operator=(const SyncError& other) { | |
36 if (this == &other) { | |
37 return *this; | |
38 } | |
39 Copy(other); | |
40 return *this; | |
41 } | |
42 | |
43 void SyncError::Copy(const SyncError& other) { | |
44 if (other.IsSet()) { | |
45 Init(other.location(), | |
46 other.message(), | |
47 other.model_type(), | |
48 other.error_type()); | |
49 } else { | |
50 Clear(); | |
51 } | |
52 } | |
53 | |
54 void SyncError::Clear() { | |
55 location_.reset(); | |
56 message_ = std::string(); | |
57 model_type_ = UNSPECIFIED; | |
58 error_type_ = UNSET; | |
59 } | |
60 | |
61 void SyncError::Reset(const tracked_objects::Location& location, | |
62 const std::string& message, | |
63 ModelType model_type) { | |
64 Init(location, message, model_type, DATATYPE_ERROR); | |
65 PrintLogError(); | |
66 } | |
67 | |
68 void SyncError::Init(const tracked_objects::Location& location, | |
69 const std::string& message, | |
70 ModelType model_type, | |
71 ErrorType error_type) { | |
72 location_.reset(new tracked_objects::Location(location)); | |
73 message_ = message; | |
74 model_type_ = model_type; | |
75 error_type_ = error_type; | |
76 } | |
77 | |
78 bool SyncError::IsSet() const { | |
79 return error_type_ != UNSET; | |
80 } | |
81 | |
82 | |
83 const tracked_objects::Location& SyncError::location() const { | |
84 CHECK(IsSet()); | |
85 return *location_; | |
86 } | |
87 | |
88 const std::string& SyncError::message() const { | |
89 CHECK(IsSet()); | |
90 return message_; | |
91 } | |
92 | |
93 ModelType SyncError::model_type() const { | |
94 CHECK(IsSet()); | |
95 return model_type_; | |
96 } | |
97 | |
98 SyncError::ErrorType SyncError::error_type() const { | |
99 CHECK(IsSet()); | |
100 return error_type_; | |
101 } | |
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 | |
141 std::string SyncError::ToString() const { | |
142 if (!IsSet()) { | |
143 return std::string(); | |
144 } | |
145 return location_->ToString() + ", " + ModelTypeToString(model_type_) + | |
146 " " + GetMessagePrefix() + message_; | |
147 } | |
148 | |
149 void SyncError::PrintLogError() const { | |
150 logging::LogSeverity logSeverity = | |
151 (GetSeverity() == SYNC_ERROR_SEVERITY_INFO) | |
152 ? logging::LOG_VERBOSE : logging::LOG_ERROR; | |
153 | |
154 LAZY_STREAM(logging::LogMessage(location_->file_name(), | |
155 location_->line_number(), | |
156 logSeverity).stream(), | |
157 logSeverity >= ::logging::GetMinLogLevel()) | |
158 << ModelTypeToString(model_type_) << " " | |
159 << GetMessagePrefix() << message_; | |
160 } | |
161 | |
162 void PrintTo(const SyncError& sync_error, std::ostream* os) { | |
163 *os << sync_error.ToString(); | |
164 } | |
165 | |
166 } // namespace syncer | |
OLD | NEW |