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

Side by Side Diff: chrome/test/webdriver/automation.cc

Issue 6992015: Fix minor issues in ChromeDriver. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ... Created 9 years, 7 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/webdriver/automation.h ('k') | chrome/test/webdriver/chromedriver_tests.py » ('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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/webdriver/automation.h" 5 #include "chrome/test/webdriver/automation.h"
6 6
7 #if defined(OS_WIN) 7 #if defined(OS_WIN)
8 #include <windows.h> 8 #include <windows.h>
9 #endif 9 #endif
10 10
11 #include "base/base_paths.h" 11 #include "base/base_paths.h"
12 #include "base/command_line.h" 12 #include "base/command_line.h"
13 #include "base/environment.h" 13 #include "base/environment.h"
14 #include "base/file_path.h" 14 #include "base/file_path.h"
15 #include "base/file_util.h" 15 #include "base/file_util.h"
16 #include "base/json/json_writer.h" 16 #include "base/json/json_writer.h"
17 #include "base/logging.h" 17 #include "base/logging.h"
18 #include "base/path_service.h" 18 #include "base/path_service.h"
19 #include "base/string_number_conversions.h"
20 #include "base/string_split.h"
19 #include "base/stringprintf.h" 21 #include "base/stringprintf.h"
20 #include "base/utf_string_conversions.h" 22 #include "base/utf_string_conversions.h"
21 #include "base/values.h" 23 #include "base/values.h"
22 #include "chrome/common/automation_constants.h" 24 #include "chrome/common/automation_constants.h"
23 #include "chrome/common/chrome_constants.h" 25 #include "chrome/common/chrome_constants.h"
24 #include "chrome/common/chrome_switches.h" 26 #include "chrome/common/chrome_switches.h"
25 #include "chrome/common/url_constants.h" 27 #include "chrome/common/url_constants.h"
26 #include "chrome/test/automation/automation_json_requests.h" 28 #include "chrome/test/automation/automation_json_requests.h"
27 #include "chrome/test/automation/automation_proxy.h" 29 #include "chrome/test/automation/automation_proxy.h"
28 #include "chrome/test/automation/proxy_launcher.h" 30 #include "chrome/test/automation/proxy_launcher.h"
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 }; 167 };
166 168
167 if (!launcher_->LaunchBrowserAndServer(launch_props, true)) { 169 if (!launcher_->LaunchBrowserAndServer(launch_props, true)) {
168 *error = new Error( 170 *error = new Error(
169 kUnknownError, 171 kUnknownError,
170 "Unable to either launch or connect to Chrome. Please check that " 172 "Unable to either launch or connect to Chrome. Please check that "
171 "ChromeDriver is up-to-date"); 173 "ChromeDriver is up-to-date");
172 return; 174 return;
173 } 175 }
174 176
175 int version = 0; 177 bool has_automation_version = false;
176 std::string error_msg; 178 *error = CompareVersion(730, 0, &has_automation_version);
177 if (!SendGetChromeDriverAutomationVersion( 179 if (*error)
178 automation(), &version, &error_msg)) {
179 *error = CreateChromeError(error_msg);
180 return; 180 return;
181 } 181 if (has_automation_version) {
182 if (version > automation::kChromeDriverAutomationVersion) { 182 int version = 0;
183 *error = new Error( 183 std::string error_msg;
184 kUnknownError, 184 if (!SendGetChromeDriverAutomationVersion(
185 "ChromeDriver is not compatible with this version of Chrome."); 185 automation(), &version, &error_msg)) {
186 return; 186 *error = CreateChromeError(error_msg);
187 return;
188 }
189 if (version > automation::kChromeDriverAutomationVersion) {
190 *error = new Error(
191 kUnknownError,
192 "ChromeDriver is not compatible with this version of Chrome.");
193 return;
194 }
187 } 195 }
188 } 196 }
189 197
190 void Automation::Terminate() { 198 void Automation::Terminate() {
191 if (launcher_.get() && launcher_->process() != base::kNullProcessHandle) { 199 if (launcher_.get() && launcher_->process() != base::kNullProcessHandle) {
192 launcher_->QuitBrowser(); 200 launcher_->QuitBrowser();
193 } 201 }
194 } 202 }
195 203
196 void Automation::ExecuteScript(int tab_id, 204 void Automation::ExecuteScript(int tab_id,
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 std::string error_msg; 267 std::string error_msg;
260 if (!SendMouseDragJSONRequest(automation(), windex, tab_index, start.x(), 268 if (!SendMouseDragJSONRequest(automation(), windex, tab_index, start.x(),
261 start.y(), end.x(), end.y(), &error_msg)) { 269 start.y(), end.x(), end.y(), &error_msg)) {
262 *error = CreateChromeError(error_msg); 270 *error = CreateChromeError(error_msg);
263 } 271 }
264 } 272 }
265 273
266 void Automation::MouseButtonUp(int tab_id, 274 void Automation::MouseButtonUp(int tab_id,
267 const gfx::Point& p, 275 const gfx::Point& p,
268 Error** error) { 276 Error** error) {
277 *error = CheckAdvancedInteractionsSupported();
278 if (*error)
279 return;
280
269 int windex = 0, tab_index = 0; 281 int windex = 0, tab_index = 0;
270 *error = GetIndicesForTab(tab_id, &windex, &tab_index); 282 *error = GetIndicesForTab(tab_id, &windex, &tab_index);
271 if (*error) 283 if (*error)
272 return; 284 return;
273 285
274 std::string error_msg; 286 std::string error_msg;
275 if (!SendMouseButtonUpJSONRequest( 287 if (!SendMouseButtonUpJSONRequest(
276 automation(), windex, tab_index, p.x(), p.y(), &error_msg)) { 288 automation(), windex, tab_index, p.x(), p.y(), &error_msg)) {
277 *error = CreateChromeError(error_msg); 289 *error = CreateChromeError(error_msg);
278 } 290 }
279 } 291 }
280 292
281 void Automation::MouseButtonDown(int tab_id, 293 void Automation::MouseButtonDown(int tab_id,
282 const gfx::Point& p, 294 const gfx::Point& p,
283 Error** error) { 295 Error** error) {
296 *error = CheckAdvancedInteractionsSupported();
297 if (*error)
298 return;
299
284 int windex = 0, tab_index = 0; 300 int windex = 0, tab_index = 0;
285 *error = GetIndicesForTab(tab_id, &windex, &tab_index); 301 *error = GetIndicesForTab(tab_id, &windex, &tab_index);
286 if (*error) 302 if (*error)
287 return; 303 return;
288 304
289 std::string error_msg; 305 std::string error_msg;
290 if (!SendMouseButtonDownJSONRequest( 306 if (!SendMouseButtonDownJSONRequest(
291 automation(), windex, tab_index, p.x(), p.y(), &error_msg)) { 307 automation(), windex, tab_index, p.x(), p.y(), &error_msg)) {
292 *error = CreateChromeError(error_msg); 308 *error = CreateChromeError(error_msg);
293 } 309 }
294 } 310 }
295 311
296 void Automation::MouseDoubleClick(int tab_id, 312 void Automation::MouseDoubleClick(int tab_id,
297 const gfx::Point& p, 313 const gfx::Point& p,
298 Error** error) { 314 Error** error) {
315 *error = CheckAdvancedInteractionsSupported();
316 if (*error)
317 return;
318
299 int windex = 0, tab_index = 0; 319 int windex = 0, tab_index = 0;
300 *error = GetIndicesForTab(tab_id, &windex, &tab_index); 320 *error = GetIndicesForTab(tab_id, &windex, &tab_index);
301 if (*error) 321 if (*error)
302 return; 322 return;
303 323
304 std::string error_msg; 324 std::string error_msg;
305 if (!SendMouseDoubleClickJSONRequest( 325 if (!SendMouseDoubleClickJSONRequest(
306 automation(), windex, tab_index, p.x(), p.y(), &error_msg)) { 326 automation(), windex, tab_index, p.x(), p.y(), &error_msg)) {
307 *error = CreateChromeError(error_msg); 327 *error = CreateChromeError(error_msg);
308 } 328 }
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 *error = GetIndicesForTab(tab_id, &windex, &tab_index); 527 *error = GetIndicesForTab(tab_id, &windex, &tab_index);
508 if (*error) 528 if (*error)
509 return; 529 return;
510 530
511 std::string error_msg; 531 std::string error_msg;
512 if (!SendCloseTabJSONRequest(automation(), windex, tab_index, &error_msg)) 532 if (!SendCloseTabJSONRequest(automation(), windex, tab_index, &error_msg))
513 *error = CreateChromeError(error_msg); 533 *error = CreateChromeError(error_msg);
514 } 534 }
515 535
516 void Automation::GetAppModalDialogMessage(std::string* message, Error** error) { 536 void Automation::GetAppModalDialogMessage(std::string* message, Error** error) {
537 *error = CheckAlertsSupported();
538 if (*error)
539 return;
540
517 std::string error_msg; 541 std::string error_msg;
518 if (!SendGetAppModalDialogMessageJSONRequest( 542 if (!SendGetAppModalDialogMessageJSONRequest(
519 automation(), message, &error_msg)) { 543 automation(), message, &error_msg)) {
520 *error = CreateChromeError(error_msg); 544 *error = CreateChromeError(error_msg);
521 } 545 }
522 } 546 }
523 547
524 void Automation::AcceptOrDismissAppModalDialog(bool accept, Error** error) { 548 void Automation::AcceptOrDismissAppModalDialog(bool accept, Error** error) {
549 *error = CheckAlertsSupported();
550 if (*error)
551 return;
552
525 std::string error_msg; 553 std::string error_msg;
526 if (!SendAcceptOrDismissAppModalDialogJSONRequest( 554 if (!SendAcceptOrDismissAppModalDialogJSONRequest(
527 automation(), accept, &error_msg)) { 555 automation(), accept, &error_msg)) {
528 *error = CreateChromeError(error_msg); 556 *error = CreateChromeError(error_msg);
529 } 557 }
530 } 558 }
531 559
532 void Automation::AcceptPromptAppModalDialog(const std::string& prompt_text, 560 void Automation::AcceptPromptAppModalDialog(const std::string& prompt_text,
533 Error** error) { 561 Error** error) {
562 *error = CheckAlertsSupported();
563 if (*error)
564 return;
565
534 std::string error_msg; 566 std::string error_msg;
535 if (!SendAcceptPromptAppModalDialogJSONRequest( 567 if (!SendAcceptPromptAppModalDialogJSONRequest(
536 automation(), prompt_text, &error_msg)) { 568 automation(), prompt_text, &error_msg)) {
537 *error = CreateChromeError(error_msg); 569 *error = CreateChromeError(error_msg);
538 } 570 }
539 } 571 }
540 572
541 void Automation::GetBrowserVersion(std::string* version) { 573 void Automation::GetBrowserVersion(std::string* version) {
542 *version = automation()->server_version(); 574 *version = automation()->server_version();
543 } 575 }
(...skipping 21 matching lines...) Expand all
565 automation(), tab_id, browser_index, tab_index, &error_msg)) { 597 automation(), tab_id, browser_index, tab_index, &error_msg)) {
566 return CreateChromeError(error_msg); 598 return CreateChromeError(error_msg);
567 } 599 }
568 return NULL; 600 return NULL;
569 } 601 }
570 602
571 Error* Automation::CreateChromeError(const std::string& message) { 603 Error* Automation::CreateChromeError(const std::string& message) {
572 return new Error(kUnknownError, "Internal Chrome error: " + message); 604 return new Error(kUnknownError, "Internal Chrome error: " + message);
573 } 605 }
574 606
607 Error* Automation::CompareVersion(int client_build_no,
608 int client_patch_no,
609 bool* is_newer_or_equal) {
610 std::string version = automation()->server_version();
611 std::vector<std::string> split_version;
612 base::SplitString(version, '.', &split_version);
613 if (split_version.size() != 4) {
614 return new Error(
615 kUnknownError, "Browser version has unrecognized format: " + version);
616 }
617 int build_no, patch_no;
618 if (!base::StringToInt(split_version[2], &build_no) ||
619 !base::StringToInt(split_version[3], &patch_no)) {
620 return new Error(
621 kUnknownError, "Browser version has unrecognized format: " + version);
622 }
623 if (build_no < client_build_no)
624 *is_newer_or_equal = false;
625 else if (build_no > client_build_no)
626 *is_newer_or_equal = true;
627 else
628 *is_newer_or_equal = patch_no >= client_patch_no;
629 return NULL;
630 }
631
632 Error* Automation::CheckVersion(int client_build_no,
633 int client_patch_no,
634 const std::string& error_msg) {
635 bool version_is_ok = false;
636 Error* error = CompareVersion(
637 client_build_no, client_patch_no, &version_is_ok);
638 if (error)
639 return error;
640 if (!version_is_ok)
641 return new Error(kUnknownError, error_msg);
642 return NULL;
643 }
644
645 Error* Automation::CheckAlertsSupported() {
646 return CheckVersion(
647 768, 0, "Alerts are not supported for this version of Chrome");
648 }
649
650 Error* Automation::CheckAdvancedInteractionsSupported() {
651 const char* message =
652 "Advanced user interactions are not supported for this version of Chrome";
653 return CheckVersion(750, 0, message);
654 }
655
575 } // namespace webdriver 656 } // namespace webdriver
OLDNEW
« no previous file with comments | « chrome/test/webdriver/automation.h ('k') | chrome/test/webdriver/chromedriver_tests.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698