OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/chromedriver/session_commands.h" | 5 #include "chrome/test/chromedriver/session_commands.h" |
6 | 6 |
7 #include <list> | 7 #include <list> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
195 // |session| will own the |CommandListener|s. | 195 // |session| will own the |CommandListener|s. |
196 session->command_listeners.swap(command_listeners); | 196 session->command_listeners.swap(command_listeners); |
197 | 197 |
198 status = LaunchChrome(bound_params.context_getter.get(), | 198 status = LaunchChrome(bound_params.context_getter.get(), |
199 bound_params.socket_factory, | 199 bound_params.socket_factory, |
200 bound_params.device_manager, | 200 bound_params.device_manager, |
201 bound_params.port_server, | 201 bound_params.port_server, |
202 bound_params.port_manager, | 202 bound_params.port_manager, |
203 capabilities, | 203 capabilities, |
204 &devtools_event_listeners, | 204 &devtools_event_listeners, |
205 &session->chrome); | 205 &session->chrome, |
| 206 session->w3c_compliant); |
206 if (status.IsError()) | 207 if (status.IsError()) |
207 return status; | 208 return status; |
208 | 209 |
209 session->chrome->set_page_load_strategy(capabilities.page_load_strategy); | 210 session->chrome->set_page_load_strategy(capabilities.page_load_strategy); |
210 | 211 |
211 std::list<std::string> web_view_ids; | 212 std::list<std::string> web_view_ids; |
212 status = session->chrome->GetWebViewIds(&web_view_ids); | 213 status = session->chrome->GetWebViewIds(&web_view_ids, |
| 214 session->w3c_compliant); |
213 if (status.IsError() || web_view_ids.empty()) { | 215 if (status.IsError() || web_view_ids.empty()) { |
214 return status.IsError() ? status : | 216 return status.IsError() ? status : |
215 Status(kUnknownError, "unable to discover open window in chrome"); | 217 Status(kUnknownError, "unable to discover open window in chrome"); |
216 } | 218 } |
217 | 219 |
218 session->window = web_view_ids.front(); | 220 session->window = web_view_ids.front(); |
219 session->detach = capabilities.detach; | 221 session->detach = capabilities.detach; |
220 session->force_devtools_screenshot = capabilities.force_devtools_screenshot; | 222 session->force_devtools_screenshot = capabilities.force_devtools_screenshot; |
221 session->capabilities = CreateCapabilities(session->chrome.get()); | 223 session->capabilities = CreateCapabilities(session->chrome.get()); |
222 value->reset(session->capabilities->DeepCopy()); | 224 value->reset(session->capabilities->DeepCopy()); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 std::string id; | 277 std::string id; |
276 if (!params.GetString("id", &id)) | 278 if (!params.GetString("id", &id)) |
277 return Status(kUnknownError, "'id' must be a string"); | 279 return Status(kUnknownError, "'id' must be a string"); |
278 | 280 |
279 ChromeDesktopImpl* desktop = NULL; | 281 ChromeDesktopImpl* desktop = NULL; |
280 Status status = session->chrome->GetAsDesktop(&desktop); | 282 Status status = session->chrome->GetAsDesktop(&desktop); |
281 if (status.IsError()) | 283 if (status.IsError()) |
282 return status; | 284 return status; |
283 | 285 |
284 AutomationExtension* extension = NULL; | 286 AutomationExtension* extension = NULL; |
285 status = desktop->GetAutomationExtension(&extension); | 287 status = desktop->GetAutomationExtension(&extension, session->w3c_compliant); |
286 if (status.IsError()) | 288 if (status.IsError()) |
287 return status; | 289 return status; |
288 | 290 |
289 return extension->LaunchApp(id); | 291 return extension->LaunchApp(id); |
290 } | 292 } |
291 | 293 |
292 Status ExecuteClose(Session* session, | 294 Status ExecuteClose(Session* session, |
293 const base::DictionaryValue& params, | 295 const base::DictionaryValue& params, |
294 std::unique_ptr<base::Value>* value) { | 296 std::unique_ptr<base::Value>* value) { |
295 std::list<std::string> web_view_ids; | 297 std::list<std::string> web_view_ids; |
296 Status status = session->chrome->GetWebViewIds(&web_view_ids); | 298 Status status = session->chrome->GetWebViewIds(&web_view_ids, |
| 299 session->w3c_compliant); |
297 if (status.IsError()) | 300 if (status.IsError()) |
298 return status; | 301 return status; |
299 bool is_last_web_view = web_view_ids.size() == 1u; | 302 bool is_last_web_view = web_view_ids.size() == 1u; |
300 web_view_ids.clear(); | 303 web_view_ids.clear(); |
301 | 304 |
302 WebView* web_view = NULL; | 305 WebView* web_view = NULL; |
303 status = session->GetTargetWindow(&web_view); | 306 status = session->GetTargetWindow(&web_view); |
304 if (status.IsError()) | 307 if (status.IsError()) |
305 return status; | 308 return status; |
306 | 309 |
307 status = session->chrome->CloseWebView(web_view->GetId()); | 310 status = session->chrome->CloseWebView(web_view->GetId()); |
308 if (status.IsError()) | 311 if (status.IsError()) |
309 return status; | 312 return status; |
310 | 313 |
311 status = session->chrome->GetWebViewIds(&web_view_ids); | 314 status = session->chrome->GetWebViewIds(&web_view_ids, |
| 315 session->w3c_compliant); |
312 if ((status.code() == kChromeNotReachable && is_last_web_view) || | 316 if ((status.code() == kChromeNotReachable && is_last_web_view) || |
313 (status.IsOk() && web_view_ids.empty())) { | 317 (status.IsOk() && web_view_ids.empty())) { |
314 // If no window is open, close is the equivalent of calling "quit". | 318 // If no window is open, close is the equivalent of calling "quit". |
315 session->quit = true; | 319 session->quit = true; |
316 return session->chrome->Quit(); | 320 return session->chrome->Quit(); |
317 } | 321 } |
318 | 322 |
319 return status; | 323 return status; |
320 } | 324 } |
321 | 325 |
322 Status ExecuteGetWindowHandles(Session* session, | 326 Status ExecuteGetWindowHandles(Session* session, |
323 const base::DictionaryValue& params, | 327 const base::DictionaryValue& params, |
324 std::unique_ptr<base::Value>* value) { | 328 std::unique_ptr<base::Value>* value) { |
325 std::list<std::string> web_view_ids; | 329 std::list<std::string> web_view_ids; |
326 Status status = session->chrome->GetWebViewIds(&web_view_ids); | 330 Status status = session->chrome->GetWebViewIds(&web_view_ids, |
| 331 session->w3c_compliant); |
327 if (status.IsError()) | 332 if (status.IsError()) |
328 return status; | 333 return status; |
329 std::unique_ptr<base::ListValue> window_ids(new base::ListValue()); | 334 std::unique_ptr<base::ListValue> window_ids(new base::ListValue()); |
330 for (std::list<std::string>::const_iterator it = web_view_ids.begin(); | 335 for (std::list<std::string>::const_iterator it = web_view_ids.begin(); |
331 it != web_view_ids.end(); ++it) { | 336 it != web_view_ids.end(); ++it) { |
332 window_ids->AppendString(WebViewIdToWindowHandle(*it)); | 337 window_ids->AppendString(WebViewIdToWindowHandle(*it)); |
333 } | 338 } |
334 value->reset(window_ids.release()); | 339 value->reset(window_ids.release()); |
335 return Status(kOk); | 340 return Status(kOk); |
336 } | 341 } |
337 | 342 |
338 Status ExecuteSwitchToWindow(Session* session, | 343 Status ExecuteSwitchToWindow(Session* session, |
339 const base::DictionaryValue& params, | 344 const base::DictionaryValue& params, |
340 std::unique_ptr<base::Value>* value) { | 345 std::unique_ptr<base::Value>* value) { |
341 std::string name; | 346 std::string name; |
342 if (!params.GetString("name", &name)) | 347 if (!params.GetString("name", &name)) |
343 return Status(kUnknownError, "'name' must be a string"); | 348 return Status(kUnknownError, "'name' must be a string"); |
344 | 349 |
345 std::list<std::string> web_view_ids; | 350 std::list<std::string> web_view_ids; |
346 Status status = session->chrome->GetWebViewIds(&web_view_ids); | 351 Status status = session->chrome->GetWebViewIds(&web_view_ids, |
| 352 session->w3c_compliant); |
347 if (status.IsError()) | 353 if (status.IsError()) |
348 return status; | 354 return status; |
349 | 355 |
350 std::string web_view_id; | 356 std::string web_view_id; |
351 bool found = false; | 357 bool found = false; |
352 if (WindowHandleToWebViewId(name, &web_view_id)) { | 358 if (WindowHandleToWebViewId(name, &web_view_id)) { |
353 // Check if any web_view matches |web_view_id|. | 359 // Check if any web_view matches |web_view_id|. |
354 for (std::list<std::string>::const_iterator it = web_view_ids.begin(); | 360 for (std::list<std::string>::const_iterator it = web_view_ids.begin(); |
355 it != web_view_ids.end(); ++it) { | 361 it != web_view_ids.end(); ++it) { |
356 if (*it == web_view_id) { | 362 if (*it == web_view_id) { |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
597 network_conditions->offline = true; | 603 network_conditions->offline = true; |
598 } | 604 } |
599 | 605 |
600 session->overridden_network_conditions.reset( | 606 session->overridden_network_conditions.reset( |
601 network_conditions.release()); | 607 network_conditions.release()); |
602 | 608 |
603 // Applies overridden network connection to all WebViews of the session | 609 // Applies overridden network connection to all WebViews of the session |
604 // to ensure that network emulation is applied on a per-session basis | 610 // to ensure that network emulation is applied on a per-session basis |
605 // rather than the just to the current WebView. | 611 // rather than the just to the current WebView. |
606 std::list<std::string> web_view_ids; | 612 std::list<std::string> web_view_ids; |
607 status = session->chrome->GetWebViewIds(&web_view_ids); | 613 status = session->chrome->GetWebViewIds(&web_view_ids, |
| 614 session->w3c_compliant); |
608 if (status.IsError()) | 615 if (status.IsError()) |
609 return status; | 616 return status; |
610 | 617 |
611 for (std::string web_view_id : web_view_ids) { | 618 for (std::string web_view_id : web_view_ids) { |
612 WebView* web_view; | 619 WebView* web_view; |
613 status = session->chrome->GetWebViewById(web_view_id, &web_view); | 620 status = session->chrome->GetWebViewById(web_view_id, &web_view); |
614 if (status.IsError()) | 621 if (status.IsError()) |
615 return status; | 622 return status; |
616 web_view->OverrideNetworkConditions( | 623 web_view->OverrideNetworkConditions( |
617 *session->overridden_network_conditions); | 624 *session->overridden_network_conditions); |
618 } | 625 } |
619 return Status(kOk); | 626 return Status(kOk); |
620 } | 627 } |
621 | 628 |
622 Status ExecuteGetWindowPosition(Session* session, | 629 Status ExecuteGetWindowPosition(Session* session, |
623 const base::DictionaryValue& params, | 630 const base::DictionaryValue& params, |
624 std::unique_ptr<base::Value>* value) { | 631 std::unique_ptr<base::Value>* value) { |
625 ChromeDesktopImpl* desktop = NULL; | 632 ChromeDesktopImpl* desktop = NULL; |
626 Status status = session->chrome->GetAsDesktop(&desktop); | 633 Status status = session->chrome->GetAsDesktop(&desktop); |
627 if (status.IsError()) | 634 if (status.IsError()) |
628 return status; | 635 return status; |
629 | 636 |
630 AutomationExtension* extension = NULL; | 637 AutomationExtension* extension = NULL; |
631 status = desktop->GetAutomationExtension(&extension); | 638 status = desktop->GetAutomationExtension(&extension, session->w3c_compliant); |
632 if (status.IsError()) | 639 if (status.IsError()) |
633 return status; | 640 return status; |
634 | 641 |
635 int x, y; | 642 int x, y; |
636 status = extension->GetWindowPosition(&x, &y); | 643 status = extension->GetWindowPosition(&x, &y); |
637 if (status.IsError()) | 644 if (status.IsError()) |
638 return status; | 645 return status; |
639 | 646 |
640 base::DictionaryValue position; | 647 base::DictionaryValue position; |
641 position.SetInteger("x", x); | 648 position.SetInteger("x", x); |
642 position.SetInteger("y", y); | 649 position.SetInteger("y", y); |
643 value->reset(position.DeepCopy()); | 650 value->reset(position.DeepCopy()); |
644 return Status(kOk); | 651 return Status(kOk); |
645 } | 652 } |
646 | 653 |
647 Status ExecuteSetWindowPosition(Session* session, | 654 Status ExecuteSetWindowPosition(Session* session, |
648 const base::DictionaryValue& params, | 655 const base::DictionaryValue& params, |
649 std::unique_ptr<base::Value>* value) { | 656 std::unique_ptr<base::Value>* value) { |
650 double x = 0; | 657 double x = 0; |
651 double y = 0; | 658 double y = 0; |
652 if (!params.GetDouble("x", &x) || !params.GetDouble("y", &y)) | 659 if (!params.GetDouble("x", &x) || !params.GetDouble("y", &y)) |
653 return Status(kUnknownError, "missing or invalid 'x' or 'y'"); | 660 return Status(kUnknownError, "missing or invalid 'x' or 'y'"); |
654 | 661 |
655 ChromeDesktopImpl* desktop = NULL; | 662 ChromeDesktopImpl* desktop = NULL; |
656 Status status = session->chrome->GetAsDesktop(&desktop); | 663 Status status = session->chrome->GetAsDesktop(&desktop); |
657 if (status.IsError()) | 664 if (status.IsError()) |
658 return status; | 665 return status; |
659 | 666 |
660 AutomationExtension* extension = NULL; | 667 AutomationExtension* extension = NULL; |
661 status = desktop->GetAutomationExtension(&extension); | 668 status = desktop->GetAutomationExtension(&extension, session->w3c_compliant); |
662 if (status.IsError()) | 669 if (status.IsError()) |
663 return status; | 670 return status; |
664 | 671 |
665 return extension->SetWindowPosition(static_cast<int>(x), static_cast<int>(y)); | 672 return extension->SetWindowPosition(static_cast<int>(x), static_cast<int>(y)); |
666 } | 673 } |
667 | 674 |
668 Status ExecuteGetWindowSize(Session* session, | 675 Status ExecuteGetWindowSize(Session* session, |
669 const base::DictionaryValue& params, | 676 const base::DictionaryValue& params, |
670 std::unique_ptr<base::Value>* value) { | 677 std::unique_ptr<base::Value>* value) { |
671 ChromeDesktopImpl* desktop = NULL; | 678 ChromeDesktopImpl* desktop = NULL; |
672 Status status = session->chrome->GetAsDesktop(&desktop); | 679 Status status = session->chrome->GetAsDesktop(&desktop); |
673 if (status.IsError()) | 680 if (status.IsError()) |
674 return status; | 681 return status; |
675 | 682 |
676 AutomationExtension* extension = NULL; | 683 AutomationExtension* extension = NULL; |
677 status = desktop->GetAutomationExtension(&extension); | 684 status = desktop->GetAutomationExtension(&extension, session->w3c_compliant); |
678 if (status.IsError()) | 685 if (status.IsError()) |
679 return status; | 686 return status; |
680 | 687 |
681 int width, height; | 688 int width, height; |
682 status = extension->GetWindowSize(&width, &height); | 689 status = extension->GetWindowSize(&width, &height); |
683 if (status.IsError()) | 690 if (status.IsError()) |
684 return status; | 691 return status; |
685 | 692 |
686 base::DictionaryValue size; | 693 base::DictionaryValue size; |
687 size.SetInteger("width", width); | 694 size.SetInteger("width", width); |
(...skipping 10 matching lines...) Expand all Loading... |
698 if (!params.GetDouble("width", &width) || | 705 if (!params.GetDouble("width", &width) || |
699 !params.GetDouble("height", &height)) | 706 !params.GetDouble("height", &height)) |
700 return Status(kUnknownError, "missing or invalid 'width' or 'height'"); | 707 return Status(kUnknownError, "missing or invalid 'width' or 'height'"); |
701 | 708 |
702 ChromeDesktopImpl* desktop = NULL; | 709 ChromeDesktopImpl* desktop = NULL; |
703 Status status = session->chrome->GetAsDesktop(&desktop); | 710 Status status = session->chrome->GetAsDesktop(&desktop); |
704 if (status.IsError()) | 711 if (status.IsError()) |
705 return status; | 712 return status; |
706 | 713 |
707 AutomationExtension* extension = NULL; | 714 AutomationExtension* extension = NULL; |
708 status = desktop->GetAutomationExtension(&extension); | 715 status = desktop->GetAutomationExtension(&extension, session->w3c_compliant); |
709 if (status.IsError()) | 716 if (status.IsError()) |
710 return status; | 717 return status; |
711 | 718 |
712 return extension->SetWindowSize( | 719 return extension->SetWindowSize( |
713 static_cast<int>(width), static_cast<int>(height)); | 720 static_cast<int>(width), static_cast<int>(height)); |
714 } | 721 } |
715 | 722 |
716 Status ExecuteMaximizeWindow(Session* session, | 723 Status ExecuteMaximizeWindow(Session* session, |
717 const base::DictionaryValue& params, | 724 const base::DictionaryValue& params, |
718 std::unique_ptr<base::Value>* value) { | 725 std::unique_ptr<base::Value>* value) { |
719 ChromeDesktopImpl* desktop = NULL; | 726 ChromeDesktopImpl* desktop = NULL; |
720 Status status = session->chrome->GetAsDesktop(&desktop); | 727 Status status = session->chrome->GetAsDesktop(&desktop); |
721 if (status.IsError()) | 728 if (status.IsError()) |
722 return status; | 729 return status; |
723 | 730 |
724 AutomationExtension* extension = NULL; | 731 AutomationExtension* extension = NULL; |
725 status = desktop->GetAutomationExtension(&extension); | 732 status = desktop->GetAutomationExtension(&extension, session->w3c_compliant); |
726 if (status.IsError()) | 733 if (status.IsError()) |
727 return status; | 734 return status; |
728 | 735 |
729 return extension->MaximizeWindow(); | 736 return extension->MaximizeWindow(); |
730 } | 737 } |
731 | 738 |
732 Status ExecuteGetAvailableLogTypes(Session* session, | 739 Status ExecuteGetAvailableLogTypes(Session* session, |
733 const base::DictionaryValue& params, | 740 const base::DictionaryValue& params, |
734 std::unique_ptr<base::Value>* value) { | 741 std::unique_ptr<base::Value>* value) { |
735 std::unique_ptr<base::ListValue> types(new base::ListValue()); | 742 std::unique_ptr<base::ListValue> types(new base::ListValue()); |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
825 session->auto_reporting_enabled = enabled; | 832 session->auto_reporting_enabled = enabled; |
826 return Status(kOk); | 833 return Status(kOk); |
827 } | 834 } |
828 | 835 |
829 | 836 |
830 Status ExecuteUnimplementedCommand(Session* session, | 837 Status ExecuteUnimplementedCommand(Session* session, |
831 const base::DictionaryValue& params, | 838 const base::DictionaryValue& params, |
832 std::unique_ptr<base::Value>* value) { | 839 std::unique_ptr<base::Value>* value) { |
833 return Status(kUnknownCommand); | 840 return Status(kUnknownCommand); |
834 } | 841 } |
OLD | NEW |