| // Copyright 2013 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. | 
 |  | 
 | #include "base/test/test_io_thread.h" | 
 |  | 
 | #include "base/logging.h" | 
 | #include "base/message_loop/message_loop.h" | 
 |  | 
 | namespace base { | 
 |  | 
 | TestIOThread::TestIOThread(Mode mode) | 
 |     : io_thread_("test_io_thread"), io_thread_started_(false) { | 
 |   switch (mode) { | 
 |     case kAutoStart: | 
 |       Start(); | 
 |       return; | 
 |     case kManualStart: | 
 |       return; | 
 |   } | 
 |   CHECK(false) << "Invalid mode"; | 
 | } | 
 |  | 
 | TestIOThread::~TestIOThread() { | 
 |   Stop(); | 
 | } | 
 |  | 
 | void TestIOThread::Start() { | 
 |   CHECK(!io_thread_started_); | 
 |   io_thread_started_ = true; | 
 |   CHECK(io_thread_.StartWithOptions( | 
 |       base::Thread::Options(base::MessageLoop::TYPE_IO, 0))); | 
 | } | 
 |  | 
 | void TestIOThread::Stop() { | 
 |   // Note: It's okay to call |Stop()| even if the thread isn't running. | 
 |   io_thread_.Stop(); | 
 |   io_thread_started_ = false; | 
 | } | 
 |  | 
 | void TestIOThread::PostTask(const Location& from_here, base::OnceClosure task) { | 
 |   task_runner()->PostTask(from_here, std::move(task)); | 
 | } | 
 |  | 
 | }  // namespace base |