1// Copyright (c) 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#ifndef CHROME_BROWSER_EXTENSIONS_TEST_EXTENSION_ENVIRONMENT_H_
6#define CHROME_BROWSER_EXTENSIONS_TEST_EXTENSION_ENVIRONMENT_H_
7
8#include "base/memory/scoped_ptr.h"
9#include "base/message_loop/message_loop.h"
10#include "content/public/test/test_browser_thread_bundle.h"
11
12#if defined(OS_CHROMEOS)
13#include "chrome/browser/chromeos/login/users/user_manager.h"
14#include "chrome/browser/chromeos/settings/cros_settings.h"
15#include "chrome/browser/chromeos/settings/device_settings_service.h"
16#endif
17
18#if defined(OS_WIN)
19#include "ui/base/win/scoped_ole_initializer.h"
20#endif
21
22class ExtensionService;
23class TestingProfile;
24
25namespace base {
26class Value;
27}
28
29namespace content {
30class WebContents;
31}
32
33namespace extensions {
34
35class Extension;
36class ExtensionPrefs;
37class TestExtensionSystem;
38
39// This class provides a minimal environment in which to create
40// extensions and tabs for extension-related unittests.
41class TestExtensionEnvironment {
42 public:
43  TestExtensionEnvironment();
44  ~TestExtensionEnvironment();
45
46  TestingProfile* profile() const;
47
48  // Returns the TestExtensionSystem created by the TestingProfile.
49  TestExtensionSystem* GetExtensionSystem();
50
51  // Returns an ExtensionService created (and owned) by the
52  // TestExtensionSystem created by the TestingProfile.
53  ExtensionService* GetExtensionService();
54
55  // Returns ExtensionPrefs created (and owned) by the
56  // TestExtensionSystem created by the TestingProfile.
57  ExtensionPrefs* GetExtensionPrefs();
58
59  // Creates an Extension and registers it with the ExtensionService.
60  // The Extension has a default manifest of {name: "Extension",
61  // version: "1.0", manifest_version: 2}, and values in
62  // manifest_extra override these defaults.
63  const Extension* MakeExtension(const base::Value& manifest_extra);
64
65  // Returns a test web contents that has a tab id.
66  scoped_ptr<content::WebContents> MakeTab() const;
67
68 private:
69  content::TestBrowserThreadBundle thread_bundle_;
70
71#if defined(OS_CHROMEOS)
72  chromeos::ScopedTestDeviceSettingsService test_device_settings_service_;
73  chromeos::ScopedTestCrosSettings test_cros_settings_;
74  chromeos::ScopedTestUserManager test_user_manager_;
75#endif
76
77#if defined(OS_WIN)
78  ui::ScopedOleInitializer ole_initializer_;
79#endif
80  scoped_ptr<TestingProfile> profile_;
81  ExtensionService* extension_service_;
82  ExtensionPrefs* extension_prefs_;
83};
84
85}  // namespace extensions
86
87#endif  // CHROME_BROWSER_EXTENSIONS_TEST_EXTENSION_ENVIRONMENT_H_
88