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

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

Issue 8649004: Allow chromedriver to install an extension and get all installed extension IDs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ... Created 9 years 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/webdriver_automation.h ('k') | chrome/test/webdriver/webdriver_server.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) 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/webdriver_automation.h" 5 #include "chrome/test/webdriver/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
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 return; 299 return;
300 } 300 }
301 } 301 }
302 302
303 void Automation::Terminate() { 303 void Automation::Terminate() {
304 if (launcher_.get() && launcher_->process() != base::kNullProcessHandle) { 304 if (launcher_.get() && launcher_->process() != base::kNullProcessHandle) {
305 launcher_->QuitBrowser(); 305 launcher_->QuitBrowser();
306 } 306 }
307 } 307 }
308 308
309 void Automation::ExecuteScript(int tab_id, 309 void Automation::ExecuteScript(const WebViewId& view_id,
310 const FramePath& frame_path, 310 const FramePath& frame_path,
311 const std::string& script, 311 const std::string& script,
312 std::string* result, 312 std::string* result,
313 Error** error) { 313 Error** error) {
314 int windex = 0, tab_index = 0; 314 WebViewLocator view_locator;
315 *error = GetIndicesForTab(tab_id, &windex, &tab_index); 315 *error = ConvertViewIdToLocator(view_id, &view_locator);
316 if (*error) 316 if (*error)
317 return; 317 return;
318 318
319 Value* unscoped_value; 319 Value* unscoped_value;
320 std::string error_msg; 320 std::string error_msg;
321 if (!SendExecuteJavascriptJSONRequest(automation(), windex, tab_index, 321 if (!SendExecuteJavascriptJSONRequest(automation(), view_locator,
322 frame_path.value(), script, 322 frame_path.value(), script,
323 &unscoped_value, &error_msg)) { 323 &unscoped_value, &error_msg)) {
324 *error = new Error(kUnknownError, error_msg); 324 *error = new Error(kUnknownError, error_msg);
325 return; 325 return;
326 } 326 }
327 scoped_ptr<Value> value(unscoped_value); 327 scoped_ptr<Value> value(unscoped_value);
328 if (!value->GetAsString(result)) 328 if (!value->GetAsString(result))
329 *error = new Error(kUnknownError, "Execute script did not return string"); 329 *error = new Error(kUnknownError, "Execute script did not return string");
330 } 330 }
331 331
332 void Automation::MouseMove(int tab_id, 332 void Automation::MouseMove(const WebViewId& view_id,
333 const Point& p, 333 const Point& p,
334 Error** error) { 334 Error** error) {
335 int windex = 0, tab_index = 0; 335 WebViewLocator view_locator;
336 *error = GetIndicesForTab(tab_id, &windex, &tab_index); 336 *error = ConvertViewIdToLocator(view_id, &view_locator);
337 if (*error) 337 if (*error)
338 return; 338 return;
339 339
340 std::string error_msg; 340 std::string error_msg;
341 if (!SendMouseMoveJSONRequest( 341 if (!SendMouseMoveJSONRequest(
342 automation(), windex, tab_index, p.rounded_x(), p.rounded_y(), 342 automation(), view_locator, p.rounded_x(), p.rounded_y(),
343 &error_msg)) { 343 &error_msg)) {
344 *error = new Error(kUnknownError, error_msg); 344 *error = new Error(kUnknownError, error_msg);
345 } 345 }
346 } 346 }
347 347
348 void Automation::MouseClick(int tab_id, 348 void Automation::MouseClick(const WebViewId& view_id,
349 const Point& p, 349 const Point& p,
350 automation::MouseButton button, 350 automation::MouseButton button,
351 Error** error) { 351 Error** error) {
352 int windex = 0, tab_index = 0; 352 WebViewLocator view_locator;
353 *error = GetIndicesForTab(tab_id, &windex, &tab_index); 353 *error = ConvertViewIdToLocator(view_id, &view_locator);
354 if (*error) 354 if (*error)
355 return; 355 return;
356 356
357 std::string error_msg; 357 std::string error_msg;
358 if (!SendMouseClickJSONRequest( 358 if (!SendMouseClickJSONRequest(
359 automation(), windex, tab_index, button, p.rounded_x(), 359 automation(), view_locator, button, p.rounded_x(),
360 p.rounded_y(), &error_msg)) { 360 p.rounded_y(), &error_msg)) {
361 *error = new Error(kUnknownError, error_msg); 361 *error = new Error(kUnknownError, error_msg);
362 } 362 }
363 } 363 }
364 364
365 void Automation::MouseDrag(int tab_id, 365 void Automation::MouseDrag(const WebViewId& view_id,
366 const Point& start, 366 const Point& start,
367 const Point& end, 367 const Point& end,
368 Error** error) { 368 Error** error) {
369 int windex = 0, tab_index = 0; 369 WebViewLocator view_locator;
370 *error = GetIndicesForTab(tab_id, &windex, &tab_index); 370 *error = ConvertViewIdToLocator(view_id, &view_locator);
371 if (*error) 371 if (*error)
372 return; 372 return;
373 373
374 std::string error_msg; 374 std::string error_msg;
375 if (!SendMouseDragJSONRequest( 375 if (!SendMouseDragJSONRequest(
376 automation(), windex, tab_index, start.rounded_x(), start.rounded_y(), 376 automation(), view_locator, start.rounded_x(), start.rounded_y(),
377 end.rounded_x(), end.rounded_y(), &error_msg)) { 377 end.rounded_x(), end.rounded_y(), &error_msg)) {
378 *error = new Error(kUnknownError, error_msg); 378 *error = new Error(kUnknownError, error_msg);
379 } 379 }
380 } 380 }
381 381
382 void Automation::MouseButtonUp(int tab_id, 382 void Automation::MouseButtonUp(const WebViewId& view_id,
383 const Point& p, 383 const Point& p,
384 Error** error) { 384 Error** error) {
385 *error = CheckAdvancedInteractionsSupported(); 385 *error = CheckAdvancedInteractionsSupported();
386 if (*error) 386 if (*error)
387 return; 387 return;
388 388
389 int windex = 0, tab_index = 0; 389 WebViewLocator view_locator;
390 *error = GetIndicesForTab(tab_id, &windex, &tab_index); 390 *error = ConvertViewIdToLocator(view_id, &view_locator);
391 if (*error) 391 if (*error)
392 return; 392 return;
393 393
394 std::string error_msg; 394 std::string error_msg;
395 if (!SendMouseButtonUpJSONRequest( 395 if (!SendMouseButtonUpJSONRequest(
396 automation(), windex, tab_index, p.rounded_x(), p.rounded_y(), 396 automation(), view_locator, p.rounded_x(), p.rounded_y(),
397 &error_msg)) { 397 &error_msg)) {
398 *error = new Error(kUnknownError, error_msg); 398 *error = new Error(kUnknownError, error_msg);
399 } 399 }
400 } 400 }
401 401
402 void Automation::MouseButtonDown(int tab_id, 402 void Automation::MouseButtonDown(const WebViewId& view_id,
403 const Point& p, 403 const Point& p,
404 Error** error) { 404 Error** error) {
405 *error = CheckAdvancedInteractionsSupported(); 405 *error = CheckAdvancedInteractionsSupported();
406 if (*error) 406 if (*error)
407 return; 407 return;
408 408
409 int windex = 0, tab_index = 0; 409 WebViewLocator view_locator;
410 *error = GetIndicesForTab(tab_id, &windex, &tab_index); 410 *error = ConvertViewIdToLocator(view_id, &view_locator);
411 if (*error) 411 if (*error)
412 return; 412 return;
413 413
414 std::string error_msg; 414 std::string error_msg;
415 if (!SendMouseButtonDownJSONRequest( 415 if (!SendMouseButtonDownJSONRequest(
416 automation(), windex, tab_index, p.rounded_x(), p.rounded_y(), 416 automation(), view_locator, p.rounded_x(), p.rounded_y(),
417 &error_msg)) { 417 &error_msg)) {
418 *error = new Error(kUnknownError, error_msg); 418 *error = new Error(kUnknownError, error_msg);
419 } 419 }
420 } 420 }
421 421
422 void Automation::MouseDoubleClick(int tab_id, 422 void Automation::MouseDoubleClick(const WebViewId& view_id,
423 const Point& p, 423 const Point& p,
424 Error** error) { 424 Error** error) {
425 *error = CheckAdvancedInteractionsSupported(); 425 *error = CheckAdvancedInteractionsSupported();
426 if (*error) 426 if (*error)
427 return; 427 return;
428 428
429 int windex = 0, tab_index = 0; 429 WebViewLocator view_locator;
430 *error = GetIndicesForTab(tab_id, &windex, &tab_index); 430 *error = ConvertViewIdToLocator(view_id, &view_locator);
431 if (*error) 431 if (*error)
432 return; 432 return;
433 433
434 std::string error_msg; 434 std::string error_msg;
435 if (!SendMouseDoubleClickJSONRequest( 435 if (!SendMouseDoubleClickJSONRequest(
436 automation(), windex, tab_index, p.rounded_x(), p.rounded_y(), 436 automation(), view_locator, p.rounded_x(), p.rounded_y(),
437 &error_msg)) { 437 &error_msg)) {
438 *error = new Error(kUnknownError, error_msg); 438 *error = new Error(kUnknownError, error_msg);
439 } 439 }
440 } 440 }
441 441
442 void Automation::DragAndDropFilePaths( 442 void Automation::DragAndDropFilePaths(
443 int tab_id, const Point& location, 443 const WebViewId& view_id, const Point& location,
444 const std::vector<FilePath::StringType>& paths, Error** error) { 444 const std::vector<FilePath::StringType>& paths, Error** error) {
445 int windex = 0, tab_index = 0; 445 WebViewLocator view_locator;
446 *error = GetIndicesForTab(tab_id, &windex, &tab_index); 446 *error = ConvertViewIdToLocator(view_id, &view_locator);
447 if (*error) { 447 if (*error) {
448 return; 448 return;
449 } 449 }
450 450
451 std::string error_msg; 451 std::string error_msg;
452 if (!SendDragAndDropFilePathsJSONRequest( 452 if (!SendDragAndDropFilePathsJSONRequest(
453 automation(), windex, tab_index, location.rounded_x(), 453 automation(), view_locator, location.rounded_x(),
454 location.rounded_y(), paths, &error_msg)) { 454 location.rounded_y(), paths, &error_msg)) {
455 *error = new Error(kUnknownError, error_msg); 455 *error = new Error(kUnknownError, error_msg);
456 } 456 }
457 } 457 }
458 458
459 void Automation::SendWebKeyEvent(int tab_id, 459 void Automation::SendWebKeyEvent(const WebViewId& view_id,
460 const WebKeyEvent& key_event, 460 const WebKeyEvent& key_event,
461 Error** error) { 461 Error** error) {
462 int windex = 0, tab_index = 0; 462 WebViewLocator view_locator;
463 *error = GetIndicesForTab(tab_id, &windex, &tab_index); 463 *error = ConvertViewIdToLocator(view_id, &view_locator);
464 if (*error) 464 if (*error)
465 return; 465 return;
466 466
467 std::string error_msg; 467 std::string error_msg;
468 if (!SendWebKeyEventJSONRequest( 468 if (!SendWebKeyEventJSONRequest(
469 automation(), windex, tab_index, key_event, &error_msg)) { 469 automation(), view_locator, key_event, &error_msg)) {
470 *error = new Error(kUnknownError, error_msg); 470 *error = new Error(kUnknownError, error_msg);
471 } 471 }
472 } 472 }
473 473
474 void Automation::SendNativeKeyEvent(int tab_id, 474 void Automation::SendNativeKeyEvent(int tab_id,
475 ui::KeyboardCode key_code, 475 ui::KeyboardCode key_code,
476 int modifiers, 476 int modifiers,
477 Error** error) { 477 Error** error) {
478 int windex = 0, tab_index = 0; 478 int windex = 0, tab_index = 0;
479 *error = GetIndicesForTab(tab_id, &windex, &tab_index); 479 *error = GetIndicesForTab(tab_id, &windex, &tab_index);
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
601 } 601 }
602 602
603 void Automation::SetCookie(const std::string& url, 603 void Automation::SetCookie(const std::string& url,
604 DictionaryValue* cookie_dict, 604 DictionaryValue* cookie_dict,
605 Error** error) { 605 Error** error) {
606 std::string error_msg; 606 std::string error_msg;
607 if (!SendSetCookieJSONRequest(automation(), url, cookie_dict, &error_msg)) 607 if (!SendSetCookieJSONRequest(automation(), url, cookie_dict, &error_msg))
608 *error = new Error(kUnknownError, error_msg); 608 *error = new Error(kUnknownError, error_msg);
609 } 609 }
610 610
611 void Automation::GetTabIds(std::vector<int>* tab_ids, 611 void Automation::GetViews(std::vector<WebViewInfo>* views,
612 Error** error) { 612 Error** error) {
613 bool has_views = false;
614 *error = CompareVersion(500, 0, &has_views);
615 if (*error)
616 return;
617
613 std::string error_msg; 618 std::string error_msg;
614 if (!SendGetTabIdsJSONRequest(automation(), tab_ids, &error_msg)) 619 if (has_views) {
615 *error = new Error(kUnknownError, error_msg); 620 if (!SendGetWebViewsJSONRequest(automation(), views, &error_msg))
616 } 621 *error = new Error(kUnknownError, error_msg);
617 622 } else {
618 void Automation::DoesTabExist(int tab_id, bool* does_exist, Error** error) { 623 if (!SendGetTabIdsJSONRequest(automation(), views, &error_msg))
619 std::string error_msg; 624 *error = new Error(kUnknownError, error_msg);
620 if (!SendIsTabIdValidJSONRequest(
621 automation(), tab_id, does_exist, &error_msg)) {
622 *error = new Error(kUnknownError, error_msg);
623 } 625 }
624 } 626 }
625 627
628 void Automation::DoesViewExist(
629 const WebViewId& view_id, bool* does_exist, Error** error) {
630 std::string error_msg;
631 if (view_id.type == WebViewId::kTypeTabId) {
632 if (!SendIsTabIdValidJSONRequest(
633 automation(), view_id, does_exist, &error_msg))
634 *error = new Error(kUnknownError, error_msg);
635 } else {
636 if (!SendDoesViewExistJSONRequest(
637 automation(), view_id, does_exist, &error_msg))
638 *error = new Error(kUnknownError, error_msg);
639 }
640 }
641
626 void Automation::CloseTab(int tab_id, Error** error) { 642 void Automation::CloseTab(int tab_id, Error** error) {
627 int windex = 0, tab_index = 0; 643 int windex = 0, tab_index = 0;
628 *error = GetIndicesForTab(tab_id, &windex, &tab_index); 644 *error = GetIndicesForTab(tab_id, &windex, &tab_index);
629 if (*error) 645 if (*error)
630 return; 646 return;
631 647
632 std::string error_msg; 648 std::string error_msg;
633 if (!SendCloseTabJSONRequest(automation(), windex, tab_index, &error_msg)) 649 if (!SendCloseTabJSONRequest(automation(), windex, tab_index, &error_msg))
634 *error = new Error(kUnknownError, error_msg); 650 *error = new Error(kUnknownError, error_msg);
635 } 651 }
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
742 automation(), path, false /* with_ui */, extension_id, &error_msg)) 758 automation(), path, false /* with_ui */, extension_id, &error_msg))
743 *error = new Error(kUnknownError, error_msg); 759 *error = new Error(kUnknownError, error_msg);
744 } 760 }
745 761
746 AutomationProxy* Automation::automation() const { 762 AutomationProxy* Automation::automation() const {
747 return launcher_->automation(); 763 return launcher_->automation();
748 } 764 }
749 765
750 Error* Automation::GetIndicesForTab( 766 Error* Automation::GetIndicesForTab(
751 int tab_id, int* browser_index, int* tab_index) { 767 int tab_id, int* browser_index, int* tab_index) {
752 std::string error_msg; 768 std::string error_msg;
753 if (!SendGetIndicesFromTabIdJSONRequest( 769 if (!SendGetIndicesFromTabIdJSONRequest(
754 automation(), tab_id, browser_index, tab_index, &error_msg)) { 770 automation(), tab_id, browser_index, tab_index, &error_msg)) {
755 return new Error(kUnknownError, error_msg); 771 return new Error(kUnknownError, error_msg);
772 }
773 return NULL;
774 }
775
776 Error* Automation::ConvertViewIdToLocator(
777 const WebViewId& view_id, WebViewLocator* view_locator) {
778 if (view_id.type == WebViewId::kTypeTabId) {
779 int browser_index, tab_index;
780 std::string error_msg;
781 if (!SendGetIndicesFromTabIdJSONRequest(
782 automation(), view_id.id.tab_id, &browser_index, &tab_index, &error_ msg)) {
783 return new Error(kUnknownError, error_msg);
784 }
785 view_locator->type = WebViewLocator::kTypeIndexPair;
786 view_locator->locator.index_pair.browser_index = browser_index;
787 view_locator->locator.index_pair.tab_index = tab_index;
788 } else if (view_id.type == WebViewId::kTypeViewId) {
789 view_locator->type = WebViewLocator::kTypeViewId;
790 view_locator->locator.view_id = view_id.id.view_id;
756 } 791 }
757 return NULL; 792 return NULL;
758 } 793 }
759 794
760 Error* Automation::CompareVersion(int client_build_no, 795 Error* Automation::CompareVersion(int client_build_no,
761 int client_patch_no, 796 int client_patch_no,
762 bool* is_newer_or_equal) { 797 bool* is_newer_or_equal) {
763 std::string version = automation()->server_version(); 798 std::string version = automation()->server_version();
764 std::vector<std::string> split_version; 799 std::vector<std::string> split_version;
765 base::SplitString(version, '.', &split_version); 800 base::SplitString(version, '.', &split_version);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
806 return CheckVersion(750, 0, message); 841 return CheckVersion(750, 0, message);
807 } 842 }
808 843
809 Error* Automation::CheckNewExtensionInterfaceSupported() { 844 Error* Automation::CheckNewExtensionInterfaceSupported() {
810 const char* message = 845 const char* message =
811 "Extension interface is not supported for this version of Chrome"; 846 "Extension interface is not supported for this version of Chrome";
812 return CheckVersion(947, 0, message); 847 return CheckVersion(947, 0, message);
813 } 848 }
814 849
815 } // namespace webdriver 850 } // namespace webdriver
OLDNEW
« no previous file with comments | « chrome/test/webdriver/webdriver_automation.h ('k') | chrome/test/webdriver/webdriver_server.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698