| 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/chrome/web_view_impl.h" | 5 #include "chrome/test/chromedriver/chrome/web_view_impl.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 case kCharEventType: | 116 case kCharEventType: |
| 117 return "char"; | 117 return "char"; |
| 118 default: | 118 default: |
| 119 return ""; | 119 return ""; |
| 120 } | 120 } |
| 121 } | 121 } |
| 122 | 122 |
| 123 } // namespace | 123 } // namespace |
| 124 | 124 |
| 125 WebViewImpl::WebViewImpl(const std::string& id, | 125 WebViewImpl::WebViewImpl(const std::string& id, |
| 126 const bool w3c_compliant, |
| 126 const BrowserInfo* browser_info, | 127 const BrowserInfo* browser_info, |
| 127 std::unique_ptr<DevToolsClient> client, | 128 std::unique_ptr<DevToolsClient> client, |
| 128 const DeviceMetrics* device_metrics, | 129 const DeviceMetrics* device_metrics, |
| 129 std::string page_load_strategy) | 130 std::string page_load_strategy) |
| 130 : id_(id), | 131 : id_(id), |
| 132 w3c_compliant_(w3c_compliant), |
| 131 browser_info_(browser_info), | 133 browser_info_(browser_info), |
| 132 dom_tracker_(new DomTracker(client.get())), | 134 dom_tracker_(new DomTracker(client.get())), |
| 133 frame_tracker_(new FrameTracker(client.get())), | 135 frame_tracker_(new FrameTracker(client.get())), |
| 134 dialog_manager_(new JavaScriptDialogManager(client.get())), | 136 dialog_manager_(new JavaScriptDialogManager(client.get())), |
| 135 navigation_tracker_(PageLoadStrategy::Create( | 137 navigation_tracker_(PageLoadStrategy::Create( |
| 136 page_load_strategy, client.get(), | 138 page_load_strategy, client.get(), |
| 137 browser_info, dialog_manager_.get())), | 139 browser_info, dialog_manager_.get())), |
| 138 mobile_emulation_override_manager_( | 140 mobile_emulation_override_manager_( |
| 139 new MobileEmulationOverrideManager(client.get(), device_metrics)), | 141 new MobileEmulationOverrideManager(client.get(), device_metrics)), |
| 140 geolocation_override_manager_( | 142 geolocation_override_manager_( |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 return internal::EvaluateScriptAndGetValue( | 267 return internal::EvaluateScriptAndGetValue( |
| 266 client_.get(), context_id, expression, result); | 268 client_.get(), context_id, expression, result); |
| 267 } | 269 } |
| 268 | 270 |
| 269 Status WebViewImpl::CallFunction(const std::string& frame, | 271 Status WebViewImpl::CallFunction(const std::string& frame, |
| 270 const std::string& function, | 272 const std::string& function, |
| 271 const base::ListValue& args, | 273 const base::ListValue& args, |
| 272 std::unique_ptr<base::Value>* result) { | 274 std::unique_ptr<base::Value>* result) { |
| 273 std::string json; | 275 std::string json; |
| 274 base::JSONWriter::Write(args, &json); | 276 base::JSONWriter::Write(args, &json); |
| 277 std::string w3c = w3c_compliant_ ? "true" : "false"; |
| 275 // TODO(zachconrad): Second null should be array of shadow host ids. | 278 // TODO(zachconrad): Second null should be array of shadow host ids. |
| 276 std::string expression = base::StringPrintf( | 279 std::string expression = base::StringPrintf( |
| 277 "(%s).apply(null, [null, %s, %s])", | 280 "(%s).apply(null, [null, %s, %s, %s])", |
| 278 kCallFunctionScript, | 281 kCallFunctionScript, |
| 279 function.c_str(), | 282 function.c_str(), |
| 280 json.c_str()); | 283 json.c_str(), |
| 284 w3c.c_str()); |
| 281 std::unique_ptr<base::Value> temp_result; | 285 std::unique_ptr<base::Value> temp_result; |
| 282 Status status = EvaluateScript(frame, expression, &temp_result); | 286 Status status = EvaluateScript(frame, expression, &temp_result); |
| 283 if (status.IsError()) | 287 if (status.IsError()) |
| 284 return status; | 288 return status; |
| 285 return internal::ParseCallFunctionResult(*temp_result, result); | 289 return internal::ParseCallFunctionResult(*temp_result, result); |
| 286 } | 290 } |
| 287 | 291 |
| 288 Status WebViewImpl::CallAsyncFunction(const std::string& frame, | 292 Status WebViewImpl::CallAsyncFunction(const std::string& frame, |
| 289 const std::string& function, | 293 const std::string& function, |
| 290 const base::ListValue& args, | 294 const base::ListValue& args, |
| (...skipping 18 matching lines...) Expand all Loading... |
| 309 const base::ListValue& args, | 313 const base::ListValue& args, |
| 310 std::string* out_frame) { | 314 std::string* out_frame) { |
| 311 int context_id; | 315 int context_id; |
| 312 Status status = GetContextIdForFrame(frame_tracker_.get(), frame, | 316 Status status = GetContextIdForFrame(frame_tracker_.get(), frame, |
| 313 &context_id); | 317 &context_id); |
| 314 if (status.IsError()) | 318 if (status.IsError()) |
| 315 return status; | 319 return status; |
| 316 bool found_node; | 320 bool found_node; |
| 317 int node_id; | 321 int node_id; |
| 318 status = internal::GetNodeIdFromFunction( | 322 status = internal::GetNodeIdFromFunction( |
| 319 client_.get(), context_id, function, args, &found_node, &node_id); | 323 client_.get(), context_id, function, args, |
| 324 &found_node, &node_id, w3c_compliant_); |
| 320 if (status.IsError()) | 325 if (status.IsError()) |
| 321 return status; | 326 return status; |
| 322 if (!found_node) | 327 if (!found_node) |
| 323 return Status(kNoSuchFrame); | 328 return Status(kNoSuchFrame); |
| 324 return dom_tracker_->GetFrameIdForNode(node_id, out_frame); | 329 return dom_tracker_->GetFrameIdForNode(node_id, out_frame); |
| 325 } | 330 } |
| 326 | 331 |
| 327 Status WebViewImpl::DispatchMouseEvents(const std::list<MouseEvent>& events, | 332 Status WebViewImpl::DispatchMouseEvents(const std::list<MouseEvent>& events, |
| 328 const std::string& frame) { | 333 const std::string& frame) { |
| 329 double page_scale_factor = 1.0; | 334 double page_scale_factor = 1.0; |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 511 Status status = GetContextIdForFrame(frame_tracker_.get(), frame, | 516 Status status = GetContextIdForFrame(frame_tracker_.get(), frame, |
| 512 &context_id); | 517 &context_id); |
| 513 if (status.IsError()) | 518 if (status.IsError()) |
| 514 return status; | 519 return status; |
| 515 base::ListValue args; | 520 base::ListValue args; |
| 516 args.Append(element.DeepCopy()); | 521 args.Append(element.DeepCopy()); |
| 517 bool found_node; | 522 bool found_node; |
| 518 int node_id; | 523 int node_id; |
| 519 status = internal::GetNodeIdFromFunction( | 524 status = internal::GetNodeIdFromFunction( |
| 520 client_.get(), context_id, "function(element) { return element; }", | 525 client_.get(), context_id, "function(element) { return element; }", |
| 521 args, &found_node, &node_id); | 526 args, &found_node, &node_id, w3c_compliant_); |
| 522 if (status.IsError()) | 527 if (status.IsError()) |
| 523 return status; | 528 return status; |
| 524 if (!found_node) | 529 if (!found_node) |
| 525 return Status(kUnknownError, "no node ID for file input"); | 530 return Status(kUnknownError, "no node ID for file input"); |
| 526 base::DictionaryValue params; | 531 base::DictionaryValue params; |
| 527 params.SetInteger("nodeId", node_id); | 532 params.SetInteger("nodeId", node_id); |
| 528 params.Set("files", file_list.DeepCopy()); | 533 params.Set("files", file_list.DeepCopy()); |
| 529 return client_->SendCommand("DOM.setFileInputFiles", params); | 534 return client_->SendCommand("DOM.setFileInputFiles", params); |
| 530 } | 535 } |
| 531 | 536 |
| (...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 818 } | 823 } |
| 819 result->reset(unscoped_value->DeepCopy()); | 824 result->reset(unscoped_value->DeepCopy()); |
| 820 return Status(kOk); | 825 return Status(kOk); |
| 821 } | 826 } |
| 822 | 827 |
| 823 Status GetNodeIdFromFunction(DevToolsClient* client, | 828 Status GetNodeIdFromFunction(DevToolsClient* client, |
| 824 int context_id, | 829 int context_id, |
| 825 const std::string& function, | 830 const std::string& function, |
| 826 const base::ListValue& args, | 831 const base::ListValue& args, |
| 827 bool* found_node, | 832 bool* found_node, |
| 828 int* node_id) { | 833 int* node_id, |
| 834 bool w3c_compliant) { |
| 829 std::string json; | 835 std::string json; |
| 830 base::JSONWriter::Write(args, &json); | 836 base::JSONWriter::Write(args, &json); |
| 837 std::string w3c = w3c_compliant ? "true" : "false"; |
| 831 // TODO(zachconrad): Second null should be array of shadow host ids. | 838 // TODO(zachconrad): Second null should be array of shadow host ids. |
| 832 std::string expression = base::StringPrintf( | 839 std::string expression = base::StringPrintf( |
| 833 "(%s).apply(null, [null, %s, %s, true])", | 840 "(%s).apply(null, [null, %s, %s, %s, true])", |
| 834 kCallFunctionScript, | 841 kCallFunctionScript, |
| 835 function.c_str(), | 842 function.c_str(), |
| 836 json.c_str()); | 843 json.c_str(), |
| 844 w3c.c_str()); |
| 837 | 845 |
| 838 bool got_object; | 846 bool got_object; |
| 839 std::string element_id; | 847 std::string element_id; |
| 840 Status status = internal::EvaluateScriptAndGetObject( | 848 Status status = internal::EvaluateScriptAndGetObject( |
| 841 client, context_id, expression, &got_object, &element_id); | 849 client, context_id, expression, &got_object, &element_id); |
| 842 if (status.IsError()) | 850 if (status.IsError()) |
| 843 return status; | 851 return status; |
| 844 if (!got_object) { | 852 if (!got_object) { |
| 845 *found_node = false; | 853 *found_node = false; |
| 846 return Status(kOk); | 854 return Status(kOk); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 867 if (status.IsError()) | 875 if (status.IsError()) |
| 868 return status; | 876 return status; |
| 869 | 877 |
| 870 if (!cmd_result->GetInteger("nodeId", node_id)) | 878 if (!cmd_result->GetInteger("nodeId", node_id)) |
| 871 return Status(kUnknownError, "DOM.requestNode missing int 'nodeId'"); | 879 return Status(kUnknownError, "DOM.requestNode missing int 'nodeId'"); |
| 872 *found_node = true; | 880 *found_node = true; |
| 873 return Status(kOk); | 881 return Status(kOk); |
| 874 } | 882 } |
| 875 | 883 |
| 876 } // namespace internal | 884 } // namespace internal |
| OLD | NEW |