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/default_delayed_task_handle_delegate.h" 6 7 #include <utility> 8 9 #include "base/functional/bind.h" 10 11 namespace base { 12 13 DefaultDelayedTaskHandleDelegate::DefaultDelayedTaskHandleDelegate() = default; 14 15 DefaultDelayedTaskHandleDelegate::~DefaultDelayedTaskHandleDelegate() = default; 16 IsValid() const17bool DefaultDelayedTaskHandleDelegate::IsValid() const { 18 return weak_ptr_factory_.HasWeakPtrs(); 19 } 20 CancelTask()21void DefaultDelayedTaskHandleDelegate::CancelTask() { 22 weak_ptr_factory_.InvalidateWeakPtrs(); 23 } 24 BindCallback(OnceClosure callback)25OnceClosure DefaultDelayedTaskHandleDelegate::BindCallback( 26 OnceClosure callback) { 27 DCHECK(!IsValid()); 28 return BindOnce(&DefaultDelayedTaskHandleDelegate::RunTask, 29 weak_ptr_factory_.GetWeakPtr(), std::move(callback)); 30 } 31 RunTask(OnceClosure user_task)32void DefaultDelayedTaskHandleDelegate::RunTask(OnceClosure user_task) { 33 // Invalidate the weak pointer first so that the task handle is considered 34 // invalid while running the task. 35 weak_ptr_factory_.InvalidateWeakPtrs(); 36 std::move(user_task).Run(); 37 } 38 39 } // namespace base 40