Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(438)

Side by Side Diff: chrome/test/base/chrome_test_suite.cc

Issue 190663012: Run ContentMain in a browser_test's browser process. This removes duplication of code in the browse… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: try to fix android by restoring old path just for it Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/test/base/chrome_test_suite.h ('k') | chrome/test/base/chrome_unit_test_suite.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/test/base/chrome_test_suite.h" 5 #include "chrome/test/base/chrome_test_suite.h"
6 6
7 #if defined(OS_CHROMEOS) 7 #if defined(OS_CHROMEOS)
8 #include <stdio.h> 8 #include <stdio.h>
9 #include <unistd.h> 9 #include <unistd.h>
10 #endif 10 #endif
11 11
12 #include "base/command_line.h" 12 #include "base/command_line.h"
13 #include "base/memory/ref_counted.h" 13 #include "base/memory/ref_counted.h"
14 #include "base/metrics/stats_table.h"
15 #include "base/path_service.h" 14 #include "base/path_service.h"
16 #include "base/strings/stringprintf.h"
17 #include "base/strings/utf_string_conversions.h" 15 #include "base/strings/utf_string_conversions.h"
18 #include "chrome/browser/browser_process.h" 16 #include "chrome/browser/browser_process.h"
19 #include "chrome/browser/chrome_content_browser_client.h"
20 #include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h"
21 #include "chrome/common/chrome_constants.h" 17 #include "chrome/common/chrome_constants.h"
22 #include "chrome/common/chrome_content_client.h"
23 #include "chrome/common/chrome_paths.h" 18 #include "chrome/common/chrome_paths.h"
24 #include "chrome/common/extensions/chrome_extensions_client.h"
25 #include "chrome/common/url_constants.h" 19 #include "chrome/common/url_constants.h"
26 #include "chrome/utility/chrome_content_utility_client.h"
27 #include "content/public/test/test_launcher.h" 20 #include "content/public/test/test_launcher.h"
28 #include "extensions/common/extension_paths.h"
29 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
30 #include "ui/base/resource/resource_bundle.h"
31 #include "ui/base/resource/resource_handle.h"
32 22
33 #if defined(OS_ANDROID) 23 #if defined(OS_ANDROID)
34 #include "base/android/jni_android.h" 24 #include "base/android/jni_android.h"
35 #include "chrome/browser/android/chrome_jni_registrar.h" 25 #include "chrome/browser/android/chrome_jni_registrar.h"
36 #include "net/android/net_jni_registrar.h" 26 #include "net/android/net_jni_registrar.h"
37 #include "ui/base/android/ui_base_jni_registrar.h" 27 #include "ui/base/android/ui_base_jni_registrar.h"
38 #include "ui/gfx/android/gfx_jni_registrar.h" 28 #include "ui/gfx/android/gfx_jni_registrar.h"
39 #include "ui/gl/android/gl_jni_registrar.h" 29 #include "ui/gl/android/gl_jni_registrar.h"
40 #endif 30 #endif
41 31
42 #if defined(OS_CHROMEOS) 32 #if defined(OS_CHROMEOS)
43 #include "base/process/process_metrics.h" 33 #include "base/process/process_metrics.h"
44 #include "chromeos/chromeos_paths.h" 34 #include "chromeos/chromeos_paths.h"
45 #endif 35 #endif
46 36
47 #if !defined(OS_IOS)
48 #include "ui/gl/gl_surface.h"
49 #endif
50
51 #if defined(OS_MACOSX) 37 #if defined(OS_MACOSX)
52 #include "base/mac/bundle_locations.h" 38 #include "base/mac/bundle_locations.h"
53 #include "base/mac/scoped_nsautorelease_pool.h" 39 #include "base/mac/scoped_nsautorelease_pool.h"
54 #if !defined(OS_IOS) 40 #if !defined(OS_IOS)
55 #include "base/mac/mac_util.h" 41 #include "base/mac/mac_util.h"
56 #include "chrome/browser/chrome_browser_application_mac.h" 42 #include "chrome/browser/chrome_browser_application_mac.h"
57 #endif // !defined(OS_IOS) 43 #endif // !defined(OS_IOS)
58 #endif 44 #endif
59 45
60 #if defined(OS_POSIX) 46 #if !defined(OS_IOS)
61 #include "base/memory/shared_memory.h" 47 #include "media/base/media.h"
62 #endif 48 #endif
63 49
64 namespace { 50 namespace {
65 51
66 void RemoveSharedMemoryFile(const std::string& filename) {
67 // Stats uses SharedMemory under the hood. On posix, this results in a file
68 // on disk.
69 #if defined(OS_POSIX)
70 base::SharedMemory memory;
71 memory.Delete(filename);
72 #endif
73 }
74
75 bool IsCrosPythonProcess() { 52 bool IsCrosPythonProcess() {
76 #if defined(OS_CHROMEOS) 53 #if defined(OS_CHROMEOS)
77 char buf[80]; 54 char buf[80];
78 int num_read = readlink(base::kProcSelfExe, buf, sizeof(buf) - 1); 55 int num_read = readlink(base::kProcSelfExe, buf, sizeof(buf) - 1);
79 if (num_read == -1) 56 if (num_read == -1)
80 return false; 57 return false;
81 buf[num_read] = 0; 58 buf[num_read] = 0;
82 const char kPythonPrefix[] = "/python"; 59 const char kPythonPrefix[] = "/python";
83 return !strncmp(strrchr(buf, '/'), kPythonPrefix, sizeof(kPythonPrefix) - 1); 60 return !strncmp(strrchr(buf, '/'), kPythonPrefix, sizeof(kPythonPrefix) - 1);
84 #else 61 #else
85 return false; 62 return false;
86 #endif // defined(OS_CHROMEOS) 63 #endif // defined(OS_CHROMEOS)
87 } 64 }
88 65
89 // Initializes services needed by both unit tests and browser tests.
90 // See also ChromeUnitTestSuite for additional services created for unit tests.
91 class ChromeTestSuiteInitializer : public testing::EmptyTestEventListener {
92 public:
93 ChromeTestSuiteInitializer() {
94 }
95
96 virtual void OnTestStart(const testing::TestInfo& test_info) OVERRIDE {
97 content_client_.reset(new ChromeContentClient);
98 content::SetContentClient(content_client_.get());
99 // TODO(ios): Bring this back once ChromeContentBrowserClient is building.
100 #if !defined(OS_IOS)
101 browser_content_client_.reset(new chrome::ChromeContentBrowserClient());
102 content::SetBrowserClientForTesting(browser_content_client_.get());
103 utility_content_client_.reset(new chrome::ChromeContentUtilityClient());
104 content::SetUtilityClientForTesting(utility_content_client_.get());
105 #endif
106 }
107
108 virtual void OnTestEnd(const testing::TestInfo& test_info) OVERRIDE {
109 // TODO(ios): Bring this back once ChromeContentBrowserClient is building.
110 #if !defined(OS_IOS)
111 browser_content_client_.reset();
112 utility_content_client_.reset();
113 #endif
114 content_client_.reset();
115 content::SetContentClient(NULL);
116 }
117
118 private:
119 // Client implementations for the content module.
120 scoped_ptr<ChromeContentClient> content_client_;
121 // TODO(ios): Bring this back once ChromeContentBrowserClient is building.
122 #if !defined(OS_IOS)
123 scoped_ptr<chrome::ChromeContentBrowserClient> browser_content_client_;
124 scoped_ptr<chrome::ChromeContentUtilityClient> utility_content_client_;
125 #endif
126
127 DISALLOW_COPY_AND_ASSIGN(ChromeTestSuiteInitializer);
128 };
129
130 } // namespace 66 } // namespace
131 67
132 ChromeTestSuite::ChromeTestSuite(int argc, char** argv) 68 ChromeTestSuite::ChromeTestSuite(int argc, char** argv)
133 : content::ContentTestSuiteBase(argc, argv) { 69 : content::ContentTestSuiteBase(argc, argv) {
134 } 70 }
135 71
136 ChromeTestSuite::~ChromeTestSuite() { 72 ChromeTestSuite::~ChromeTestSuite() {
137 } 73 }
138 74
139 void ChromeTestSuite::Initialize() { 75 void ChromeTestSuite::Initialize() {
140 #if defined(OS_MACOSX) 76 #if defined(OS_MACOSX)
141 base::mac::ScopedNSAutoreleasePool autorelease_pool; 77 base::mac::ScopedNSAutoreleasePool autorelease_pool;
142 #if !defined(OS_IOS) 78 #if !defined(OS_IOS)
143 chrome_browser_application_mac::RegisterBrowserCrApp(); 79 chrome_browser_application_mac::RegisterBrowserCrApp();
144 #endif // !defined(OS_IOS) 80 #endif // !defined(OS_IOS)
145 #endif 81 #endif
146 82
147 #if defined(OS_ANDROID) 83 #if defined(OS_ANDROID)
148 // Register JNI bindings for android. 84 // Register JNI bindings for android.
149 gfx::android::RegisterJni(base::android::AttachCurrentThread()); 85 gfx::android::RegisterJni(base::android::AttachCurrentThread());
150 net::android::RegisterJni(base::android::AttachCurrentThread()); 86 net::android::RegisterJni(base::android::AttachCurrentThread());
151 ui::android::RegisterJni(base::android::AttachCurrentThread()); 87 ui::android::RegisterJni(base::android::AttachCurrentThread());
152 ui::gl::android::RegisterJni(base::android::AttachCurrentThread()); 88 ui::gl::android::RegisterJni(base::android::AttachCurrentThread());
153 chrome::android::RegisterJni(base::android::AttachCurrentThread()); 89 chrome::android::RegisterJni(base::android::AttachCurrentThread());
154 #endif 90 #endif
155 91
156 chrome::RegisterPathProvider();
157 #if defined(OS_CHROMEOS)
158 chromeos::RegisterPathProvider();
159 #endif
160 if (!browser_dir_.empty()) { 92 if (!browser_dir_.empty()) {
161 PathService::Override(base::DIR_EXE, browser_dir_); 93 PathService::Override(base::DIR_EXE, browser_dir_);
162 PathService::Override(base::DIR_MODULE, browser_dir_); 94 PathService::Override(base::DIR_MODULE, browser_dir_);
163 } 95 }
164 96
165 #if !defined(OS_IOS) 97 #if !defined(OS_IOS)
166 extensions::RegisterPathProvider();
167
168 extensions::ExtensionsClient::Set(
169 extensions::ChromeExtensionsClient::GetInstance());
170
171 // Only want to do this for unit tests.
172 if (!content::GetCurrentTestLauncherDelegate()) {
173 // For browser tests, this won't create the right object since
174 // TestChromeWebUIControllerFactory is used. That's created and
175 // registered in ChromeBrowserMainParts as in normal startup.
176 content::WebUIControllerFactory::RegisterFactory(
177 ChromeWebUIControllerFactory::GetInstance());
178 }
179 #endif
180
181 // Disable external libraries load if we are under python process in 98 // Disable external libraries load if we are under python process in
182 // ChromeOS. That means we are autotest and, if ASAN is used, 99 // ChromeOS. That means we are autotest and, if ASAN is used,
183 // external libraries load crashes. 100 // external libraries load crashes.
184 content::ContentTestSuiteBase::set_external_libraries_enabled( 101 if (!IsCrosPythonProcess())
185 !IsCrosPythonProcess()); 102 media::InitializeMediaLibraryForTesting();
103 #endif
186 104
187 // Initialize after overriding paths as some content paths depend on correct 105 // Initialize after overriding paths as some content paths depend on correct
188 // values for DIR_EXE and DIR_MODULE. 106 // values for DIR_EXE and DIR_MODULE.
189 content::ContentTestSuiteBase::Initialize(); 107 content::ContentTestSuiteBase::Initialize();
190 108
191 #if !defined(OS_IOS)
192 // For browser tests, a full chrome instance is initialized which will set up
193 // GLSurface itself. For unit tests, we need to set this up for them.
194 if (!IsBrowserTestSuite())
195 gfx::GLSurface::InitializeOneOffForTests();
196 #endif
197
198 #if defined(OS_MACOSX) && !defined(OS_IOS) 109 #if defined(OS_MACOSX) && !defined(OS_IOS)
199 // Look in the framework bundle for resources. 110 // Look in the framework bundle for resources.
200 base::FilePath path; 111 base::FilePath path;
201 PathService::Get(base::DIR_EXE, &path); 112 PathService::Get(base::DIR_EXE, &path);
202 path = path.Append(chrome::kFrameworkName); 113 path = path.Append(chrome::kFrameworkName);
203 base::mac::SetOverrideFrameworkBundlePath(path); 114 base::mac::SetOverrideFrameworkBundlePath(path);
204 #endif 115 #endif
205
206 // Force unittests to run using en-US so if we test against string
207 // output, it'll pass regardless of the system language.
208 ResourceBundle::InitSharedInstanceWithLocale("en-US", NULL);
209 base::FilePath resources_pack_path;
210 #if defined(OS_MACOSX) && !defined(OS_IOS)
211 PathService::Get(base::DIR_MODULE, &resources_pack_path);
212 resources_pack_path =
213 resources_pack_path.Append(FILE_PATH_LITERAL("resources.pak"));
214 #else
215 PathService::Get(chrome::FILE_RESOURCES_PACK, &resources_pack_path);
216 #endif
217 ResourceBundle::GetSharedInstance().AddDataPackFromPath(
218 resources_pack_path, ui::SCALE_FACTOR_NONE);
219
220 stats_filename_ = base::StringPrintf("unit_tests-%d",
221 base::GetCurrentProcId());
222 RemoveSharedMemoryFile(stats_filename_);
223 stats_table_.reset(new base::StatsTable(stats_filename_, 20, 200));
224 base::StatsTable::set_current(stats_table_.get());
225
226 testing::TestEventListeners& listeners =
227 testing::UnitTest::GetInstance()->listeners();
228 listeners.Append(new ChromeTestSuiteInitializer);
229 }
230
231 content::ContentClient* ChromeTestSuite::CreateClientForInitialization() {
232 return new ChromeContentClient();
233 } 116 }
234 117
235 void ChromeTestSuite::Shutdown() { 118 void ChromeTestSuite::Shutdown() {
236 ResourceBundle::CleanupSharedInstance();
237
238 #if defined(OS_MACOSX) && !defined(OS_IOS) 119 #if defined(OS_MACOSX) && !defined(OS_IOS)
239 base::mac::SetOverrideFrameworkBundle(NULL); 120 base::mac::SetOverrideFrameworkBundle(NULL);
240 #endif 121 #endif
241 122
242 base::StatsTable::set_current(NULL);
243 stats_table_.reset();
244 RemoveSharedMemoryFile(stats_filename_);
245
246 content::ContentTestSuiteBase::Shutdown(); 123 content::ContentTestSuiteBase::Shutdown();
247 } 124 }
OLDNEW
« no previous file with comments | « chrome/test/base/chrome_test_suite.h ('k') | chrome/test/base/chrome_unit_test_suite.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698