xref: /aosp_15_r20/external/cronet/base/task/delayed_task_handle.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2021 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "base/task/delayed_task_handle.h"
6 
7 #include <utility>
8 
9 #include "base/check.h"
10 
11 namespace base {
12 
13 DelayedTaskHandle::DelayedTaskHandle() = default;
14 
DelayedTaskHandle(std::unique_ptr<Delegate> delegate)15 DelayedTaskHandle::DelayedTaskHandle(std::unique_ptr<Delegate> delegate)
16     : delegate_(std::move(delegate)) {
17   DCHECK(IsValid());
18 }
19 
~DelayedTaskHandle()20 DelayedTaskHandle::~DelayedTaskHandle() {
21   // A task handle should never be destroyed in a valid state. It should either
22   // have been executed, canceled or have had its task deleted.
23   DCHECK(!IsValid());
24 }
25 
26 DelayedTaskHandle::DelayedTaskHandle(DelayedTaskHandle&& other) = default;
27 
operator =(DelayedTaskHandle && other)28 DelayedTaskHandle& DelayedTaskHandle::operator=(DelayedTaskHandle&& other) {
29   // A valid handle can't be overwritten by an assignment.
30   DCHECK(!IsValid());
31   delegate_ = std::move(other.delegate_);
32   return *this;
33 }
34 
IsValid() const35 bool DelayedTaskHandle::IsValid() const {
36   return delegate_ && delegate_->IsValid();
37 }
38 
CancelTask()39 void DelayedTaskHandle::CancelTask() {
40   // The delegate is responsible for cancelling the task.
41   if (delegate_) {
42     delegate_->CancelTask();
43     DCHECK(!delegate_->IsValid());
44     delegate_.reset();
45   }
46 }
47 
48 }  // namespace base
49