#include "chrome/browser/ash/guest_os/guest_os_diagnostics_builder.h"
#include <utility>
#include "base/check_op.h"
#include "chrome/browser/ash/guest_os/guest_os_diagnostics.mojom.h"
#include "ui/base/l10n/l10n_util.h"
namespace guest_os {
namespace {
using Status = mojom::DiagnosticEntry::Status;
}
DiagnosticsBuilder::DiagnosticsBuilder() {
diagnostics_ = mojom::Diagnostics::New();
}
DiagnosticsBuilder::~DiagnosticsBuilder() = default;
mojom::DiagnosticsPtr DiagnosticsBuilder::Build() {
return std::move(diagnostics_);
}
DiagnosticsBuilder::EntryBuilder::EntryBuilder(const std::string& requirement)
: entry_{mojom::DiagnosticEntry::New(requirement,
Status::kPass,
nullptr)} {}
DiagnosticsBuilder::EntryBuilder::EntryBuilder(int requirement_message_id)
: EntryBuilder(l10n_util::GetStringUTF8(requirement_message_id)) {}
DiagnosticsBuilder::EntryBuilder::EntryBuilder(EntryBuilder&&) = default;
DiagnosticsBuilder::EntryBuilder::~EntryBuilder() = default;
void DiagnosticsBuilder::EntryBuilder::SetNotApplicable() {
DCHECK_EQ(entry_->status, Status::kPass)
<< "SetNotApplicable() should only be called on a builder in the initial "
"state";
entry_->status = Status::kNotApplicable;
}
DiagnosticsBuilder::EntryBuilder& DiagnosticsBuilder::EntryBuilder::SetFail(
const std::string& explanation,
const std::optional<GURL>& learn_more_link) {
DCHECK_EQ(entry_->status, Status::kPass)
<< "SetFail() should only be called on a builder in the initial state";
entry_->status = Status::kFail;
entry_->explanation =
mojom::DiagnosticMessage::New(explanation, learn_more_link);
return *this;
}
void DiagnosticsBuilder::EntryBuilder::OverrideTopError(
const std::string& error,
const std::optional<GURL>& learn_more_link) {
DCHECK_EQ(entry_->status, Status::kFail);
overridden_top_error_ = mojom::DiagnosticMessage::New(error, learn_more_link);
}
DiagnosticsBuilder::EntryBuilder& DiagnosticsBuilder::EntryBuilder::SetFail(
int explanation_message_id,
const std::optional<GURL>& learn_more_link) {
return SetFail(l10n_util::GetStringUTF8(explanation_message_id),
learn_more_link);
}
void DiagnosticsBuilder::EntryBuilder::OverrideTopError(
int error_message_id,
const std::optional<GURL>& learn_more_link) {
return OverrideTopError(l10n_util::GetStringUTF8(error_message_id),
learn_more_link);
}
void DiagnosticsBuilder::AddEntry(EntryBuilder entry_builder) {
if (!diagnostics_->top_error &&
entry_builder.entry_->status == Status::kFail) {
if (entry_builder.overridden_top_error_) {
diagnostics_->top_error = std::move(entry_builder.overridden_top_error_);
} else {
DCHECK(entry_builder.entry_->explanation);
diagnostics_->top_error = entry_builder.entry_->explanation.Clone();
}
}
diagnostics_->entries.push_back(std::move(entry_builder.entry_));
}
}