// Copyright 2024 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "components/update_client/cancellation.h" #include #include "base/functional/callback.h" #include "base/functional/callback_helpers.h" #include "base/sequence_checker.h" namespace update_client { Cancellation::Cancellation() = default; Cancellation::~Cancellation() = default; void Cancellation::Cancel() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); cancelled_ = true; std::move(task_).Run(); } bool Cancellation::IsCancelled() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return cancelled_; } void Cancellation::OnCancel(base::OnceClosure task) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (IsCancelled()) { std::move(task).Run(); } else { task_ = std::move(task); } } void Cancellation::Clear() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); task_ = base::DoNothing(); } } // namespace update_client