naiveproxy/net/quic/quartc/quartc_task_runner_interface.h

52 lines
1.7 KiB
C
Raw Permalink Normal View History

2018-01-28 21:32:06 +03:00
// Copyright (c) 2017 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 NET_QUIC_QUARTC_QUARTC_TASK_RUNNER_INTERFACE_H_
#define NET_QUIC_QUARTC_QUARTC_TASK_RUNNER_INTERFACE_H_
#include <stdint.h>
#include <memory>
namespace net {
// Used by platform specific QuicAlarms. For example, WebRTC will use it to set
// and cancel an alarm. When setting an alarm, the task runner will schedule a
// task on rtc::Thread. When canceling an alarm, the canceler for that task will
// be called.
class QuartcTaskRunnerInterface {
public:
virtual ~QuartcTaskRunnerInterface() {}
class Task {
public:
virtual ~Task() {}
// Called when it's time to start the task.
virtual void Run() = 0;
};
// A handler used to cancel a scheduled task. In some cases, a task cannot
// be directly canceled with its pointer. For example, in WebRTC, the task
// will be scheduled on rtc::Thread. When canceling a task, its pointer cannot
// locate the scheduled task in the thread message queue. So when scheduling a
// task, an additional handler (ScheduledTask) will be returned.
class ScheduledTask {
public:
virtual ~ScheduledTask() {}
// Cancels a scheduled task, meaning the task will not be run.
virtual void Cancel() = 0;
};
// Schedules a task, which will be run after the given delay. A ScheduledTask
// may be used to cancel the task.
virtual std::unique_ptr<ScheduledTask> Schedule(Task* task,
uint64_t delay_ms) = 0;
};
} // namespace net
#endif // NET_QUIC_QUARTC_QUARTC_TASK_RUNNER_INTERFACE_H_