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)15DelayedTaskHandle::DelayedTaskHandle(std::unique_ptr<Delegate> delegate) 16 : delegate_(std::move(delegate)) { 17 DCHECK(IsValid()); 18 } 19 ~DelayedTaskHandle()20DelayedTaskHandle::~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)28DelayedTaskHandle& 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() const35bool DelayedTaskHandle::IsValid() const { 36 return delegate_ && delegate_->IsValid(); 37 } 38 CancelTask()39void 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