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

Side by Side Diff: chrome/test/ui/ui_test.cc

Issue 2859042: Cleanup: remove use_existing_browser infrastructure from ui_test. (Closed)
Patch Set: Created 10 years, 5 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
« no previous file with comments | « chrome/test/ui/ui_test.h ('k') | chrome/test/ui/ui_test_suite.cc » ('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) 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/ui/ui_test.h" 5 #include "chrome/test/ui/ui_test.h"
6 6
7 #if defined(OS_POSIX) 7 #if defined(OS_POSIX)
8 #include <signal.h> 8 #include <signal.h>
9 #include <sys/types.h> 9 #include <sys/types.h>
10 #endif 10 #endif
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 L"NOTE: This test is expected to fail if breakpad is not built in " 70 L"NOTE: This test is expected to fail if breakpad is not built in "
71 L"or if chromium is not running headless (try CHROME_HEADLESS=1)."; 71 L"or if chromium is not running headless (try CHROME_HEADLESS=1).";
72 #else 72 #else
73 L"NOTE: Crash service not ported to this platform!"; 73 L"NOTE: Crash service not ported to this platform!";
74 #endif 74 #endif
75 bool UITestBase::in_process_renderer_ = false; 75 bool UITestBase::in_process_renderer_ = false;
76 bool UITestBase::no_sandbox_ = false; 76 bool UITestBase::no_sandbox_ = false;
77 bool UITestBase::full_memory_dump_ = false; 77 bool UITestBase::full_memory_dump_ = false;
78 bool UITestBase::safe_plugins_ = false; 78 bool UITestBase::safe_plugins_ = false;
79 bool UITestBase::show_error_dialogs_ = true; 79 bool UITestBase::show_error_dialogs_ = true;
80 bool UITestBase::default_use_existing_browser_ = false;
81 bool UITestBase::dump_histograms_on_exit_ = false; 80 bool UITestBase::dump_histograms_on_exit_ = false;
82 bool UITestBase::enable_dcheck_ = false; 81 bool UITestBase::enable_dcheck_ = false;
83 bool UITestBase::silent_dump_on_dcheck_ = false; 82 bool UITestBase::silent_dump_on_dcheck_ = false;
84 bool UITestBase::disable_breakpad_ = false; 83 bool UITestBase::disable_breakpad_ = false;
85 int UITestBase::timeout_ms_ = 20 * 60 * 1000; 84 int UITestBase::timeout_ms_ = 20 * 60 * 1000;
86 std::wstring UITestBase::js_flags_ = L""; 85 std::wstring UITestBase::js_flags_ = L"";
87 std::wstring UITestBase::log_level_ = L""; 86 std::wstring UITestBase::log_level_ = L"";
88 87
89 // Specify the time (in milliseconds) that the ui_tests should wait before 88 // Specify the time (in milliseconds) that the ui_tests should wait before
90 // timing out. This is used to specify longer timeouts when running under Purify 89 // timing out. This is used to specify longer timeouts when running under Purify
(...skipping 20 matching lines...) Expand all
111 expected_errors_(0), 110 expected_errors_(0),
112 expected_crashes_(0), 111 expected_crashes_(0),
113 homepage_(L"about:blank"), 112 homepage_(L"about:blank"),
114 wait_for_initial_loads_(true), 113 wait_for_initial_loads_(true),
115 dom_automation_enabled_(false), 114 dom_automation_enabled_(false),
116 process_(base::kNullProcessHandle), 115 process_(base::kNullProcessHandle),
117 process_id_(-1), 116 process_id_(-1),
118 show_window_(false), 117 show_window_(false),
119 clear_profile_(true), 118 clear_profile_(true),
120 include_testing_id_(true), 119 include_testing_id_(true),
121 use_existing_browser_(default_use_existing_browser_),
122 enable_file_cookies_(true), 120 enable_file_cookies_(true),
123 profile_type_(UITestBase::DEFAULT_THEME), 121 profile_type_(UITestBase::DEFAULT_THEME),
124 shutdown_type_(UITestBase::WINDOW_CLOSE), 122 shutdown_type_(UITestBase::WINDOW_CLOSE),
125 test_start_time_(Time::NowFromSystemTime()), 123 test_start_time_(Time::NowFromSystemTime()),
126 command_execution_timeout_ms_(kCommandExecutionTimeout), 124 command_execution_timeout_ms_(kCommandExecutionTimeout),
127 action_timeout_ms_(kWaitForActionMsec), 125 action_timeout_ms_(kWaitForActionMsec),
128 action_max_timeout_ms_(kWaitForActionMaxMsec), 126 action_max_timeout_ms_(kWaitForActionMaxMsec),
129 sleep_timeout_ms_(kWaitForActionMsec), 127 sleep_timeout_ms_(kWaitForActionMsec),
130 terminate_timeout_ms_(kWaitForTerminateMsec) { 128 terminate_timeout_ms_(kWaitForTerminateMsec) {
131 PathService::Get(chrome::DIR_APP, &browser_directory_); 129 PathService::Get(chrome::DIR_APP, &browser_directory_);
132 PathService::Get(chrome::DIR_TEST_DATA, &test_data_directory_); 130 PathService::Get(chrome::DIR_TEST_DATA, &test_data_directory_);
133 } 131 }
134 132
135 UITestBase::UITestBase(MessageLoop::Type msg_loop_type) 133 UITestBase::UITestBase(MessageLoop::Type msg_loop_type)
136 : launch_arguments_(CommandLine::ARGUMENTS_ONLY), 134 : launch_arguments_(CommandLine::ARGUMENTS_ONLY),
137 expected_errors_(0), 135 expected_errors_(0),
138 expected_crashes_(0), 136 expected_crashes_(0),
139 homepage_(L"about:blank"), 137 homepage_(L"about:blank"),
140 wait_for_initial_loads_(true), 138 wait_for_initial_loads_(true),
141 dom_automation_enabled_(false), 139 dom_automation_enabled_(false),
142 process_(base::kNullProcessHandle), 140 process_(base::kNullProcessHandle),
143 process_id_(-1), 141 process_id_(-1),
144 show_window_(false), 142 show_window_(false),
145 clear_profile_(true), 143 clear_profile_(true),
146 include_testing_id_(true), 144 include_testing_id_(true),
147 use_existing_browser_(default_use_existing_browser_),
148 enable_file_cookies_(true), 145 enable_file_cookies_(true),
149 profile_type_(UITestBase::DEFAULT_THEME), 146 profile_type_(UITestBase::DEFAULT_THEME),
150 shutdown_type_(UITestBase::WINDOW_CLOSE), 147 shutdown_type_(UITestBase::WINDOW_CLOSE),
151 test_start_time_(Time::NowFromSystemTime()), 148 test_start_time_(Time::NowFromSystemTime()),
152 command_execution_timeout_ms_(kCommandExecutionTimeout), 149 command_execution_timeout_ms_(kCommandExecutionTimeout),
153 action_timeout_ms_(kWaitForActionMsec), 150 action_timeout_ms_(kWaitForActionMsec),
154 action_max_timeout_ms_(kWaitForActionMaxMsec), 151 action_max_timeout_ms_(kWaitForActionMaxMsec),
155 sleep_timeout_ms_(kWaitForActionMsec), 152 sleep_timeout_ms_(kWaitForActionMsec),
156 terminate_timeout_ms_(kWaitForTerminateMsec) { 153 terminate_timeout_ms_(kWaitForTerminateMsec) {
157 PathService::Get(chrome::DIR_APP, &browser_directory_); 154 PathService::Get(chrome::DIR_APP, &browser_directory_);
158 PathService::Get(chrome::DIR_TEST_DATA, &test_data_directory_); 155 PathService::Get(chrome::DIR_TEST_DATA, &test_data_directory_);
159 } 156 }
160 157
161 UITestBase::~UITestBase() { 158 UITestBase::~UITestBase() {
162 } 159 }
163 160
164 void UITestBase::SetUp() { 161 void UITestBase::SetUp() {
165 if (!use_existing_browser_) { 162 AssertAppNotRunning(L"Please close any other instances "
166 AssertAppNotRunning(L"Please close any other instances " 163 L"of the app before testing.");
167 L"of the app before testing.");
168 }
169 164
170 InitializeTimeouts(); 165 InitializeTimeouts();
171 JavaScriptExecutionController::set_timeout(action_max_timeout_ms_); 166 JavaScriptExecutionController::set_timeout(action_max_timeout_ms_);
172 LaunchBrowserAndServer(); 167 LaunchBrowserAndServer();
173 } 168 }
174 169
175 void UITestBase::TearDown() { 170 void UITestBase::TearDown() {
176 CloseBrowserAndServer(); 171 CloseBrowserAndServer();
177 172
178 // Make sure that we didn't encounter any assertion failures 173 // Make sure that we didn't encounter any assertion failures
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 // If we're using the complex theme data, we need to write the 389 // If we're using the complex theme data, we need to write the
395 // user_data_dir_ to our preferences file. 390 // user_data_dir_ to our preferences file.
396 if (profile_type_ == UITestBase::COMPLEX_THEME) { 391 if (profile_type_ == UITestBase::COMPLEX_THEME) {
397 RewritePreferencesFile(user_data_dir_); 392 RewritePreferencesFile(user_data_dir_);
398 } 393 }
399 394
400 // Update the history file to include recent dates. 395 // Update the history file to include recent dates.
401 UpdateHistoryDates(); 396 UpdateHistoryDates();
402 } 397 }
403 398
404 ASSERT_TRUE(LaunchBrowserHelper(arguments, use_existing_browser_, false, 399 ASSERT_TRUE(LaunchBrowserHelper(arguments, false, &process_));
405 &process_));
406 process_id_ = base::GetProcId(process_); 400 process_id_ = base::GetProcId(process_);
407 } 401 }
408 402
409 bool UITestBase::LaunchAnotherBrowserBlockUntilClosed( 403 bool UITestBase::LaunchAnotherBrowserBlockUntilClosed(
410 const CommandLine& cmdline) { 404 const CommandLine& cmdline) {
411 return LaunchBrowserHelper(cmdline, false, true, NULL); 405 return LaunchBrowserHelper(cmdline, true, NULL);
412 } 406 }
413 407
414 void UITestBase::QuitBrowser() { 408 void UITestBase::QuitBrowser() {
415 if (SESSION_ENDING == shutdown_type_) { 409 if (SESSION_ENDING == shutdown_type_) {
416 TerminateBrowser(); 410 TerminateBrowser();
417 return; 411 return;
418 } 412 }
419 413
420 // There's nothing to do here if the browser is not running. 414 // There's nothing to do here if the browser is not running.
421 if (IsBrowserRunning()) { 415 if (IsBrowserRunning()) {
(...skipping 650 matching lines...) Expand 10 before | Expand all | Expand 10 after
1072 } else { 1066 } else {
1073 EXPECT_NE(generated_file_size, original_file_size); 1067 EXPECT_NE(generated_file_size, original_file_size);
1074 EXPECT_FALSE(file_util::ContentsEqual(generated_file, original_file)); 1068 EXPECT_FALSE(file_util::ContentsEqual(generated_file, original_file));
1075 } 1069 }
1076 } 1070 }
1077 if (delete_generated_file) 1071 if (delete_generated_file)
1078 EXPECT_TRUE(file_util::DieFileDie(generated_file, false)); 1072 EXPECT_TRUE(file_util::DieFileDie(generated_file, false));
1079 } 1073 }
1080 1074
1081 bool UITestBase::LaunchBrowserHelper(const CommandLine& arguments, 1075 bool UITestBase::LaunchBrowserHelper(const CommandLine& arguments,
1082 bool use_existing_browser, 1076 bool wait,
1083 bool wait, 1077 base::ProcessHandle* process) {
1084 base::ProcessHandle* process) {
1085 FilePath command = browser_directory_.Append( 1078 FilePath command = browser_directory_.Append(
1086 FilePath::FromWStringHack(chrome::kBrowserProcessExecutablePath)); 1079 FilePath::FromWStringHack(chrome::kBrowserProcessExecutablePath));
1087 CommandLine command_line(command); 1080 CommandLine command_line(command);
1088 1081
1089 // Add any explicit command line flags passed to the process. 1082 // Add any explicit command line flags passed to the process.
1090 std::wstring extra_chrome_flags = 1083 std::wstring extra_chrome_flags =
1091 CommandLine::ForCurrentProcess()->GetSwitchValue(kExtraChromeFlagsSwitch); 1084 CommandLine::ForCurrentProcess()->GetSwitchValue(kExtraChromeFlagsSwitch);
1092 if (!extra_chrome_flags.empty()) { 1085 if (!extra_chrome_flags.empty()) {
1093 // Split by spaces and append to command line 1086 // Split by spaces and append to command line
1094 std::vector<std::wstring> flags; 1087 std::vector<std::wstring> flags;
(...skipping 14 matching lines...) Expand all
1109 ASCIIToWide(kUITestType)); 1102 ASCIIToWide(kUITestType));
1110 1103
1111 // We need cookies on file:// for things like the page cycler. 1104 // We need cookies on file:// for things like the page cycler.
1112 if (enable_file_cookies_) 1105 if (enable_file_cookies_)
1113 command_line.AppendSwitch(switches::kEnableFileCookies); 1106 command_line.AppendSwitch(switches::kEnableFileCookies);
1114 1107
1115 if (dom_automation_enabled_) 1108 if (dom_automation_enabled_)
1116 command_line.AppendSwitch(switches::kDomAutomationController); 1109 command_line.AppendSwitch(switches::kDomAutomationController);
1117 1110
1118 if (include_testing_id_) { 1111 if (include_testing_id_) {
1119 if (use_existing_browser) { 1112 command_line.AppendSwitchWithValue(switches::kTestingChannelID,
1120 // TODO(erikkay): The new switch depends on a browser instance already 1113 ASCIIToWide(server_->channel_id()));
1121 // running, it won't open a new browser window if it's not. We could fix
1122 // this by passing an url (e.g. about:blank) on the command line, but
1123 // I decided to keep using the old switch in the existing use case to
1124 // minimize changes in behavior.
1125 command_line.AppendSwitchWithValue(switches::kAutomationClientChannelID,
1126 ASCIIToWide(server_->channel_id()));
1127 } else {
1128 command_line.AppendSwitchWithValue(switches::kTestingChannelID,
1129 ASCIIToWide(server_->channel_id()));
1130 }
1131 } 1114 }
1132 1115
1133 if (!show_error_dialogs_ && 1116 if (!show_error_dialogs_ &&
1134 !CommandLine::ForCurrentProcess()->HasSwitch(kEnableErrorDialogs)) { 1117 !CommandLine::ForCurrentProcess()->HasSwitch(kEnableErrorDialogs)) {
1135 command_line.AppendSwitch(switches::kNoErrorDialogs); 1118 command_line.AppendSwitch(switches::kNoErrorDialogs);
1136 } 1119 }
1137 if (in_process_renderer_) 1120 if (in_process_renderer_)
1138 command_line.AppendSwitch(switches::kSingleProcess); 1121 command_line.AppendSwitch(switches::kSingleProcess);
1139 if (no_sandbox_) 1122 if (no_sandbox_)
1140 command_line.AppendSwitch(switches::kNoSandbox); 1123 command_line.AppendSwitch(switches::kNoSandbox);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1204 command_line.PrependWrapper(ASCIIToWide(browser_wrapper)); 1187 command_line.PrependWrapper(ASCIIToWide(browser_wrapper));
1205 LOG(INFO) << "BROWSER_WRAPPER was set, prefixing command_line with " 1188 LOG(INFO) << "BROWSER_WRAPPER was set, prefixing command_line with "
1206 << browser_wrapper; 1189 << browser_wrapper;
1207 } 1190 }
1208 1191
1209 bool started = base::LaunchApp(command_line.argv(), 1192 bool started = base::LaunchApp(command_line.argv(),
1210 server_->fds_to_map(), 1193 server_->fds_to_map(),
1211 wait, 1194 wait,
1212 process); 1195 process);
1213 #endif 1196 #endif
1214 if (!started)
1215 return false;
1216 1197
1217 if (use_existing_browser) { 1198 return started;
1218 #if defined(OS_WIN)
1219 DWORD pid = 0;
1220 HWND hwnd = FindWindowEx(HWND_MESSAGE, NULL, chrome::kMessageWindowClass,
1221 user_data_dir_.value().c_str());
1222 GetWindowThreadProcessId(hwnd, &pid);
1223 // This mode doesn't work if we wound up launching a new browser ourselves.
1224 EXPECT_NE(pid, base::GetProcId(*process));
1225 CloseHandle(*process);
1226 *process = OpenProcess(SYNCHRONIZE, false, pid);
1227 #else
1228 // TODO(port): above code is very Windows-specific; we need to
1229 // figure out and abstract out how we'll handle finding any existing
1230 // running process, etc. on other platforms.
1231 NOTIMPLEMENTED();
1232 #endif
1233 }
1234
1235 return true;
1236 } 1199 }
1237 1200
1238 void UITestBase::UpdateHistoryDates() { 1201 void UITestBase::UpdateHistoryDates() {
1239 // Migrate the times in the segment_usage table to yesterday so we get 1202 // Migrate the times in the segment_usage table to yesterday so we get
1240 // actual thumbnails on the NTP. 1203 // actual thumbnails on the NTP.
1241 sql::Connection db; 1204 sql::Connection db;
1242 FilePath history = 1205 FilePath history =
1243 user_data_dir_.AppendASCII("Default").AppendASCII("History"); 1206 user_data_dir_.AppendASCII("Default").AppendASCII("History");
1244 // Not all test profiles have a history file. 1207 // Not all test profiles have a history file.
1245 if (!file_util::PathExists(history)) 1208 if (!file_util::PathExists(history))
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
1535 set_ui_test_name(ASCIIToWide(test_name)); 1498 set_ui_test_name(ASCIIToWide(test_name));
1536 } 1499 }
1537 UITestBase::SetUp(); 1500 UITestBase::SetUp();
1538 PlatformTest::SetUp(); 1501 PlatformTest::SetUp();
1539 } 1502 }
1540 1503
1541 void UITest::TearDown() { 1504 void UITest::TearDown() {
1542 UITestBase::TearDown(); 1505 UITestBase::TearDown();
1543 PlatformTest::TearDown(); 1506 PlatformTest::TearDown();
1544 } 1507 }
OLDNEW
« no previous file with comments | « chrome/test/ui/ui_test.h ('k') | chrome/test/ui/ui_test_suite.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698