Upstream version 9.37.195.0
[platform/framework/web/crosswalk.git] / src / chrome / test / base / chrome_unit_test_suite.cc
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 "chrome/test/base/chrome_unit_test_suite.h"
6
7 #include "base/path_service.h"
8 #include "base/process/process_handle.h"
9 #include "base/strings/stringprintf.h"
10 #include "chrome/browser/chrome_content_browser_client.h"
11 #include "chrome/common/chrome_content_client.h"
12 #include "chrome/common/chrome_paths.h"
13 #include "chrome/test/base/testing_browser_process.h"
14 #include "chrome/utility/chrome_content_utility_client.h"
15 #include "content/public/common/content_paths.h"
16 #include "testing/gtest/include/gtest/gtest.h"
17 #include "ui/base/resource/resource_bundle.h"
18 #include "ui/base/resource/resource_handle.h"
19 #include "ui/base/ui_base_paths.h"
20
21 #if defined(OS_CHROMEOS)
22 #include "chromeos/chromeos_paths.h"
23 #endif
24
25 #if !defined(OS_IOS)
26 #include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h"
27 #include "chrome/common/extensions/chrome_extensions_client.h"
28 #include "extensions/common/extension_paths.h"
29 #include "ui/gl/gl_surface.h"
30 #endif
31
32 #if defined(OS_POSIX)
33 #include "base/memory/shared_memory.h"
34 #endif
35
36 namespace {
37
38 // Creates a TestingBrowserProcess for each test.
39 class ChromeUnitTestSuiteInitializer : public testing::EmptyTestEventListener {
40  public:
41   ChromeUnitTestSuiteInitializer() {}
42   virtual ~ChromeUnitTestSuiteInitializer() {}
43
44   virtual void OnTestStart(const testing::TestInfo& test_info) OVERRIDE {
45     content_client_.reset(new ChromeContentClient);
46     content::SetContentClient(content_client_.get());
47     // TODO(ios): Bring this back once ChromeContentBrowserClient is building.
48 #if !defined(OS_IOS)
49     browser_content_client_.reset(new chrome::ChromeContentBrowserClient());
50     content::SetBrowserClientForTesting(browser_content_client_.get());
51     utility_content_client_.reset(new ChromeContentUtilityClient());
52     content::SetUtilityClientForTesting(utility_content_client_.get());
53 #endif
54
55     TestingBrowserProcess::CreateInstance();
56   }
57
58   virtual void OnTestEnd(const testing::TestInfo& test_info) OVERRIDE {
59     // TODO(ios): Bring this back once ChromeContentBrowserClient is building.
60 #if !defined(OS_IOS)
61     browser_content_client_.reset();
62     utility_content_client_.reset();
63 #endif
64     content_client_.reset();
65     content::SetContentClient(NULL);
66
67     TestingBrowserProcess::DeleteInstance();
68   }
69
70  private:
71   // Client implementations for the content module.
72   scoped_ptr<ChromeContentClient> content_client_;
73   // TODO(ios): Bring this back once ChromeContentBrowserClient is building.
74 #if !defined(OS_IOS)
75   scoped_ptr<chrome::ChromeContentBrowserClient> browser_content_client_;
76   scoped_ptr<ChromeContentUtilityClient> utility_content_client_;
77 #endif
78
79   DISALLOW_COPY_AND_ASSIGN(ChromeUnitTestSuiteInitializer);
80 };
81
82 }  // namespace
83
84 ChromeUnitTestSuite::ChromeUnitTestSuite(int argc, char** argv)
85     : ChromeTestSuite(argc, argv) {}
86
87 ChromeUnitTestSuite::~ChromeUnitTestSuite() {}
88
89 void ChromeUnitTestSuite::Initialize() {
90   // Add an additional listener to do the extra initialization for unit tests.
91   // It will be started before the base class listeners and ended after the
92   // base class listeners.
93   testing::TestEventListeners& listeners =
94       testing::UnitTest::GetInstance()->listeners();
95   listeners.Append(new ChromeUnitTestSuiteInitializer);
96
97   InitializeProviders();
98   RegisterInProcessThreads();
99
100   ChromeTestSuite::Initialize();
101
102   // This needs to run after ChromeTestSuite::Initialize which calls content's
103   // intialization which calls base's which initializes ICU.
104   InitializeResourceBundle();
105 }
106
107 void ChromeUnitTestSuite::Shutdown() {
108   ResourceBundle::CleanupSharedInstance();
109   ChromeTestSuite::Shutdown();
110 }
111
112 void ChromeUnitTestSuite::InitializeProviders() {
113   {
114     ChromeContentClient content_client;
115     RegisterContentSchemes(&content_client);
116   }
117
118   chrome::RegisterPathProvider();
119   content::RegisterPathProvider();
120   ui::RegisterPathProvider();
121
122 #if defined(OS_CHROMEOS)
123   chromeos::RegisterPathProvider();
124 #endif
125
126 #if !defined(OS_IOS)
127   extensions::RegisterPathProvider();
128
129   extensions::ExtensionsClient::Set(
130       extensions::ChromeExtensionsClient::GetInstance());
131
132   content::WebUIControllerFactory::RegisterFactory(
133       ChromeWebUIControllerFactory::GetInstance());
134
135   gfx::GLSurface::InitializeOneOffForTests();
136 #endif
137 }
138
139 void ChromeUnitTestSuite::InitializeResourceBundle() {
140   // Force unittests to run using en-US so if we test against string
141   // output, it'll pass regardless of the system language.
142   ResourceBundle::InitSharedInstanceWithLocale("en-US", NULL);
143   base::FilePath resources_pack_path;
144 #if defined(OS_MACOSX) && !defined(OS_IOS)
145   PathService::Get(base::DIR_MODULE, &resources_pack_path);
146   resources_pack_path =
147       resources_pack_path.Append(FILE_PATH_LITERAL("resources.pak"));
148 #else
149   PathService::Get(chrome::FILE_RESOURCES_PACK, &resources_pack_path);
150 #endif
151   ResourceBundle::GetSharedInstance().AddDataPackFromPath(
152       resources_pack_path, ui::SCALE_FACTOR_NONE);
153 }