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

Side by Side Diff: components/test_runner/web_frame_test_client.cc

Issue 2707183003: Move //components/test_runner back into //content/shell (Closed)
Patch Set: Trim DEPS Created 3 years, 10 months 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
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/test_runner/web_frame_test_client.h"
6
7 #include <memory>
8
9 #include "base/logging.h"
10 #include "base/strings/string_piece.h"
11 #include "base/strings/string_util.h"
12 #include "base/strings/stringprintf.h"
13 #include "components/test_runner/accessibility_controller.h"
14 #include "components/test_runner/event_sender.h"
15 #include "components/test_runner/mock_color_chooser.h"
16 #include "components/test_runner/mock_screen_orientation_client.h"
17 #include "components/test_runner/mock_web_user_media_client.h"
18 #include "components/test_runner/test_common.h"
19 #include "components/test_runner/test_interfaces.h"
20 #include "components/test_runner/test_plugin.h"
21 #include "components/test_runner/test_runner.h"
22 #include "components/test_runner/web_frame_test_proxy.h"
23 #include "components/test_runner/web_test_delegate.h"
24 #include "components/test_runner/web_view_test_proxy.h"
25 #include "components/test_runner/web_widget_test_proxy.h"
26 #include "net/base/net_errors.h"
27 #include "third_party/WebKit/public/platform/WebString.h"
28 #include "third_party/WebKit/public/platform/WebURL.h"
29 #include "third_party/WebKit/public/platform/WebURLRequest.h"
30 #include "third_party/WebKit/public/platform/WebURLResponse.h"
31 #include "third_party/WebKit/public/web/WebConsoleMessage.h"
32 #include "third_party/WebKit/public/web/WebDataSource.h"
33 #include "third_party/WebKit/public/web/WebElement.h"
34 #include "third_party/WebKit/public/web/WebFrame.h"
35 #include "third_party/WebKit/public/web/WebLocalFrame.h"
36 #include "third_party/WebKit/public/web/WebNavigationPolicy.h"
37 #include "third_party/WebKit/public/web/WebPluginParams.h"
38 #include "third_party/WebKit/public/web/WebUserGestureIndicator.h"
39 #include "third_party/WebKit/public/web/WebView.h"
40 #include "url/gurl.h"
41 #include "url/url_constants.h"
42
43 namespace test_runner {
44
45 namespace {
46
47 void PrintFrameDescription(WebTestDelegate* delegate, blink::WebFrame* frame) {
48 std::string name8 = frame->uniqueName().utf8();
49 if (frame == frame->view()->mainFrame()) {
50 if (!name8.length()) {
51 delegate->PrintMessage("main frame");
52 return;
53 }
54 delegate->PrintMessage(std::string("main frame \"") + name8 + "\"");
55 return;
56 }
57 if (!name8.length()) {
58 delegate->PrintMessage("frame (anonymous)");
59 return;
60 }
61 delegate->PrintMessage(std::string("frame \"") + name8 + "\"");
62 }
63
64 void PrintFrameuserGestureStatus(WebTestDelegate* delegate,
65 blink::WebFrame* frame,
66 const char* msg) {
67 bool is_user_gesture =
68 blink::WebUserGestureIndicator::isProcessingUserGesture();
69 delegate->PrintMessage(std::string("Frame with user gesture \"") +
70 (is_user_gesture ? "true" : "false") + "\"" + msg);
71 }
72
73 // Used to write a platform neutral file:/// URL by taking the
74 // filename and its directory. (e.g., converts
75 // "file:///tmp/foo/bar.txt" to just "bar.txt").
76 std::string DescriptionSuitableForTestResult(const std::string& url) {
77 if (url.empty() || std::string::npos == url.find("file://"))
78 return url;
79
80 size_t pos = url.rfind('/');
81 if (pos == std::string::npos || !pos)
82 return "ERROR:" + url;
83 pos = url.rfind('/', pos - 1);
84 if (pos == std::string::npos)
85 return "ERROR:" + url;
86
87 return url.substr(pos + 1);
88 }
89
90 void PrintResponseDescription(WebTestDelegate* delegate,
91 const blink::WebURLResponse& response) {
92 if (response.isNull()) {
93 delegate->PrintMessage("(null)");
94 return;
95 }
96 delegate->PrintMessage(base::StringPrintf(
97 "<NSURLResponse %s, http status code %d>",
98 DescriptionSuitableForTestResult(response.url().string().utf8()).c_str(),
99 response.httpStatusCode()));
100 }
101
102 void BlockRequest(blink::WebURLRequest& request) {
103 request.setURL(GURL("255.255.255.255"));
104 }
105
106 bool IsLocalHost(const std::string& host) {
107 return host == "127.0.0.1" || host == "localhost" || host == "[::1]";
108 }
109
110 bool IsTestHost(const std::string& host) {
111 return base::EndsWith(host, ".test", base::CompareCase::INSENSITIVE_ASCII);
112 }
113
114 bool HostIsUsedBySomeTestsToGenerateError(const std::string& host) {
115 return host == "255.255.255.255";
116 }
117
118 // Used to write a platform neutral file:/// URL by only taking the filename
119 // (e.g., converts "file:///tmp/foo.txt" to just "foo.txt").
120 std::string URLSuitableForTestResult(const std::string& url) {
121 if (url.empty() || std::string::npos == url.find("file://"))
122 return url;
123
124 size_t pos = url.rfind('/');
125 if (pos == std::string::npos) {
126 #ifdef WIN32
127 pos = url.rfind('\\');
128 if (pos == std::string::npos)
129 pos = 0;
130 #else
131 pos = 0;
132 #endif
133 }
134 std::string filename = url.substr(pos + 1);
135 if (filename.empty())
136 return "file:"; // A WebKit test has this in its expected output.
137 return filename;
138 }
139
140 // WebNavigationType debugging strings taken from PolicyDelegate.mm.
141 const char* kLinkClickedString = "link clicked";
142 const char* kFormSubmittedString = "form submitted";
143 const char* kBackForwardString = "back/forward";
144 const char* kReloadString = "reload";
145 const char* kFormResubmittedString = "form resubmitted";
146 const char* kOtherString = "other";
147 const char* kIllegalString = "illegal value";
148
149 // Get a debugging string from a WebNavigationType.
150 const char* WebNavigationTypeToString(blink::WebNavigationType type) {
151 switch (type) {
152 case blink::WebNavigationTypeLinkClicked:
153 return kLinkClickedString;
154 case blink::WebNavigationTypeFormSubmitted:
155 return kFormSubmittedString;
156 case blink::WebNavigationTypeBackForward:
157 return kBackForwardString;
158 case blink::WebNavigationTypeReload:
159 return kReloadString;
160 case blink::WebNavigationTypeFormResubmitted:
161 return kFormResubmittedString;
162 case blink::WebNavigationTypeOther:
163 return kOtherString;
164 }
165 return kIllegalString;
166 }
167
168 } // namespace
169
170 WebFrameTestClient::WebFrameTestClient(
171 WebTestDelegate* delegate,
172 WebViewTestProxyBase* web_view_test_proxy_base,
173 WebFrameTestProxyBase* web_frame_test_proxy_base)
174 : delegate_(delegate),
175 web_view_test_proxy_base_(web_view_test_proxy_base),
176 web_frame_test_proxy_base_(web_frame_test_proxy_base) {
177 DCHECK(delegate_);
178 DCHECK(web_frame_test_proxy_base_);
179 DCHECK(web_view_test_proxy_base_);
180 }
181
182 WebFrameTestClient::~WebFrameTestClient() {}
183
184 blink::WebColorChooser* WebFrameTestClient::createColorChooser(
185 blink::WebColorChooserClient* client,
186 const blink::WebColor& color,
187 const blink::WebVector<blink::WebColorSuggestion>& suggestions) {
188 // This instance is deleted by WebCore::ColorInputType
189 return new MockColorChooser(client, delegate_, test_runner());
190 }
191
192 void WebFrameTestClient::runModalAlertDialog(const blink::WebString& message) {
193 if (!test_runner()->ShouldDumpJavaScriptDialogs())
194 return;
195 delegate_->PrintMessage(std::string("ALERT: ") + message.utf8().data() +
196 "\n");
197 }
198
199 bool WebFrameTestClient::runModalConfirmDialog(
200 const blink::WebString& message) {
201 if (!test_runner()->ShouldDumpJavaScriptDialogs())
202 return true;
203 delegate_->PrintMessage(std::string("CONFIRM: ") + message.utf8().data() +
204 "\n");
205 return true;
206 }
207
208 bool WebFrameTestClient::runModalPromptDialog(
209 const blink::WebString& message,
210 const blink::WebString& default_value,
211 blink::WebString* actual_value) {
212 if (!test_runner()->ShouldDumpJavaScriptDialogs())
213 return true;
214 delegate_->PrintMessage(std::string("PROMPT: ") + message.utf8().data() +
215 ", default text: " + default_value.utf8().data() +
216 "\n");
217 return true;
218 }
219
220 bool WebFrameTestClient::runModalBeforeUnloadDialog(bool is_reload) {
221 if (test_runner()->ShouldDumpJavaScriptDialogs())
222 delegate_->PrintMessage(std::string("CONFIRM NAVIGATION\n"));
223 return !test_runner()->shouldStayOnPageAfterHandlingBeforeUnload();
224 }
225
226 blink::WebScreenOrientationClient*
227 WebFrameTestClient::webScreenOrientationClient() {
228 return test_runner()->getMockScreenOrientationClient();
229 }
230
231 void WebFrameTestClient::postAccessibilityEvent(const blink::WebAXObject& obj,
232 blink::WebAXEvent event) {
233 // Only hook the accessibility events occured during the test run.
234 // This check prevents false positives in WebLeakDetector.
235 // The pending tasks in browser/renderer message queue may trigger
236 // accessibility events,
237 // and AccessibilityController will hold on to their target nodes if we don't
238 // ignore them here.
239 if (!test_runner()->TestIsRunning())
240 return;
241
242 const char* event_name = NULL;
243 switch (event) {
244 case blink::WebAXEventActiveDescendantChanged:
245 event_name = "ActiveDescendantChanged";
246 break;
247 case blink::WebAXEventAlert:
248 event_name = "Alert";
249 break;
250 case blink::WebAXEventAriaAttributeChanged:
251 event_name = "AriaAttributeChanged";
252 break;
253 case blink::WebAXEventAutocorrectionOccured:
254 event_name = "AutocorrectionOccured";
255 break;
256 case blink::WebAXEventBlur:
257 event_name = "Blur";
258 break;
259 case blink::WebAXEventCheckedStateChanged:
260 event_name = "CheckedStateChanged";
261 break;
262 case blink::WebAXEventChildrenChanged:
263 event_name = "ChildrenChanged";
264 break;
265 case blink::WebAXEventClicked:
266 event_name = "Clicked";
267 break;
268 case blink::WebAXEventDocumentSelectionChanged:
269 event_name = "DocumentSelectionChanged";
270 break;
271 case blink::WebAXEventFocus:
272 event_name = "Focus";
273 break;
274 case blink::WebAXEventHide:
275 event_name = "Hide";
276 break;
277 case blink::WebAXEventHover:
278 event_name = "Hover";
279 break;
280 case blink::WebAXEventInvalidStatusChanged:
281 event_name = "InvalidStatusChanged";
282 break;
283 case blink::WebAXEventLayoutComplete:
284 event_name = "LayoutComplete";
285 break;
286 case blink::WebAXEventLiveRegionChanged:
287 event_name = "LiveRegionChanged";
288 break;
289 case blink::WebAXEventLoadComplete:
290 event_name = "LoadComplete";
291 break;
292 case blink::WebAXEventLocationChanged:
293 event_name = "LocationChanged";
294 break;
295 case blink::WebAXEventMenuListItemSelected:
296 event_name = "MenuListItemSelected";
297 break;
298 case blink::WebAXEventMenuListItemUnselected:
299 event_name = "MenuListItemUnselected";
300 break;
301 case blink::WebAXEventMenuListValueChanged:
302 event_name = "MenuListValueChanged";
303 break;
304 case blink::WebAXEventRowCollapsed:
305 event_name = "RowCollapsed";
306 break;
307 case blink::WebAXEventRowCountChanged:
308 event_name = "RowCountChanged";
309 break;
310 case blink::WebAXEventRowExpanded:
311 event_name = "RowExpanded";
312 break;
313 case blink::WebAXEventScrollPositionChanged:
314 event_name = "ScrollPositionChanged";
315 break;
316 case blink::WebAXEventScrolledToAnchor:
317 event_name = "ScrolledToAnchor";
318 break;
319 case blink::WebAXEventSelectedChildrenChanged:
320 event_name = "SelectedChildrenChanged";
321 break;
322 case blink::WebAXEventSelectedTextChanged:
323 event_name = "SelectedTextChanged";
324 break;
325 case blink::WebAXEventShow:
326 event_name = "Show";
327 break;
328 case blink::WebAXEventTextChanged:
329 event_name = "TextChanged";
330 break;
331 case blink::WebAXEventTextInserted:
332 event_name = "TextInserted";
333 break;
334 case blink::WebAXEventTextRemoved:
335 event_name = "TextRemoved";
336 break;
337 case blink::WebAXEventValueChanged:
338 event_name = "ValueChanged";
339 break;
340 default:
341 event_name = "Unknown";
342 break;
343 }
344
345 AccessibilityController* accessibility_controller =
346 web_view_test_proxy_base_->accessibility_controller();
347 accessibility_controller->NotificationReceived(obj, event_name);
348 if (accessibility_controller->ShouldLogAccessibilityEvents()) {
349 std::string message("AccessibilityNotification - ");
350 message += event_name;
351
352 blink::WebNode node = obj.node();
353 if (!node.isNull() && node.isElementNode()) {
354 blink::WebElement element = node.to<blink::WebElement>();
355 if (element.hasAttribute("id")) {
356 message += " - id:";
357 message += element.getAttribute("id").utf8().data();
358 }
359 }
360
361 delegate_->PrintMessage(message + "\n");
362 }
363 }
364
365 void WebFrameTestClient::didChangeSelection(bool is_empty_callback) {
366 if (test_runner()->shouldDumpEditingCallbacks())
367 delegate_->PrintMessage(
368 "EDITING DELEGATE: "
369 "webViewDidChangeSelection:WebViewDidChangeSelectionNotification\n");
370 }
371
372 blink::WebPlugin* WebFrameTestClient::createPlugin(
373 blink::WebLocalFrame* frame,
374 const blink::WebPluginParams& params) {
375 if (TestPlugin::IsSupportedMimeType(params.mimeType))
376 return TestPlugin::create(frame, params, delegate_);
377 return delegate_->CreatePluginPlaceholder(frame, params);
378 }
379
380 void WebFrameTestClient::showContextMenu(
381 const blink::WebContextMenuData& context_menu_data) {
382 delegate_->GetWebWidgetTestProxyBase(web_frame_test_proxy_base_->web_frame())
383 ->event_sender()
384 ->SetContextMenuData(context_menu_data);
385 }
386
387 blink::WebUserMediaClient* WebFrameTestClient::userMediaClient() {
388 return test_runner()->getMockWebUserMediaClient();
389 }
390
391 void WebFrameTestClient::loadURLExternally(
392 const blink::WebURLRequest& request,
393 blink::WebNavigationPolicy policy,
394 const blink::WebString& suggested_name,
395 bool replaces_current_history_item) {
396 if (test_runner()->shouldWaitUntilExternalURLLoad()) {
397 if (policy == blink::WebNavigationPolicyDownload) {
398 delegate_->PrintMessage(
399 std::string("Downloading URL with suggested filename \"") +
400 suggested_name.utf8() + "\"\n");
401 } else {
402 delegate_->PrintMessage(std::string("Loading URL externally - \"") +
403 URLDescription(request.url()) + "\"\n");
404 }
405 delegate_->TestFinished();
406 }
407 }
408
409 void WebFrameTestClient::loadErrorPage(int reason) {
410 if (test_runner()->shouldDumpFrameLoadCallbacks()) {
411 delegate_->PrintMessage(base::StringPrintf(
412 "- loadErrorPage: %s\n", net::ErrorToString(reason).c_str()));
413 }
414 }
415
416 void WebFrameTestClient::didStartProvisionalLoad(
417 blink::WebDataSource* data_source) {
418 // PlzNavigate
419 // A provisional load notification is received when a frame navigation is
420 // sent to the browser. We don't want to log it again during commit.
421 if (delegate_->IsNavigationInitiatedByRenderer(data_source->getRequest()))
422 return;
423
424 test_runner()->tryToSetTopLoadingFrame(
425 web_frame_test_proxy_base_->web_frame());
426
427 if (test_runner()->shouldDumpFrameLoadCallbacks()) {
428 PrintFrameDescription(delegate_, web_frame_test_proxy_base_->web_frame());
429 delegate_->PrintMessage(" - didStartProvisionalLoadForFrame\n");
430 }
431
432 if (test_runner()->shouldDumpUserGestureInFrameLoadCallbacks()) {
433 PrintFrameuserGestureStatus(delegate_,
434 web_frame_test_proxy_base_->web_frame(),
435 " - in didStartProvisionalLoadForFrame\n");
436 }
437 }
438
439 void WebFrameTestClient::didReceiveServerRedirectForProvisionalLoad(
440 blink::WebLocalFrame* frame) {
441 if (test_runner()->shouldDumpFrameLoadCallbacks()) {
442 PrintFrameDescription(delegate_, frame);
443 delegate_->PrintMessage(
444 " - didReceiveServerRedirectForProvisionalLoadForFrame\n");
445 }
446 }
447
448 void WebFrameTestClient::didFailProvisionalLoad(
449 blink::WebLocalFrame* frame,
450 const blink::WebURLError& error,
451 blink::WebHistoryCommitType commit_type) {
452 if (test_runner()->shouldDumpFrameLoadCallbacks()) {
453 PrintFrameDescription(delegate_, frame);
454 delegate_->PrintMessage(" - didFailProvisionalLoadWithError\n");
455 }
456 }
457
458 void WebFrameTestClient::didCommitProvisionalLoad(
459 blink::WebLocalFrame* frame,
460 const blink::WebHistoryItem& history_item,
461 blink::WebHistoryCommitType history_type) {
462 if (test_runner()->shouldDumpFrameLoadCallbacks()) {
463 PrintFrameDescription(delegate_, frame);
464 delegate_->PrintMessage(" - didCommitLoadForFrame\n");
465 }
466 }
467
468 void WebFrameTestClient::didReceiveTitle(blink::WebLocalFrame* frame,
469 const blink::WebString& title,
470 blink::WebTextDirection direction) {
471 if (test_runner()->shouldDumpFrameLoadCallbacks()) {
472 PrintFrameDescription(delegate_, frame);
473 delegate_->PrintMessage(std::string(" - didReceiveTitle: ") + title.utf8() +
474 "\n");
475 }
476
477 if (test_runner()->shouldDumpTitleChanges())
478 delegate_->PrintMessage(std::string("TITLE CHANGED: '") + title.utf8() +
479 "'\n");
480 }
481
482 void WebFrameTestClient::didChangeIcon(blink::WebLocalFrame* frame,
483 blink::WebIconURL::Type icon_type) {
484 if (test_runner()->shouldDumpIconChanges()) {
485 PrintFrameDescription(delegate_, frame);
486 delegate_->PrintMessage(std::string(" - didChangeIcons\n"));
487 }
488 }
489
490 void WebFrameTestClient::didFinishDocumentLoad(blink::WebLocalFrame* frame) {
491 if (test_runner()->shouldDumpFrameLoadCallbacks()) {
492 PrintFrameDescription(delegate_, frame);
493 delegate_->PrintMessage(" - didFinishDocumentLoadForFrame\n");
494 }
495 }
496
497 void WebFrameTestClient::didHandleOnloadEvents(blink::WebLocalFrame* frame) {
498 if (test_runner()->shouldDumpFrameLoadCallbacks()) {
499 PrintFrameDescription(delegate_, frame);
500 delegate_->PrintMessage(" - didHandleOnloadEventsForFrame\n");
501 }
502 }
503
504 void WebFrameTestClient::didFailLoad(blink::WebLocalFrame* frame,
505 const blink::WebURLError& error,
506 blink::WebHistoryCommitType commit_type) {
507 if (test_runner()->shouldDumpFrameLoadCallbacks()) {
508 PrintFrameDescription(delegate_, frame);
509 delegate_->PrintMessage(" - didFailLoadWithError\n");
510 }
511 }
512
513 void WebFrameTestClient::didFinishLoad(blink::WebLocalFrame* frame) {
514 if (test_runner()->shouldDumpFrameLoadCallbacks()) {
515 PrintFrameDescription(delegate_, frame);
516 delegate_->PrintMessage(" - didFinishLoadForFrame\n");
517 }
518 }
519
520 void WebFrameTestClient::didNavigateWithinPage(
521 blink::WebLocalFrame* frame,
522 const blink::WebHistoryItem& history_item,
523 blink::WebHistoryCommitType commit_type,
524 bool contentInitiated) {
525 test_runner()->OnNavigationEnd();
526 }
527
528 void WebFrameTestClient::didStartLoading(bool to_different_document) {
529 test_runner()->OnNavigationBegin(web_frame_test_proxy_base_->web_frame());
530 }
531
532 void WebFrameTestClient::didStopLoading() {
533 test_runner()->tryToClearTopLoadingFrame(
534 web_frame_test_proxy_base_->web_frame());
535 }
536
537 void WebFrameTestClient::didDetectXSS(const blink::WebURL& insecure_url,
538 bool did_block_entire_page) {
539 if (test_runner()->shouldDumpFrameLoadCallbacks())
540 delegate_->PrintMessage("didDetectXSS\n");
541 }
542
543 void WebFrameTestClient::didDispatchPingLoader(const blink::WebURL& url) {
544 if (test_runner()->shouldDumpPingLoaderCallbacks())
545 delegate_->PrintMessage(std::string("PingLoader dispatched to '") +
546 URLDescription(url).c_str() + "'.\n");
547 }
548
549 void WebFrameTestClient::willSendRequest(blink::WebLocalFrame* frame,
550 blink::WebURLRequest& request) {
551 // PlzNavigate
552 // Navigation requests initiated by the renderer will have been logged when
553 // the navigation was sent to the browser. Please see
554 // the RenderFrameImpl::BeginNavigation() function.
555 if (delegate_->IsNavigationInitiatedByRenderer(request))
556 return;
557 // Need to use GURL for host() and SchemeIs()
558 GURL url = request.url();
559 std::string request_url = url.possibly_invalid_spec();
560
561 GURL main_document_url = request.firstPartyForCookies();
562
563 if (test_runner()->shouldDumpResourceLoadCallbacks()) {
564 delegate_->PrintMessage(DescriptionSuitableForTestResult(request_url));
565 delegate_->PrintMessage(" - willSendRequest <NSURLRequest URL ");
566 delegate_->PrintMessage(
567 DescriptionSuitableForTestResult(request_url).c_str());
568 delegate_->PrintMessage(", main document URL ");
569 delegate_->PrintMessage(URLDescription(main_document_url).c_str());
570 delegate_->PrintMessage(", http method ");
571 delegate_->PrintMessage(request.httpMethod().utf8().data());
572 delegate_->PrintMessage(">\n");
573 }
574
575 if (test_runner()->httpHeadersToClear()) {
576 const std::set<std::string>* clearHeaders =
577 test_runner()->httpHeadersToClear();
578 for (std::set<std::string>::const_iterator header = clearHeaders->begin();
579 header != clearHeaders->end(); ++header)
580 request.clearHTTPHeaderField(blink::WebString::fromUTF8(*header));
581 }
582
583 std::string host = url.host();
584 if (!host.empty() &&
585 (url.SchemeIs(url::kHttpScheme) || url.SchemeIs(url::kHttpsScheme))) {
586 if (!IsLocalHost(host) && !IsTestHost(host) &&
587 !HostIsUsedBySomeTestsToGenerateError(host) &&
588 ((!main_document_url.SchemeIs(url::kHttpScheme) &&
589 !main_document_url.SchemeIs(url::kHttpsScheme)) ||
590 IsLocalHost(main_document_url.host())) &&
591 !delegate_->AllowExternalPages()) {
592 delegate_->PrintMessage(std::string("Blocked access to external URL ") +
593 request_url + "\n");
594 BlockRequest(request);
595 return;
596 }
597 }
598
599 // Set the new substituted URL.
600 request.setURL(delegate_->RewriteLayoutTestsURL(
601 request.url().string().utf8(),
602 test_runner()->is_web_platform_tests_mode()));
603 }
604
605 void WebFrameTestClient::didReceiveResponse(
606 const blink::WebURLResponse& response) {
607 if (test_runner()->shouldDumpResourceLoadCallbacks()) {
608 delegate_->PrintMessage(DescriptionSuitableForTestResult(
609 GURL(response.url()).possibly_invalid_spec()));
610 delegate_->PrintMessage(" - didReceiveResponse ");
611 PrintResponseDescription(delegate_, response);
612 delegate_->PrintMessage("\n");
613 }
614 if (test_runner()->shouldDumpResourceResponseMIMETypes()) {
615 GURL url = response.url();
616 blink::WebString mime_type = response.mimeType();
617 delegate_->PrintMessage(url.ExtractFileName());
618 delegate_->PrintMessage(" has MIME type ");
619 // Simulate NSURLResponse's mapping of empty/unknown MIME types to
620 // application/octet-stream
621 delegate_->PrintMessage(mime_type.isEmpty() ? "application/octet-stream"
622 : mime_type.utf8().data());
623 delegate_->PrintMessage("\n");
624 }
625 }
626
627 void WebFrameTestClient::didAddMessageToConsole(
628 const blink::WebConsoleMessage& message,
629 const blink::WebString& source_name,
630 unsigned source_line,
631 const blink::WebString& stack_trace) {
632 if (!test_runner()->ShouldDumpConsoleMessages())
633 return;
634 std::string level;
635 switch (message.level) {
636 case blink::WebConsoleMessage::LevelVerbose:
637 level = "DEBUG";
638 break;
639 case blink::WebConsoleMessage::LevelInfo:
640 level = "MESSAGE";
641 break;
642 case blink::WebConsoleMessage::LevelWarning:
643 level = "WARNING";
644 break;
645 case blink::WebConsoleMessage::LevelError:
646 level = "ERROR";
647 break;
648 default:
649 level = "MESSAGE";
650 }
651 delegate_->PrintMessage(std::string("CONSOLE ") + level + ": ");
652 if (source_line) {
653 delegate_->PrintMessage(base::StringPrintf("line %d: ", source_line));
654 }
655 if (!message.text.isEmpty()) {
656 std::string new_message;
657 new_message = message.text.utf8();
658 size_t file_protocol = new_message.find("file://");
659 if (file_protocol != std::string::npos) {
660 new_message = new_message.substr(0, file_protocol) +
661 URLSuitableForTestResult(new_message.substr(file_protocol));
662 }
663 delegate_->PrintMessage(new_message);
664 }
665 delegate_->PrintMessage(std::string("\n"));
666 }
667
668 blink::WebNavigationPolicy WebFrameTestClient::decidePolicyForNavigation(
669 const blink::WebFrameClient::NavigationPolicyInfo& info) {
670 // PlzNavigate
671 // Navigation requests initiated by the renderer have checked navigation
672 // policy when the navigation was sent to the browser. Some layout tests
673 // expect that navigation policy is only checked once.
674 if (delegate_->IsNavigationInitiatedByRenderer(info.urlRequest))
675 return info.defaultPolicy;
676
677 if (test_runner()->shouldDumpNavigationPolicy()) {
678 delegate_->PrintMessage("Default policy for navigation to '" +
679 URLDescription(info.urlRequest.url()) + "' is '" +
680 WebNavigationPolicyToString(info.defaultPolicy) +
681 "'\n");
682 }
683
684 blink::WebNavigationPolicy result;
685 if (!test_runner()->policyDelegateEnabled())
686 return info.defaultPolicy;
687
688 delegate_->PrintMessage(
689 std::string("Policy delegate: attempt to load ") +
690 URLDescription(info.urlRequest.url()) + " with navigation type '" +
691 WebNavigationTypeToString(info.navigationType) + "'\n");
692 if (test_runner()->policyDelegateIsPermissive())
693 result = blink::WebNavigationPolicyCurrentTab;
694 else
695 result = blink::WebNavigationPolicyIgnore;
696
697 if (test_runner()->policyDelegateShouldNotifyDone()) {
698 test_runner()->policyDelegateDone();
699 result = blink::WebNavigationPolicyIgnore;
700 }
701
702 return result;
703 }
704
705 void WebFrameTestClient::checkIfAudioSinkExistsAndIsAuthorized(
706 const blink::WebString& sink_id,
707 const blink::WebSecurityOrigin& security_origin,
708 blink::WebSetSinkIdCallbacks* web_callbacks) {
709 std::unique_ptr<blink::WebSetSinkIdCallbacks> callback(web_callbacks);
710 std::string device_id = sink_id.utf8();
711 if (device_id == "valid" || device_id.empty())
712 callback->onSuccess();
713 else if (device_id == "unauthorized")
714 callback->onError(blink::WebSetSinkIdError::NotAuthorized);
715 else
716 callback->onError(blink::WebSetSinkIdError::NotFound);
717 }
718
719 void WebFrameTestClient::didClearWindowObject(blink::WebLocalFrame* frame) {
720 web_view_test_proxy_base_->test_interfaces()->BindTo(frame);
721 web_view_test_proxy_base_->BindTo(frame);
722 delegate_->GetWebWidgetTestProxyBase(frame)->BindTo(frame);
723 }
724
725 bool WebFrameTestClient::runFileChooser(
726 const blink::WebFileChooserParams& params,
727 blink::WebFileChooserCompletion* completion) {
728 delegate_->PrintMessage("Mock: Opening a file chooser.\n");
729 // FIXME: Add ability to set file names to a file upload control.
730 return false;
731 }
732
733 blink::WebEffectiveConnectionType
734 WebFrameTestClient::getEffectiveConnectionType() {
735 return test_runner()->effective_connection_type();
736 }
737
738 TestRunner* WebFrameTestClient::test_runner() {
739 return web_view_test_proxy_base_->test_interfaces()->GetTestRunner();
740 }
741
742 } // namespace test_runner
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698