// Copyright 2015 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 COMPONENTS_SCHEDULER_CHILD_WEB_TASK_RUNNER_H_
#define COMPONENTS_SCHEDULER_CHILD_WEB_TASK_RUNNER_H_

#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "components/scheduler/scheduler_export.h"
#include "third_party/WebKit/public/platform/WebTaskRunner.h"

namespace scheduler {
class TaskQueue;

class SCHEDULER_EXPORT WebTaskRunnerImpl : public blink::WebTaskRunner {
 public:
  explicit WebTaskRunnerImpl(scoped_refptr<TaskQueue> task_queue);

  ~WebTaskRunnerImpl() override;

  // blink::WebTaskRunner implementation:
  void postTask(const blink::WebTraceLocation& web_location,
                blink::WebTaskRunner::Task* task) override;
  void postDelayedTask(const blink::WebTraceLocation& web_location,
                       blink::WebTaskRunner::Task* task,
                       double delayMs) override;
  double virtualTimeSeconds() const override;
  double monotonicallyIncreasingVirtualTimeSeconds() const override;
  blink::WebTaskRunner* clone() override;

  // blink::WebTaskRunner::Task should be wrapped by base::Passed() when
  // used with base::Bind(). See https://crbug.com/551356.
  // runTask() is a helper to call blink::WebTaskRunner::Task::run from
  // scoped_ptr<blink::WebTaskRunner::Task>.
  // runTask() is placed here because scoped_ptr<> cannot be used from Blink.
  static void runTask(scoped_ptr<blink::WebTaskRunner::Task>);

 private:
  scoped_refptr<TaskQueue> task_queue_;

  DISALLOW_COPY_AND_ASSIGN(WebTaskRunnerImpl);
};

}  // namespace scheduler

#endif  // COMPONENTS_SCHEDULER_CHILD_WEB_TASK_RUNNER_H_
