// 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 #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); ~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_; }; } // namespace base #endif // BASE_TASK_DELAYED_TASK_HANDLE_H_