1a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
2a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch// found in the LICENSE file.
4a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
5a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#ifndef CHROME_TEST_BASE_TESTING_IO_THREAD_STATE_H_
6a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#define CHROME_TEST_BASE_TESTING_IO_THREAD_STATE_H_
7a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
8a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "base/callback_forward.h"
9a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "base/memory/scoped_ptr.h"
10a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
11a3f7b4e666c476898878fa745f637129375cd889Ben Murdochclass IOThread;
12a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
13a3f7b4e666c476898878fa745f637129375cd889Ben Murdochnamespace chrome {
14a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
15a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch// Convenience class for creating an IOThread object in unittests.
16a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch// Usual usage is to create one of these in the test fixture, after the
17a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch// BrowserThreadBundle and TestingBrowserProcess have been initialized.
18a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch//
19a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch// If code requires the use of io thread globals, those can be set by
20a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch// accessing io_thread_state()->globals() on the IO thread during test setup.
21a3f7b4e666c476898878fa745f637129375cd889Ben Murdochclass TestingIOThreadState {
22a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch public:
23a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  TestingIOThreadState();
24a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  ~TestingIOThreadState();
25a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  IOThread* io_thread_state() { return io_thread_state_.get(); }
26a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
27a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch private:
28a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  void Initialize(const base::Closure& done);
29a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  void Shutdown(const base::Closure& done);
30a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
31a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  scoped_ptr<IOThread> io_thread_state_;
32a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
33a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(TestingIOThreadState);
34a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch};
35a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
36a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch}  // namespace chrome
37a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
38a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#endif  // CHROME_TEST_BASE_TESTING_IO_THREAD_STATE_H_
39