blob: b02dca944fda67088817c2f962dbdd5c7f00bfa9 [file] [log] [blame]
// Copyright 2021 The Chromium Authors. All rights reserved.
// 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.
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_