xref: /aosp_15_r20/external/cronet/base/task/sequence_manager/delayed_task_handle_delegate.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/sequence_manager/delayed_task_handle_delegate.h"
6 
7 #include "base/task/sequence_manager/task_queue_impl.h"
8 
9 namespace base {
10 namespace sequence_manager {
11 namespace internal {
12 
DelayedTaskHandleDelegate(TaskQueueImpl * outer)13 DelayedTaskHandleDelegate::DelayedTaskHandleDelegate(TaskQueueImpl* outer)
14     : outer_(outer) {}
15 
~DelayedTaskHandleDelegate()16 DelayedTaskHandleDelegate::~DelayedTaskHandleDelegate() {
17   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
18   DCHECK(!IsValid());
19 }
20 
AsWeakPtr()21 WeakPtr<DelayedTaskHandleDelegate> DelayedTaskHandleDelegate::AsWeakPtr() {
22   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
23   return weak_ptr_factory_.GetWeakPtr();
24 }
25 
IsValid() const26 bool DelayedTaskHandleDelegate::IsValid() const {
27   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
28   return weak_ptr_factory_.HasWeakPtrs();
29 }
30 
CancelTask()31 void DelayedTaskHandleDelegate::CancelTask() {
32   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
33   if (!IsValid())
34     return;
35 
36   weak_ptr_factory_.InvalidateWeakPtrs();
37 
38   // If the task is still inside the heap, then it can be removed directly.
39   if (heap_handle_.IsValid())
40     outer_->RemoveCancelableTask(heap_handle_);
41 }
42 
SetHeapHandle(HeapHandle heap_handle)43 void DelayedTaskHandleDelegate::SetHeapHandle(HeapHandle heap_handle) {
44   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
45   DCHECK(heap_handle.IsValid());
46   heap_handle_ = heap_handle;
47 }
48 
ClearHeapHandle()49 void DelayedTaskHandleDelegate::ClearHeapHandle() {
50   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
51   heap_handle_ = HeapHandle();
52 }
53 
GetHeapHandle()54 HeapHandle DelayedTaskHandleDelegate::GetHeapHandle() {
55   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
56   return heap_handle_;
57 }
58 
WillRunTask()59 void DelayedTaskHandleDelegate::WillRunTask() {
60   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
61   DCHECK(IsValid());
62   // The task must be removed from the heap before running it.
63   DCHECK(!heap_handle_.IsValid());
64   weak_ptr_factory_.InvalidateWeakPtrs();
65 }
66 
67 }  // namespace internal
68 }  // namespace sequence_manager
69 }  // namespace base
70