// 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 BASE_TEST_SCOPED_MOCK_TIME_MESSAGE_LOOP_TASK_RUNNER_H_
#define BASE_TEST_SCOPED_MOCK_TIME_MESSAGE_LOOP_TASK_RUNNER_H_

#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/test/test_mock_time_task_runner.h"

namespace base {

class SingleThreadTaskRunner;

// A scoped wrapper around TestMockTimeTaskRunner that replaces
// MessageLoopCurrent::Get()'s task runner (and consequently
// ThreadTaskRunnerHandle) with a TestMockTimeTaskRunner and resets it back at
// the end of its scope.
//
// Note: RunLoop() will not work in the scope of a
// ScopedMockTimeMessageLoopTaskRunner, the underlying TestMockTimeTaskRunner's
// methods must be used instead to pump tasks.
//
// DEPRECATED: Use a TestMockTimeTaskRunner::Type::kBoundToThread instead of a
// MessageLoop + ScopedMockTimeMessageLoopTaskRunner.
// TODO(gab): Remove usage of this API and delete it.
class ScopedMockTimeMessageLoopTaskRunner {
 public:
  ScopedMockTimeMessageLoopTaskRunner();
  ~ScopedMockTimeMessageLoopTaskRunner();

  TestMockTimeTaskRunner* task_runner() { return task_runner_.get(); }
  TestMockTimeTaskRunner* operator->() { return task_runner_.get(); }

 private:
  const scoped_refptr<TestMockTimeTaskRunner> task_runner_;
  scoped_refptr<SingleThreadTaskRunner> previous_task_runner_;

  DISALLOW_COPY_AND_ASSIGN(ScopedMockTimeMessageLoopTaskRunner);
};

}  // namespace base

#endif  // BASE_TEST_SCOPED_MOCK_TIME_MESSAGE_LOOP_TASK_RUNNER_H_
