| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/public/test/browser_test_utils.h" | 5 #include "content/public/test/browser_test_utils.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/json/json_reader.h" | 8 #include "base/json/json_reader.h" |
| 9 #include "base/path_service.h" | 9 #include "base/path_service.h" |
| 10 #include "base/process_util.h" | 10 #include "base/process_util.h" |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 #include "content/public/test/test_utils.h" | 26 #include "content/public/test/test_utils.h" |
| 27 #include "net/cookies/cookie_store.h" | 27 #include "net/cookies/cookie_store.h" |
| 28 #include "net/test/python_utils.h" | 28 #include "net/test/python_utils.h" |
| 29 #include "net/url_request/url_request_context.h" | 29 #include "net/url_request/url_request_context.h" |
| 30 #include "net/url_request/url_request_context_getter.h" | 30 #include "net/url_request/url_request_context_getter.h" |
| 31 #include "testing/gtest/include/gtest/gtest.h" | 31 #include "testing/gtest/include/gtest/gtest.h" |
| 32 | 32 |
| 33 static const int kDefaultWsPort = 8880; | 33 static const int kDefaultWsPort = 8880; |
| 34 | 34 |
| 35 namespace content { | 35 namespace content { |
| 36 |
| 36 namespace { | 37 namespace { |
| 37 | 38 |
| 38 class DOMOperationObserver : public NotificationObserver, | 39 class DOMOperationObserver : public NotificationObserver, |
| 39 public WebContentsObserver { | 40 public WebContentsObserver { |
| 40 public: | 41 public: |
| 41 explicit DOMOperationObserver(RenderViewHost* render_view_host) | 42 explicit DOMOperationObserver(RenderViewHost* render_view_host) |
| 42 : WebContentsObserver(WebContents::FromRenderViewHost(render_view_host)), | 43 : WebContentsObserver(WebContents::FromRenderViewHost(render_view_host)), |
| 43 did_respond_(false) { | 44 did_respond_(false) { |
| 44 registrar_.Add(this, NOTIFICATION_DOM_OPERATION_RESPONSE, | 45 registrar_.Add(this, NOTIFICATION_DOM_OPERATION_RESPONSE, |
| 45 Source<RenderViewHost>(render_view_host)); | 46 Source<RenderViewHost>(render_view_host)); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 71 NotificationRegistrar registrar_; | 72 NotificationRegistrar registrar_; |
| 72 std::string response_; | 73 std::string response_; |
| 73 bool did_respond_; | 74 bool did_respond_; |
| 74 scoped_refptr<MessageLoopRunner> message_loop_runner_; | 75 scoped_refptr<MessageLoopRunner> message_loop_runner_; |
| 75 | 76 |
| 76 DISALLOW_COPY_AND_ASSIGN(DOMOperationObserver); | 77 DISALLOW_COPY_AND_ASSIGN(DOMOperationObserver); |
| 77 }; | 78 }; |
| 78 | 79 |
| 79 // Specifying a prototype so that we can add the WARN_UNUSED_RESULT attribute. | 80 // Specifying a prototype so that we can add the WARN_UNUSED_RESULT attribute. |
| 80 bool ExecuteJavaScriptHelper(RenderViewHost* render_view_host, | 81 bool ExecuteJavaScriptHelper(RenderViewHost* render_view_host, |
| 81 const std::string& frame_xpath, | 82 const std::wstring& frame_xpath, |
| 82 const std::string& original_script, | 83 const std::wstring& original_script, |
| 83 scoped_ptr<Value>* result) WARN_UNUSED_RESULT; | 84 scoped_ptr<Value>* result) WARN_UNUSED_RESULT; |
| 84 | 85 |
| 85 // Executes the passed |original_script| in the frame pointed to by | 86 // Executes the passed |original_script| in the frame pointed to by |
| 86 // |frame_xpath|. If |result| is not NULL, stores the value that the evaluation | 87 // |frame_xpath|. If |result| is not NULL, stores the value that the evaluation |
| 87 // of the script in |result|. Returns true on success. | 88 // of the script in |result|. Returns true on success. |
| 88 bool ExecuteJavaScriptHelper(RenderViewHost* render_view_host, | 89 bool ExecuteJavaScriptHelper(RenderViewHost* render_view_host, |
| 89 const std::string& frame_xpath, | 90 const std::wstring& frame_xpath, |
| 90 const std::string& original_script, | 91 const std::wstring& original_script, |
| 91 scoped_ptr<Value>* result) { | 92 scoped_ptr<Value>* result) { |
| 92 // TODO(jcampan): we should make the domAutomationController not require an | 93 // TODO(jcampan): we should make the domAutomationController not require an |
| 93 // automation id. | 94 // automation id. |
| 94 std::string script = | 95 std::wstring script = L"window.domAutomationController.setAutomationId(0);" + |
| 95 "window.domAutomationController.setAutomationId(0);" + original_script; | 96 original_script; |
| 96 DOMOperationObserver dom_op_observer(render_view_host); | 97 DOMOperationObserver dom_op_observer(render_view_host); |
| 97 render_view_host->ExecuteJavascriptInWebFrame(UTF8ToUTF16(frame_xpath), | 98 render_view_host->ExecuteJavascriptInWebFrame(WideToUTF16Hack(frame_xpath), |
| 98 UTF8ToUTF16(script)); | 99 WideToUTF16Hack(script)); |
| 99 std::string json; | 100 std::string json; |
| 100 if (!dom_op_observer.WaitAndGetResponse(&json)) { | 101 if (!dom_op_observer.WaitAndGetResponse(&json)) { |
| 101 DLOG(ERROR) << "Cannot communicate with DOMOperationObserver."; | 102 DLOG(ERROR) << "Cannot communicate with DOMOperationObserver."; |
| 102 return false; | 103 return false; |
| 103 } | 104 } |
| 104 | 105 |
| 105 // Nothing more to do for callers that ignore the returned JS value. | 106 // Nothing more to do for callers that ignore the returned JS value. |
| 106 if (!result) | 107 if (!result) |
| 107 return true; | 108 return true; |
| 108 | 109 |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 web_contents->GetRenderViewHost()->ForwardKeyboardEvent(char_event); | 274 web_contents->GetRenderViewHost()->ForwardKeyboardEvent(char_event); |
| 274 | 275 |
| 275 NativeWebKeyboardEvent event_up; | 276 NativeWebKeyboardEvent event_up; |
| 276 BuildSimpleWebKeyEvent( | 277 BuildSimpleWebKeyEvent( |
| 277 WebKit::WebInputEvent::KeyUp, key, control, shift, alt, command, | 278 WebKit::WebInputEvent::KeyUp, key, control, shift, alt, command, |
| 278 &event_up); | 279 &event_up); |
| 279 web_contents->GetRenderViewHost()->ForwardKeyboardEvent(event_up); | 280 web_contents->GetRenderViewHost()->ForwardKeyboardEvent(event_up); |
| 280 } | 281 } |
| 281 | 282 |
| 282 bool ExecuteJavaScript(RenderViewHost* render_view_host, | 283 bool ExecuteJavaScript(RenderViewHost* render_view_host, |
| 283 const std::string& frame_xpath, | 284 const std::wstring& frame_xpath, |
| 284 const std::string& original_script) { | 285 const std::wstring& original_script) { |
| 285 std::string script = | 286 std::wstring script = |
| 286 original_script + ";window.domAutomationController.send(0);"; | 287 original_script + L";window.domAutomationController.send(0);"; |
| 287 return ExecuteJavaScriptHelper(render_view_host, frame_xpath, script, NULL); | 288 return ExecuteJavaScriptHelper(render_view_host, frame_xpath, script, NULL); |
| 288 } | 289 } |
| 289 | 290 |
| 290 bool ExecuteJavaScriptAndExtractInt(RenderViewHost* render_view_host, | 291 bool ExecuteJavaScriptAndExtractInt(RenderViewHost* render_view_host, |
| 291 const std::string& frame_xpath, | 292 const std::wstring& frame_xpath, |
| 292 const std::string& script, | 293 const std::wstring& script, |
| 293 int* result) { | 294 int* result) { |
| 294 DCHECK(result); | 295 DCHECK(result); |
| 295 scoped_ptr<Value> value; | 296 scoped_ptr<Value> value; |
| 296 if (!ExecuteJavaScriptHelper(render_view_host, frame_xpath, script, &value) || | 297 if (!ExecuteJavaScriptHelper(render_view_host, frame_xpath, script, &value) || |
| 297 !value.get()) | 298 !value.get()) |
| 298 return false; | 299 return false; |
| 299 | 300 |
| 300 return value->GetAsInteger(result); | 301 return value->GetAsInteger(result); |
| 301 } | 302 } |
| 302 | 303 |
| 303 bool ExecuteJavaScriptAndExtractBool(RenderViewHost* render_view_host, | 304 bool ExecuteJavaScriptAndExtractBool(RenderViewHost* render_view_host, |
| 304 const std::string& frame_xpath, | 305 const std::wstring& frame_xpath, |
| 305 const std::string& script, | 306 const std::wstring& script, |
| 306 bool* result) { | 307 bool* result) { |
| 307 DCHECK(result); | 308 DCHECK(result); |
| 308 scoped_ptr<Value> value; | 309 scoped_ptr<Value> value; |
| 309 if (!ExecuteJavaScriptHelper(render_view_host, frame_xpath, script, &value) || | 310 if (!ExecuteJavaScriptHelper(render_view_host, frame_xpath, script, &value) || |
| 310 !value.get()) | 311 !value.get()) |
| 311 return false; | 312 return false; |
| 312 | 313 |
| 313 return value->GetAsBoolean(result); | 314 return value->GetAsBoolean(result); |
| 314 } | 315 } |
| 315 | 316 |
| 316 bool ExecuteJavaScriptAndExtractString(RenderViewHost* render_view_host, | 317 bool ExecuteJavaScriptAndExtractString(RenderViewHost* render_view_host, |
| 317 const std::string& frame_xpath, | 318 const std::wstring& frame_xpath, |
| 318 const std::string& script, | 319 const std::wstring& script, |
| 319 std::string* result) { | 320 std::string* result) { |
| 320 DCHECK(result); | 321 DCHECK(result); |
| 321 scoped_ptr<Value> value; | 322 scoped_ptr<Value> value; |
| 322 if (!ExecuteJavaScriptHelper(render_view_host, frame_xpath, script, &value) || | 323 if (!ExecuteJavaScriptHelper(render_view_host, frame_xpath, script, &value) || |
| 323 !value.get()) | 324 !value.get()) |
| 324 return false; | 325 return false; |
| 325 | 326 |
| 326 return value->GetAsString(result); | 327 return value->GetAsString(result); |
| 327 } | 328 } |
| 328 | 329 |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 455 } | 456 } |
| 456 // The queue should not be empty, unless we were quit because of a timeout. | 457 // The queue should not be empty, unless we were quit because of a timeout. |
| 457 if (message_queue_.empty()) | 458 if (message_queue_.empty()) |
| 458 return false; | 459 return false; |
| 459 if (message) | 460 if (message) |
| 460 *message = message_queue_.front(); | 461 *message = message_queue_.front(); |
| 461 return true; | 462 return true; |
| 462 } | 463 } |
| 463 | 464 |
| 464 } // namespace content | 465 } // namespace content |
| OLD | NEW |