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