| // Copyright 2021 The Chromium Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef BASE_TASK_DELAYED_TASK_HANDLE_H_ | |
| #define BASE_TASK_DELAYED_TASK_HANDLE_H_ | |
| #include <memory> | |
| #include "base/base_export.h" | |
| namespace base { | |
| // A handle to a delayed task which can be used to cancel the posted task. Not | |
| // thread-safe, can only be held and invoked from the posting sequence. | |
| class BASE_EXPORT DelayedTaskHandle { | |
| public: | |
| // The delegate that allows each SequencedTaskRunners to have different | |
| // implementations. | |
| class Delegate { | |
| public: | |
| virtual ~Delegate() = default; | |
| // Returns true if the task handle is valid. Canceling or running the task | |
| // will mark it as invalid. | |
| virtual bool IsValid() const = 0; | |
| // Cancels the task. A canceled task, whether removed from the underlying | |
| // queue or only marked as canceled, will never be Run(). | |
| virtual void CancelTask() = 0; | |
| }; | |
| // Construct a default, invalid, task handle. | |
| DelayedTaskHandle(); | |
| // Construct a valid task handle with the specified |delegate|. | |
| explicit DelayedTaskHandle(std::unique_ptr<Delegate> delegate); | |
| ~DelayedTaskHandle(); | |
| DelayedTaskHandle(DelayedTaskHandle&&); | |
| DelayedTaskHandle& operator=(DelayedTaskHandle&&); | |
| // Returns true if the task handle is valid. | |
| bool IsValid() const; | |
| // Cancels the task. | |
| void CancelTask(); | |
| private: | |
| std::unique_ptr<Delegate> delegate_; | |
| }; | |
| } // namespace base | |
| #endif // BASE_TASK_DELAYED_TASK_HANDLE_H_ |