| // Copyright 2016 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "components/test_runner/web_view_test_client.h" | 
 |  | 
 | #include "base/bind.h" | 
 | #include "base/bind_helpers.h" | 
 | #include "base/i18n/rtl.h" | 
 | #include "base/strings/string16.h" | 
 | #include "base/strings/utf_string_conversions.h" | 
 | #include "base/time/time.h" | 
 | #include "components/test_runner/event_sender.h" | 
 | #include "components/test_runner/mock_web_speech_recognizer.h" | 
 | #include "components/test_runner/test_common.h" | 
 | #include "components/test_runner/test_interfaces.h" | 
 | #include "components/test_runner/test_runner.h" | 
 | #include "components/test_runner/test_runner_for_specific_view.h" | 
 | #include "components/test_runner/web_test_delegate.h" | 
 | #include "components/test_runner/web_view_test_proxy.h" | 
 | #include "components/test_runner/web_widget_test_proxy.h" | 
 | #include "third_party/WebKit/public/platform/WebURLRequest.h" | 
 | #include "third_party/WebKit/public/web/WebFrame.h" | 
 | #include "third_party/WebKit/public/web/WebLocalFrame.h" | 
 | #include "third_party/WebKit/public/web/WebPagePopup.h" | 
 | #include "third_party/WebKit/public/web/WebPrintParams.h" | 
 | #include "third_party/WebKit/public/web/WebView.h" | 
 | #include "third_party/WebKit/public/web/WebWidget.h" | 
 |  | 
 | namespace test_runner { | 
 |  | 
 | WebViewTestClient::WebViewTestClient( | 
 |     WebViewTestProxyBase* web_view_test_proxy_base) | 
 |     : web_view_test_proxy_base_(web_view_test_proxy_base) { | 
 |   DCHECK(web_view_test_proxy_base); | 
 | } | 
 |  | 
 | WebViewTestClient::~WebViewTestClient() {} | 
 |  | 
 | // The output from these methods in layout test mode should match that | 
 | // expected by the layout tests. See EditingDelegate.m in DumpRenderTree. | 
 |  | 
 | void WebViewTestClient::didChangeContents() { | 
 |   if (test_runner()->shouldDumpEditingCallbacks()) | 
 |     delegate()->PrintMessage( | 
 |         "EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification\n"); | 
 | } | 
 |  | 
 | blink::WebView* WebViewTestClient::createView( | 
 |     blink::WebLocalFrame* frame, | 
 |     const blink::WebURLRequest& request, | 
 |     const blink::WebWindowFeatures& features, | 
 |     const blink::WebString& frame_name, | 
 |     blink::WebNavigationPolicy policy, | 
 |     bool suppress_opener) { | 
 |   if (test_runner()->shouldDumpNavigationPolicy()) { | 
 |     delegate()->PrintMessage("Default policy for createView for '" + | 
 |                              URLDescription(request.url()) + "' is '" + | 
 |                              WebNavigationPolicyToString(policy) + "'\n"); | 
 |   } | 
 |  | 
 |   if (!test_runner()->canOpenWindows()) | 
 |     return nullptr; | 
 |   if (test_runner()->shouldDumpCreateView()) | 
 |     delegate()->PrintMessage(std::string("createView(") + | 
 |                              URLDescription(request.url()) + ")\n"); | 
 |  | 
 |   // The return value below is used to communicate to WebViewTestProxy whether | 
 |   // it should forward the createView request to RenderViewImpl or not.  The | 
 |   // somewhat ugly cast is used to do this while fitting into the existing | 
 |   // WebViewClient interface. | 
 |   return reinterpret_cast<blink::WebView*>(0xdeadbeef); | 
 | } | 
 |  | 
 | void WebViewTestClient::setStatusText(const blink::WebString& text) { | 
 |   if (!test_runner()->shouldDumpStatusCallbacks()) | 
 |     return; | 
 |   delegate()->PrintMessage( | 
 |       std::string("UI DELEGATE STATUS CALLBACK: setStatusText:") + | 
 |       text.utf8().data() + "\n"); | 
 | } | 
 |  | 
 | // Simulate a print by going into print mode and then exit straight away. | 
 | void WebViewTestClient::printPage(blink::WebLocalFrame* frame) { | 
 |   blink::WebSize page_size_in_pixels = frame->view()->size(); | 
 |   if (page_size_in_pixels.isEmpty()) | 
 |     return; | 
 |   blink::WebPrintParams printParams(page_size_in_pixels); | 
 |   frame->printBegin(printParams); | 
 |   frame->printEnd(); | 
 | } | 
 |  | 
 | void WebViewTestClient::showValidationMessage( | 
 |     const blink::WebRect& anchor_in_root_view, | 
 |     const blink::WebString& main_message, | 
 |     blink::WebTextDirection main_message_hint, | 
 |     const blink::WebString& sub_message, | 
 |     blink::WebTextDirection sub_message_hint) { | 
 |   if (test_runner()->is_web_platform_tests_mode()) | 
 |     return; | 
 |  | 
 |   base::string16 wrapped_main_text = main_message; | 
 |   base::string16 wrapped_sub_text = sub_message; | 
 |  | 
 |   if (main_message_hint == blink::WebTextDirectionLeftToRight) { | 
 |     wrapped_main_text = | 
 |         base::i18n::GetDisplayStringInLTRDirectionality(wrapped_main_text); | 
 |   } else if (main_message_hint == blink::WebTextDirectionRightToLeft && | 
 |              !base::i18n::IsRTL()) { | 
 |     base::i18n::WrapStringWithRTLFormatting(&wrapped_main_text); | 
 |   } | 
 |  | 
 |   if (!wrapped_sub_text.empty()) { | 
 |     if (sub_message_hint == blink::WebTextDirectionLeftToRight) { | 
 |       wrapped_sub_text = | 
 |           base::i18n::GetDisplayStringInLTRDirectionality(wrapped_sub_text); | 
 |     } else if (sub_message_hint == blink::WebTextDirectionRightToLeft) { | 
 |       base::i18n::WrapStringWithRTLFormatting(&wrapped_sub_text); | 
 |     } | 
 |   } | 
 |   delegate()->PrintMessage("ValidationMessageClient: main-message=" + | 
 |                            base::UTF16ToUTF8(wrapped_main_text) + | 
 |                            " sub-message=" + | 
 |                            base::UTF16ToUTF8(wrapped_sub_text) + "\n"); | 
 | } | 
 |  | 
 | blink::WebSpeechRecognizer* WebViewTestClient::speechRecognizer() { | 
 |   return test_runner()->getMockWebSpeechRecognizer(); | 
 | } | 
 |  | 
 | blink::WebString WebViewTestClient::acceptLanguages() { | 
 |   return blink::WebString::fromUTF8(test_runner()->GetAcceptLanguages()); | 
 | } | 
 |  | 
 | WebTestDelegate* WebViewTestClient::delegate() { | 
 |   return web_view_test_proxy_base_->delegate(); | 
 | } | 
 |  | 
 | void WebViewTestClient::didFocus() { | 
 |   test_runner()->SetFocus(web_view_test_proxy_base_->web_view(), true); | 
 | } | 
 |  | 
 | TestRunner* WebViewTestClient::test_runner() { | 
 |   return web_view_test_proxy_base_->test_interfaces()->GetTestRunner(); | 
 | } | 
 |  | 
 | }  // namespace test_runner |