1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROMECAST_MEDIA_CMA_BASE_MEDIA_TASK_RUNNER_H_
6#define CHROMECAST_MEDIA_CMA_BASE_MEDIA_TASK_RUNNER_H_
7
8#include "base/callback.h"
9#include "base/location.h"
10#include "base/macros.h"
11#include "base/memory/ref_counted.h"
12#include "base/time/time.h"
13
14namespace chromecast {
15namespace media {
16
17class MediaTaskRunner
18    : public base::RefCountedThreadSafe<MediaTaskRunner> {
19 public:
20  MediaTaskRunner();
21
22  // Post a task with the given media |timestamp|. If |timestamp| is equal to
23  // |kNoTimestamp()|, the task is scheduled right away.
24  // How the media timestamp is used to schedule the task is an implementation
25  // detail of derived classes.
26  // Returns true if the task may be run at some point in the future, and false
27  // if the task definitely will not be run.
28  virtual bool PostMediaTask(
29      const tracked_objects::Location& from_here,
30      const base::Closure& task,
31      base::TimeDelta timestamp) = 0;
32
33 protected:
34  virtual ~MediaTaskRunner();
35  friend class base::RefCountedThreadSafe<MediaTaskRunner>;
36
37 private:
38  DISALLOW_COPY_AND_ASSIGN(MediaTaskRunner);
39};
40
41}  // namespace media
42}  // namespace chromecast
43
44#endif  // CHROMECAST_MEDIA_CMA_BASE_MEDIA_TASK_RUNNER_H_
45