// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/ash/download_status/display_metadata.h"
#include <utility>
#include "base/check.h"
#include "base/check_op.h"
namespace ash::download_status {
// CommandInfo -----------------------------------------------------------------
CommandInfo::CommandInfo(base::RepeatingClosure command_callback,
const gfx::VectorIcon* icon,
int text_id,
CommandType type)
: command_callback(std::move(command_callback)),
icon(icon),
text_id(text_id),
type(type) {}
CommandInfo::CommandInfo(CommandInfo&&) = default;
CommandInfo& CommandInfo::operator=(CommandInfo&&) = default;
CommandInfo::~CommandInfo() = default;
// DisplayMetadata -------------------------------------------------------------
DisplayMetadata::DisplayMetadata() = default;
DisplayMetadata::DisplayMetadata(DisplayMetadata&&) = default;
DisplayMetadata& DisplayMetadata::operator=(DisplayMetadata&&) = default;
DisplayMetadata::~DisplayMetadata() = default;
// Progress --------------------------------------------------------------------
Progress::Progress()
: Progress(/*received_bytes=*/std::nullopt,
/*total_bytes=*/std::nullopt,
/*complete=*/false,
/*hidden=*/false) {}
Progress::Progress(const std::optional<int64_t>& received_bytes,
const std::optional<int64_t>& total_bytes,
bool complete,
bool hidden)
: received_bytes_(received_bytes),
total_bytes_(total_bytes),
complete_(complete),
hidden_(hidden) {
const bool is_indeterminate = (!received_bytes_ || !total_bytes_);
CHECK(is_indeterminate || received_bytes_ <= total_bytes_);
CHECK_GE(received_bytes_.value_or(0), 0);
CHECK_GE(total_bytes_.value_or(0), 0);
// Check that for a completed download, `received_bytes` and `total_bytes`
// have the same value. NOTE: When `received_bytes` and `total_bytes` have the
// same value, `complete` can be false.
if (complete_) {
CHECK(!is_indeterminate);
CHECK_EQ(received_bytes_.value(), total_bytes_.value());
}
}
} // namespace ash::download_status