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)13DelayedTaskHandleDelegate::DelayedTaskHandleDelegate(TaskQueueImpl* outer) 14 : outer_(outer) {} 15 ~DelayedTaskHandleDelegate()16DelayedTaskHandleDelegate::~DelayedTaskHandleDelegate() { 17 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); 18 DCHECK(!IsValid()); 19 } 20 AsWeakPtr()21WeakPtr<DelayedTaskHandleDelegate> DelayedTaskHandleDelegate::AsWeakPtr() { 22 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); 23 return weak_ptr_factory_.GetWeakPtr(); 24 } 25 IsValid() const26bool DelayedTaskHandleDelegate::IsValid() const { 27 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); 28 return weak_ptr_factory_.HasWeakPtrs(); 29 } 30 CancelTask()31void 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)43void 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()49void DelayedTaskHandleDelegate::ClearHeapHandle() { 50 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); 51 heap_handle_ = HeapHandle(); 52 } 53 GetHeapHandle()54HeapHandle DelayedTaskHandleDelegate::GetHeapHandle() { 55 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); 56 return heap_handle_; 57 } 58 WillRunTask()59void 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