| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "headless/public/util/error_reporter.h" |
| |
| #include <sstream> |
| |
| #include "base/logging.h" |
| #include "base/strings/string_util.h" |
| |
| namespace headless { |
| |
| ErrorReporter::ErrorReporter() = default; |
| |
| ErrorReporter::~ErrorReporter() = default; |
| |
| #if DCHECK_IS_ON() |
| void ErrorReporter::Push() { |
| path_.push_back(nullptr); |
| } |
| |
| void ErrorReporter::Pop() { |
| path_.pop_back(); |
| } |
| |
| void ErrorReporter::SetName(const char* name) { |
| DCHECK(!path_.empty()); |
| path_.back() = name; |
| } |
| |
| void ErrorReporter::AddError(base::StringPiece description) { |
| std::stringstream error; |
| for (size_t i = 0; i < path_.size(); i++) { |
| if (!path_[i]) { |
| DCHECK_EQ(i + 1, path_.size()); |
| break; |
| } |
| if (i) |
| error << '.'; |
| error << path_[i]; |
| } |
| if (error.tellp()) |
| error << ": "; |
| error << description; |
| errors_.push_back(error.str()); |
| } |
| |
| bool ErrorReporter::HasErrors() const { |
| return !errors_.empty(); |
| } |
| |
| std::string ErrorReporter::ToString() const { |
| return base::JoinString(errors_, ", "); |
| } |
| #endif // DCHECK_IS_ON() |
| |
| } // namespace headless |