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 #ifndef BASE_TASK_DELAYED_TASK_HANDLE_H_ 6 #define BASE_TASK_DELAYED_TASK_HANDLE_H_ 7 8 #include <memory> 9 10 #include "base/base_export.h" 11 12 namespace base { 13 14 // A handle to a delayed task which can be used to cancel the posted task. Not 15 // thread-safe, can only be held and invoked from the posting sequence. 16 class BASE_EXPORT DelayedTaskHandle { 17 public: 18 // The delegate that allows each SequencedTaskRunners to have different 19 // implementations. 20 class Delegate { 21 public: 22 virtual ~Delegate() = default; 23 24 // Returns true if the task handle is valid. 25 virtual bool IsValid() const = 0; 26 27 // Cancels the task. A canceled task, whether removed from the underlying 28 // queue or only marked as canceled, will never be Run(). 29 virtual void CancelTask() = 0; 30 }; 31 32 // Construct a default, invalid, task handle. 33 DelayedTaskHandle(); 34 35 // Construct a valid task handle with the specified |delegate|. 36 explicit DelayedTaskHandle(std::unique_ptr<Delegate> delegate); 37 38 ~DelayedTaskHandle(); 39 40 DelayedTaskHandle(DelayedTaskHandle&&); 41 DelayedTaskHandle& operator=(DelayedTaskHandle&&); 42 43 // Returns true if the task handle is valid. 44 bool IsValid() const; 45 46 // Cancels the task. 47 void CancelTask(); 48 49 private: 50 std::unique_ptr<Delegate> delegate_; 51 }; 52 53 } // namespace base 54 55 #endif // BASE_TASK_DELAYED_TASK_HANDLE_H_ 56