OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/in_process_browser_test.h" | 5 #include "chrome/test/in_process_browser_test.h" |
6 | 6 |
7 #include "app/app_switches.h" | 7 #include "app/app_switches.h" |
8 #include "app/gfx/gl/gl_implementation.h" | 8 #include "app/gfx/gl/gl_implementation.h" |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/file_path.h" | 10 #include "base/file_path.h" |
(...skipping 25 matching lines...) Expand all Loading... |
36 #include "chrome/common/notification_registrar.h" | 36 #include "chrome/common/notification_registrar.h" |
37 #include "chrome/common/notification_type.h" | 37 #include "chrome/common/notification_type.h" |
38 #include "chrome/common/url_constants.h" | 38 #include "chrome/common/url_constants.h" |
39 #include "chrome/test/test_launcher_utils.h" | 39 #include "chrome/test/test_launcher_utils.h" |
40 #include "chrome/test/testing_browser_process.h" | 40 #include "chrome/test/testing_browser_process.h" |
41 #include "chrome/test/ui_test_utils.h" | 41 #include "chrome/test/ui_test_utils.h" |
42 #include "net/base/mock_host_resolver.h" | 42 #include "net/base/mock_host_resolver.h" |
43 #include "net/test/test_server.h" | 43 #include "net/test/test_server.h" |
44 #include "sandbox/src/dep.h" | 44 #include "sandbox/src/dep.h" |
45 | 45 |
| 46 #if defined(OS_CHROMEOS) |
| 47 #include "chrome/browser/chromeos/cros/cros_library.h" |
| 48 #endif // defined(OS_CHROMEOS) |
| 49 |
| 50 #if defined(OS_MACOSX) |
| 51 #include "base/mac_util.h" |
| 52 #endif |
| 53 |
46 #if defined(OS_WIN) | 54 #if defined(OS_WIN) |
47 #include "chrome/browser/views/frame/browser_view.h" | 55 #include "chrome/browser/views/frame/browser_view.h" |
48 #endif | 56 #endif |
49 | 57 |
50 #if defined(OS_CHROMEOS) | |
51 #include "chrome/browser/chromeos/cros/cros_library.h" | |
52 #endif // defined(OS_CHROMEOS) | |
53 | |
54 namespace { | 58 namespace { |
55 | 59 |
56 void InitializeBrowser(Browser* browser) { | 60 void InitializeBrowser(Browser* browser) { |
57 browser->AddSelectedTabWithURL(GURL(chrome::kAboutBlankURL), | 61 browser->AddSelectedTabWithURL(GURL(chrome::kAboutBlankURL), |
58 PageTransition::START_PAGE); | 62 PageTransition::START_PAGE); |
59 | 63 |
60 // Wait for the page to finish loading. | 64 // Wait for the page to finish loading. |
61 ui_test_utils::WaitForNavigation( | 65 ui_test_utils::WaitForNavigation( |
62 &browser->GetSelectedTabContents()->controller()); | 66 &browser->GetSelectedTabContents()->controller()); |
63 | 67 |
64 browser->window()->Show(); | 68 browser->window()->Show(); |
65 } | 69 } |
66 | 70 |
67 } // namespace | 71 } // namespace |
68 | 72 |
69 extern int BrowserMain(const MainFunctionParams&); | 73 extern int BrowserMain(const MainFunctionParams&); |
70 | 74 |
71 const wchar_t kUnitTestShowWindows[] = L"show-windows"; | 75 const wchar_t kUnitTestShowWindows[] = L"show-windows"; |
72 | 76 |
73 // Passed as value of kTestType. | 77 // Passed as value of kTestType. |
74 static const char kBrowserTestType[] = "browser"; | 78 static const char kBrowserTestType[] = "browser"; |
75 | 79 |
76 InProcessBrowserTest::InProcessBrowserTest() | 80 InProcessBrowserTest::InProcessBrowserTest() |
77 : browser_(NULL), | 81 : browser_(NULL), |
78 test_server_(net::TestServer::TYPE_HTTP, | |
79 FilePath(FILE_PATH_LITERAL("chrome/test/data"))), | |
80 show_window_(false), | 82 show_window_(false), |
81 dom_automation_enabled_(false), | 83 dom_automation_enabled_(false), |
82 tab_closeable_state_watcher_enabled_(false), | 84 tab_closeable_state_watcher_enabled_(false), |
83 original_single_process_(false) { | 85 original_single_process_(false) { |
| 86 #if defined(OS_MACOSX) |
| 87 mac_util::SetOverrideAmIBundled(true); |
| 88 #endif |
| 89 |
| 90 // Before we run the browser, we have to hack the path to the exe to match |
| 91 // what it would be if Chrome was running, because it is used to fork renderer |
| 92 // processes, on Linux at least (failure to do so will cause a browser_test to |
| 93 // be run instead of a renderer). |
| 94 FilePath chrome_path; |
| 95 CHECK(PathService::Get(base::FILE_EXE, &chrome_path)); |
| 96 chrome_path = chrome_path.DirName(); |
| 97 #if defined(OS_WIN) |
| 98 chrome_path = chrome_path.Append(chrome::kBrowserProcessExecutablePath); |
| 99 #elif defined(OS_POSIX) |
| 100 chrome_path = chrome_path.Append( |
| 101 WideToASCII(chrome::kBrowserProcessExecutablePath)); |
| 102 #endif |
| 103 CHECK(PathService::Override(base::FILE_EXE, chrome_path)); |
| 104 |
| 105 test_server_.reset(new net::TestServer( |
| 106 net::TestServer::TYPE_HTTP, |
| 107 FilePath(FILE_PATH_LITERAL("chrome/test/data")))); |
84 } | 108 } |
85 | 109 |
86 InProcessBrowserTest::~InProcessBrowserTest() { | 110 InProcessBrowserTest::~InProcessBrowserTest() { |
87 } | 111 } |
88 | 112 |
89 void InProcessBrowserTest::SetUp() { | 113 void InProcessBrowserTest::SetUp() { |
90 // Remember the command line. Normally this doesn't matter, because the test | 114 // Remember the command line. Normally this doesn't matter, because the test |
91 // harness creates a new process for each test, but when the test harness is | 115 // harness creates a new process for each test, but when the test harness is |
92 // running in single process mode, we can't let one test's command-line | 116 // running in single process mode, we can't let one test's command-line |
93 // changes (e.g. enabling DOM automation) affect other tests. | 117 // changes (e.g. enabling DOM automation) affect other tests. |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 #if defined(OS_WIN) | 171 #if defined(OS_WIN) |
148 // The Windows sandbox requires that the browser and child processes are the | 172 // The Windows sandbox requires that the browser and child processes are the |
149 // same binary. So we launch browser_process.exe which loads chrome.dll | 173 // same binary. So we launch browser_process.exe which loads chrome.dll |
150 command_line->AppendSwitchPath(switches::kBrowserSubprocessPath, | 174 command_line->AppendSwitchPath(switches::kBrowserSubprocessPath, |
151 command_line->GetProgram()); | 175 command_line->GetProgram()); |
152 #else | 176 #else |
153 // Explicitly set the path of the binary used for child processes, otherwise | 177 // Explicitly set the path of the binary used for child processes, otherwise |
154 // they'll try to use browser_tests which doesn't contain ChromeMain. | 178 // they'll try to use browser_tests which doesn't contain ChromeMain. |
155 FilePath subprocess_path; | 179 FilePath subprocess_path; |
156 PathService::Get(base::FILE_EXE, &subprocess_path); | 180 PathService::Get(base::FILE_EXE, &subprocess_path); |
157 subprocess_path = subprocess_path.DirName(); | |
158 subprocess_path = subprocess_path.AppendASCII(WideToASCII( | |
159 chrome::kBrowserProcessExecutablePath)); | |
160 #if defined(OS_MACOSX) | 181 #if defined(OS_MACOSX) |
161 // Recreate the real environment, run the helper within the app bundle. | 182 // Recreate the real environment, run the helper within the app bundle. |
162 subprocess_path = subprocess_path.DirName().DirName(); | 183 subprocess_path = subprocess_path.DirName().DirName(); |
163 DCHECK_EQ(subprocess_path.BaseName().value(), "Contents"); | 184 DCHECK_EQ(subprocess_path.BaseName().value(), "Contents"); |
164 subprocess_path = | 185 subprocess_path = |
165 subprocess_path.Append("Versions").Append(chrome::kChromeVersion); | 186 subprocess_path.Append("Versions").Append(chrome::kChromeVersion); |
166 subprocess_path = | 187 subprocess_path = |
167 subprocess_path.Append(chrome::kHelperProcessExecutablePath); | 188 subprocess_path.Append(chrome::kHelperProcessExecutablePath); |
168 #endif | 189 #endif |
169 command_line->AppendSwitchPath(switches::kBrowserSubprocessPath, | 190 command_line->AppendSwitchPath(switches::kBrowserSubprocessPath, |
(...skipping 28 matching lines...) Expand all Loading... |
198 | 219 |
199 // See http://en.wikipedia.org/wiki/Web_Proxy_Autodiscovery_Protocol | 220 // See http://en.wikipedia.org/wiki/Web_Proxy_Autodiscovery_Protocol |
200 // We don't want the test code to use it. | 221 // We don't want the test code to use it. |
201 host_resolver_->AddSimulatedFailure("wpad"); | 222 host_resolver_->AddSimulatedFailure("wpad"); |
202 | 223 |
203 net::ScopedDefaultHostResolverProc scoped_host_resolver_proc( | 224 net::ScopedDefaultHostResolverProc scoped_host_resolver_proc( |
204 host_resolver_.get()); | 225 host_resolver_.get()); |
205 | 226 |
206 SetUpInProcessBrowserTestFixture(); | 227 SetUpInProcessBrowserTestFixture(); |
207 | 228 |
208 // Before we run the browser, we have to hack the path to the exe to match | |
209 // what it would be if Chrome was running, because it is used to fork renderer | |
210 // processes, on Linux at least (failure to do so will cause a browser_test to | |
211 // be run instead of a renderer). | |
212 FilePath chrome_path; | |
213 CHECK(PathService::Get(base::FILE_EXE, &chrome_path)); | |
214 chrome_path = chrome_path.DirName(); | |
215 #if defined(OS_WIN) | |
216 chrome_path = chrome_path.Append(chrome::kBrowserProcessExecutablePath); | |
217 #elif defined(OS_POSIX) | |
218 chrome_path = chrome_path.Append( | |
219 WideToASCII(chrome::kBrowserProcessExecutablePath)); | |
220 #endif | |
221 CHECK(PathService::Override(base::FILE_EXE, chrome_path)); | |
222 | |
223 BrowserMain(params); | 229 BrowserMain(params); |
224 TearDownInProcessBrowserTestFixture(); | 230 TearDownInProcessBrowserTestFixture(); |
225 } | 231 } |
226 | 232 |
227 bool InProcessBrowserTest::CreateUserDataDirectory() { | 233 bool InProcessBrowserTest::CreateUserDataDirectory() { |
228 CommandLine* command_line = CommandLine::ForCurrentProcessMutable(); | 234 CommandLine* command_line = CommandLine::ForCurrentProcessMutable(); |
229 FilePath user_data_dir = | 235 FilePath user_data_dir = |
230 command_line->GetSwitchValuePath(switches::kUserDataDir); | 236 command_line->GetSwitchValuePath(switches::kUserDataDir); |
231 if (user_data_dir.empty()) { | 237 if (user_data_dir.empty()) { |
232 if (temp_user_data_dir_.CreateUniqueTempDir() && | 238 if (temp_user_data_dir_.CreateUniqueTempDir() && |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
346 return; | 352 return; |
347 | 353 |
348 // Invoke CloseAllBrowsersAndExit on a running message loop. | 354 // Invoke CloseAllBrowsersAndExit on a running message loop. |
349 // CloseAllBrowsersAndExit exits the message loop after everything has been | 355 // CloseAllBrowsersAndExit exits the message loop after everything has been |
350 // shut down properly. | 356 // shut down properly. |
351 MessageLoopForUI::current()->PostTask( | 357 MessageLoopForUI::current()->PostTask( |
352 FROM_HERE, | 358 FROM_HERE, |
353 NewRunnableFunction(&BrowserList::CloseAllBrowsersAndExit)); | 359 NewRunnableFunction(&BrowserList::CloseAllBrowsersAndExit)); |
354 ui_test_utils::RunMessageLoop(); | 360 ui_test_utils::RunMessageLoop(); |
355 } | 361 } |
OLD | NEW |