1// Copyright 2013 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#include "base/test/test_io_thread.h"
6
7#include "base/logging.h"
8
9namespace base {
10
11TestIOThread::TestIOThread(Mode mode)
12    : io_thread_("test_io_thread"), io_thread_started_(false) {
13  switch (mode) {
14    case kAutoStart:
15      Start();
16      return;
17    case kManualStart:
18      return;
19  }
20  CHECK(false) << "Invalid mode";
21}
22
23TestIOThread::~TestIOThread() {
24  Stop();
25}
26
27void TestIOThread::Start() {
28  CHECK(!io_thread_started_);
29  io_thread_started_ = true;
30  CHECK(io_thread_.StartWithOptions(
31      base::Thread::Options(base::MessageLoop::TYPE_IO, 0)));
32}
33
34void TestIOThread::Stop() {
35  // Note: It's okay to call |Stop()| even if the thread isn't running.
36  io_thread_.Stop();
37  io_thread_started_ = false;
38}
39
40void TestIOThread::PostTask(const tracked_objects::Location& from_here,
41                            const base::Closure& task) {
42  task_runner()->PostTask(from_here, task);
43}
44
45}  // namespace base
46