| 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 |