delayed_task_handle.cc 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // Copyright 2021 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. #include "base/task/delayed_task_handle.h"
  5. #include <utility>
  6. #include "base/check.h"
  7. namespace base {
  8. DelayedTaskHandle::DelayedTaskHandle() = default;
  9. DelayedTaskHandle::DelayedTaskHandle(std::unique_ptr<Delegate> delegate)
  10. : delegate_(std::move(delegate)) {
  11. DCHECK(IsValid());
  12. }
  13. DelayedTaskHandle::~DelayedTaskHandle() {
  14. // A task handle should never be destroyed in a valid state. It should either
  15. // have been executed, canceled or have had its task deleted.
  16. DCHECK(!IsValid());
  17. }
  18. DelayedTaskHandle::DelayedTaskHandle(DelayedTaskHandle&& other) = default;
  19. DelayedTaskHandle& DelayedTaskHandle::operator=(DelayedTaskHandle&& other) {
  20. // A valid handle can't be overwritten by an assignment.
  21. DCHECK(!IsValid());
  22. delegate_ = std::move(other.delegate_);
  23. return *this;
  24. }
  25. bool DelayedTaskHandle::IsValid() const {
  26. return delegate_ && delegate_->IsValid();
  27. }
  28. void DelayedTaskHandle::CancelTask() {
  29. // The delegate is responsible for cancelling the task.
  30. if (delegate_) {
  31. delegate_->CancelTask();
  32. DCHECK(!delegate_->IsValid());
  33. delegate_.reset();
  34. }
  35. }
  36. } // namespace base