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

Side by Side Diff: webkit/tools/test_shell/test_webview_delegate.cc

Issue 200054: Hook up WebFrameClient, replacing many WebViewDelegate methods.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years, 3 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 // This file contains the implementation of TestWebViewDelegate, which serves 5 // This file contains the implementation of TestWebViewDelegate, which serves
6 // as the WebViewDelegate for the TestShellWebHost. The host is expected to 6 // as the WebViewDelegate for the TestShellWebHost. The host is expected to
7 // have initialized a MessageLoop before these methods are called. 7 // have initialized a MessageLoop before these methods are called.
8 8
9 #include "config.h" 9 #include "config.h"
10 10
11 #undef LOG 11 #undef LOG
12 12
13 #include "webkit/tools/test_shell/test_webview_delegate.h" 13 #include "webkit/tools/test_shell/test_webview_delegate.h"
14 14
15 #include "base/file_util.h" 15 #include "base/file_util.h"
16 #include "base/gfx/point.h" 16 #include "base/gfx/point.h"
17 #include "base/gfx/native_widget_types.h" 17 #include "base/gfx/native_widget_types.h"
18 #include "base/message_loop.h" 18 #include "base/message_loop.h"
19 #include "base/process_util.h" 19 #include "base/process_util.h"
20 #include "base/string_util.h" 20 #include "base/string_util.h"
21 #include "base/trace_event.h" 21 #include "base/trace_event.h"
22 #include "net/base/net_errors.h" 22 #include "net/base/net_errors.h"
23 #include "webkit/api/public/WebCString.h"
23 #include "webkit/api/public/WebData.h" 24 #include "webkit/api/public/WebData.h"
24 #include "webkit/api/public/WebDataSource.h" 25 #include "webkit/api/public/WebDataSource.h"
25 #include "webkit/api/public/WebDragData.h" 26 #include "webkit/api/public/WebDragData.h"
26 #include "webkit/api/public/WebHistoryItem.h" 27 #include "webkit/api/public/WebHistoryItem.h"
27 #include "webkit/api/public/WebFrame.h" 28 #include "webkit/api/public/WebFrame.h"
28 #include "webkit/api/public/WebKit.h" 29 #include "webkit/api/public/WebKit.h"
29 #include "webkit/api/public/WebNode.h" 30 #include "webkit/api/public/WebNode.h"
30 #include "webkit/api/public/WebPoint.h" 31 #include "webkit/api/public/WebPoint.h"
31 #include "webkit/api/public/WebRange.h" 32 #include "webkit/api/public/WebRange.h"
32 #include "webkit/api/public/WebScreenInfo.h" 33 #include "webkit/api/public/WebScreenInfo.h"
(...skipping 24 matching lines...) Expand all
57 // TODO(port): make these files work everywhere. 58 // TODO(port): make these files work everywhere.
58 #include "webkit/tools/test_shell/drag_delegate.h" 59 #include "webkit/tools/test_shell/drag_delegate.h"
59 #include "webkit/tools/test_shell/drop_delegate.h" 60 #include "webkit/tools/test_shell/drop_delegate.h"
60 #endif 61 #endif
61 62
62 using WebKit::WebData; 63 using WebKit::WebData;
63 using WebKit::WebDataSource; 64 using WebKit::WebDataSource;
64 using WebKit::WebDragData; 65 using WebKit::WebDragData;
65 using WebKit::WebDragOperationsMask; 66 using WebKit::WebDragOperationsMask;
66 using WebKit::WebEditingAction; 67 using WebKit::WebEditingAction;
68 using WebKit::WebForm;
67 using WebKit::WebFrame; 69 using WebKit::WebFrame;
68 using WebKit::WebHistoryItem; 70 using WebKit::WebHistoryItem;
71 using WebKit::WebMediaPlayer;
72 using WebKit::WebMediaPlayerClient;
69 using WebKit::WebNavigationType; 73 using WebKit::WebNavigationType;
70 using WebKit::WebNavigationPolicy; 74 using WebKit::WebNavigationPolicy;
71 using WebKit::WebNode; 75 using WebKit::WebNode;
72 using WebKit::WebPlugin; 76 using WebKit::WebPlugin;
73 using WebKit::WebPluginParams; 77 using WebKit::WebPluginParams;
74 using WebKit::WebPoint; 78 using WebKit::WebPoint;
75 using WebKit::WebRange; 79 using WebKit::WebRange;
76 using WebKit::WebRect; 80 using WebKit::WebRect;
77 using WebKit::WebScreenInfo; 81 using WebKit::WebScreenInfo;
78 using WebKit::WebSize; 82 using WebKit::WebSize;
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 bool user_gesture, 248 bool user_gesture,
245 const GURL& creator_url) { 249 const GURL& creator_url) {
246 return shell_->CreateWebView(webview); 250 return shell_->CreateWebView(webview);
247 } 251 }
248 252
249 WebWidget* TestWebViewDelegate::CreatePopupWidget(WebView* webview, 253 WebWidget* TestWebViewDelegate::CreatePopupWidget(WebView* webview,
250 bool activatable) { 254 bool activatable) {
251 return shell_->CreatePopupWidget(webview); 255 return shell_->CreatePopupWidget(webview);
252 } 256 }
253 257
254 WebPlugin* TestWebViewDelegate::CreatePlugin(
255 WebFrame* frame, const WebPluginParams& params) {
256 return new webkit_glue::WebPluginImpl(frame, params, AsWeakPtr());
257 }
258
259 WebKit::WebMediaPlayer* TestWebViewDelegate::CreateWebMediaPlayer(
260 WebKit::WebMediaPlayerClient* client) {
261 scoped_refptr<media::FilterFactoryCollection> factory =
262 new media::FilterFactoryCollection();
263
264 // TODO(hclam): this is the same piece of code as in RenderView, maybe they
265 // should be grouped together.
266 webkit_glue::MediaResourceLoaderBridgeFactory* bridge_factory =
267 new webkit_glue::MediaResourceLoaderBridgeFactory(
268 GURL::EmptyGURL(), // referrer
269 "null", // frame origin
270 "null", // main_frame_origin
271 base::GetCurrentProcId(),
272 appcache::kNoHostId,
273 0);
274 factory->AddFactory(webkit_glue::BufferedDataSource::CreateFactory(
275 MessageLoop::current(), bridge_factory));
276 // TODO(hclam): Use command line switch to determine which data source to use.
277 return new webkit_glue::WebMediaPlayerImpl(client, factory);
278 }
279
280 WebWorker* TestWebViewDelegate::CreateWebWorker(WebWorkerClient* client) {
281 #if ENABLE(WORKERS)
282 return TestWebWorkerHelper::CreateWebWorker(client);
283 #else
284 return NULL;
285 #endif
286 }
287
288 void TestWebViewDelegate::OpenURL(WebView* webview, const GURL& url,
289 const GURL& referrer,
290 WebNavigationPolicy policy) {
291 DCHECK_NE(policy, WebKit::WebNavigationPolicyCurrentTab);
292 TestShell* shell = NULL;
293 if (TestShell::CreateNewWindow(UTF8ToWide(url.spec()), &shell))
294 shell->Show(policy);
295 }
296
297 void TestWebViewDelegate::WindowObjectCleared(WebFrame* webframe) {
298 shell_->BindJSObjectsToWindow(webframe);
299 }
300
301 WebNavigationPolicy TestWebViewDelegate::PolicyForNavigationAction(
302 WebView* webview,
303 WebFrame* frame,
304 const WebURLRequest& request,
305 WebNavigationType type,
306 WebNavigationPolicy default_policy,
307 bool is_redirect) {
308 WebNavigationPolicy result;
309 if (policy_delegate_enabled_) {
310 printf("Policy delegate: attempt to load %s with navigation type '%s'\n",
311 GetURLDescription(request.url()).c_str(),
312 WebNavigationTypeToString(type));
313 if (policy_delegate_is_permissive_) {
314 result = WebKit::WebNavigationPolicyCurrentTab;
315 } else {
316 result = WebKit::WebNavigationPolicyIgnore;
317 }
318 if (policy_delegate_should_notify_done_)
319 shell_->layout_test_controller()->PolicyDelegateDone();
320 } else {
321 result = default_policy;
322 }
323 return result;
324 }
325
326 void TestWebViewDelegate::AssignIdentifierToRequest(
327 WebFrame* webframe,
328 uint32 identifier,
329 const WebURLRequest& request) {
330 if (shell_->ShouldDumpResourceLoadCallbacks())
331 resource_identifier_map_[identifier] = request.url().spec();
332 }
333
334 std::string TestWebViewDelegate::GetResourceDescription(uint32 identifier) { 258 std::string TestWebViewDelegate::GetResourceDescription(uint32 identifier) {
335 ResourceMap::iterator it = resource_identifier_map_.find(identifier); 259 ResourceMap::iterator it = resource_identifier_map_.find(identifier);
336 return it != resource_identifier_map_.end() ? it->second : "<unknown>"; 260 return it != resource_identifier_map_.end() ? it->second : "<unknown>";
337 } 261 }
338 262
339 void TestWebViewDelegate::WillSendRequest(
340 WebFrame* webframe,
341 uint32 identifier,
342 WebURLRequest* request,
343 const WebURLResponse& redirect_response) {
344 GURL url = request->url();
345 std::string request_url = url.possibly_invalid_spec();
346
347 if (shell_->ShouldDumpResourceLoadCallbacks()) {
348 GURL main_document_url = request->firstPartyForCookies();
349 printf("%s - willSendRequest <NSURLRequest URL %s, main document URL %s,"
350 " http method %s> redirectResponse %s\n",
351 GetResourceDescription(identifier).c_str(),
352 request_url.c_str(),
353 GetURLDescription(main_document_url).c_str(),
354 request->httpMethod().utf8().data(),
355 GetResponseDescription(redirect_response).c_str());
356 }
357
358 if (!redirect_response.isNull() && block_redirects_) {
359 printf("Returning null for this redirect\n");
360
361 // To block the request, we set its URL to an empty one.
362 request->setURL(WebURL());
363 return;
364 }
365
366 std::string host = url.host();
367 if (TestShell::layout_test_mode() && !host.empty() &&
368 (url.SchemeIs("http") || url.SchemeIs("https")) &&
369 host != "127.0.0.1" &&
370 host != "255.255.255.255" && // Used in some tests that expect to get
371 // back an error.
372 host != "localhost") {
373 printf("Blocked access to external URL %s\n", request_url.c_str());
374
375 // To block the request, we set its URL to an empty one.
376 request->setURL(WebURL());
377 return;
378 }
379
380 TRACE_EVENT_BEGIN("url.load", identifier, request_url);
381 // Set the new substituted URL.
382 request->setURL(GURL(TestShell::RewriteLocalUrl(request_url)));
383 }
384
385 void TestWebViewDelegate::DidReceiveResponse(
386 WebFrame* webframe,
387 uint32 identifier,
388 const WebURLResponse& response) {
389 if (shell_->ShouldDumpResourceLoadCallbacks()) {
390 printf("%s - didReceiveResponse %s\n",
391 GetResourceDescription(identifier).c_str(),
392 GetResponseDescription(response).c_str());
393 }
394 }
395
396 void TestWebViewDelegate::DidFinishLoading(WebFrame* webframe,
397 uint32 identifier) {
398 TRACE_EVENT_END("url.load", identifier, "");
399 if (shell_->ShouldDumpResourceLoadCallbacks()) {
400 printf("%s - didFinishLoading\n",
401 GetResourceDescription(identifier).c_str());
402 }
403
404 resource_identifier_map_.erase(identifier);
405 }
406
407 void TestWebViewDelegate::DidFailLoadingWithError(WebFrame* webframe,
408 uint32 identifier,
409 const WebURLError& error) {
410 if (shell_->ShouldDumpResourceLoadCallbacks()) {
411 printf("%s - didFailLoadingWithError: %s\n",
412 GetResourceDescription(identifier).c_str(),
413 GetErrorDescription(error).c_str());
414 }
415
416 resource_identifier_map_.erase(identifier);
417 }
418
419 void TestWebViewDelegate::DidCreateDataSource(WebFrame* frame,
420 WebDataSource* ds) {
421 ds->setExtraData(pending_extra_data_.release());
422 }
423
424 void TestWebViewDelegate::DidStartProvisionalLoadForFrame(
425 WebView* webview,
426 WebFrame* frame,
427 NavigationGesture gesture) {
428 if (shell_->ShouldDumpFrameLoadCallbacks()) {
429 printf("%S - didStartProvisionalLoadForFrame\n",
430 GetFrameDescription(frame).c_str());
431 }
432
433 if (!top_loading_frame_) {
434 top_loading_frame_ = frame;
435 }
436
437 if (shell_->layout_test_controller()->StopProvisionalFrameLoads()) {
438 printf("%S - stopping load in didStartProvisionalLoadForFrame callback\n",
439 GetFrameDescription(frame).c_str());
440 frame->stopLoading();
441 }
442 UpdateAddressBar(webview);
443 }
444
445 void TestWebViewDelegate::DidReceiveProvisionalLoadServerRedirect(
446 WebView* webview,
447 WebFrame* frame) {
448 if (shell_->ShouldDumpFrameLoadCallbacks()) {
449 printf("%S - didReceiveServerRedirectForProvisionalLoadForFrame\n",
450 GetFrameDescription(frame).c_str());
451 }
452
453 UpdateAddressBar(webview);
454 }
455
456 void TestWebViewDelegate::DidFailProvisionalLoadWithError(
457 WebView* webview,
458 const WebURLError& error,
459 WebFrame* frame) {
460 if (shell_->ShouldDumpFrameLoadCallbacks()) {
461 printf("%S - didFailProvisionalLoadWithError\n",
462 GetFrameDescription(frame).c_str());
463 }
464
465 LocationChangeDone(frame);
466
467 // Don't display an error page if we're running layout tests, because
468 // DumpRenderTree doesn't.
469 if (shell_->layout_test_mode())
470 return;
471
472 // Don't display an error page if this is simply a cancelled load. Aside
473 // from being dumb, WebCore doesn't expect it and it will cause a crash.
474 if (error.reason == net::ERR_ABORTED)
475 return;
476
477 const WebDataSource* failed_ds = frame->provisionalDataSource();
478
479 TestShellExtraData* extra_data =
480 static_cast<TestShellExtraData*>(failed_ds->extraData());
481 bool replace = extra_data && extra_data->pending_page_id != -1;
482
483 const std::string& error_text =
484 StringPrintf("Error %d when loading url %s", error.reason,
485 failed_ds->request().url().spec().data());
486
487 // Make sure we never show errors in view source mode.
488 frame->enableViewSourceMode(false);
489
490 frame->loadHTMLString(
491 error_text, GURL("testshell-error:"), error.unreachableURL, replace);
492 }
493
494 void TestWebViewDelegate::DidCommitLoadForFrame(WebView* webview,
495 WebFrame* frame,
496 bool is_new_navigation) {
497 if (shell_->ShouldDumpFrameLoadCallbacks()) {
498 printf("%S - didCommitLoadForFrame\n",
499 GetFrameDescription(frame).c_str());
500 }
501
502 UpdateForCommittedLoad(frame, is_new_navigation);
503 }
504
505 void TestWebViewDelegate::DidReceiveTitle(WebView* webview,
506 const std::wstring& title,
507 WebFrame* frame) {
508 if (shell_->ShouldDumpFrameLoadCallbacks()) {
509 printf("%S - didReceiveTitle\n",
510 GetFrameDescription(frame).c_str());
511 }
512
513 if (shell_->ShouldDumpTitleChanges()) {
514 printf("TITLE CHANGED: %S\n", title.c_str());
515 }
516
517 SetPageTitle(title);
518 }
519
520 void TestWebViewDelegate::DidFinishLoadForFrame(WebView* webview,
521 WebFrame* frame) {
522 TRACE_EVENT_END("frame.load", this, frame->url().spec());
523 if (shell_->ShouldDumpFrameLoadCallbacks()) {
524 printf("%S - didFinishLoadForFrame\n",
525 GetFrameDescription(frame).c_str());
526 }
527
528 UpdateAddressBar(webview);
529 LocationChangeDone(frame);
530 }
531
532 void TestWebViewDelegate::DidFailLoadWithError(WebView* webview,
533 const WebURLError& error,
534 WebFrame* frame) {
535 if (shell_->ShouldDumpFrameLoadCallbacks()) {
536 printf("%S - didFailLoadWithError\n",
537 GetFrameDescription(frame).c_str());
538 }
539
540 LocationChangeDone(frame);
541 }
542
543 void TestWebViewDelegate::DidFinishDocumentLoadForFrame(WebView* webview,
544 WebFrame* frame) {
545 if (shell_->ShouldDumpFrameLoadCallbacks()) {
546 printf("%S - didFinishDocumentLoadForFrame\n",
547 GetFrameDescription(frame).c_str());
548 } else {
549 unsigned pending_unload_events = frame->unloadListenerCount();
550 if (pending_unload_events) {
551 printf("%S - has %u onunload handler(s)\n",
552 GetFrameDescription(frame).c_str(), pending_unload_events);
553 }
554 }
555 }
556
557 void TestWebViewDelegate::DidHandleOnloadEventsForFrame(WebView* webview,
558 WebFrame* frame) {
559 if (shell_->ShouldDumpFrameLoadCallbacks()) {
560 printf("%S - didHandleOnloadEventsForFrame\n",
561 GetFrameDescription(frame).c_str());
562 }
563 }
564
565 void TestWebViewDelegate::DidChangeLocationWithinPageForFrame(
566 WebView* webview, WebFrame* frame, bool is_new_navigation) {
567 frame->dataSource()->setExtraData(pending_extra_data_.release());
568
569 if (shell_->ShouldDumpFrameLoadCallbacks()) {
570 printf("%S - didChangeLocationWithinPageForFrame\n",
571 GetFrameDescription(frame).c_str());
572 }
573
574 UpdateForCommittedLoad(frame, is_new_navigation);
575 }
576
577 void TestWebViewDelegate::DidReceiveIconForFrame(WebView* webview, 263 void TestWebViewDelegate::DidReceiveIconForFrame(WebView* webview,
578 WebFrame* frame) { 264 WebFrame* frame) {
579 if (shell_->ShouldDumpFrameLoadCallbacks()) { 265 if (shell_->ShouldDumpFrameLoadCallbacks()) {
580 printf("%S - didReceiveIconForFrame\n", 266 printf("%S - didReceiveIconForFrame\n",
581 GetFrameDescription(frame).c_str()); 267 GetFrameDescription(frame).c_str());
582 } 268 }
583 } 269 }
584 270
585 void TestWebViewDelegate::WillPerformClientRedirect(WebView* webview,
586 WebFrame* frame,
587 const GURL& src_url,
588 const GURL& dest_url,
589 unsigned int delay_seconds,
590 unsigned int fire_date) {
591 if (shell_->ShouldDumpFrameLoadCallbacks()) {
592 printf("%S - willPerformClientRedirectToURL: %s \n",
593 GetFrameDescription(frame).c_str(),
594 dest_url.possibly_invalid_spec().c_str());
595 }
596 }
597
598 void TestWebViewDelegate::DidCancelClientRedirect(WebView* webview,
599 WebFrame* frame) {
600 if (shell_->ShouldDumpFrameLoadCallbacks()) {
601 printf("%S - didCancelClientRedirectForFrame\n",
602 GetFrameDescription(frame).c_str());
603 }
604 }
605
606 void TestWebViewDelegate::AddMessageToConsole(WebView* webview, 271 void TestWebViewDelegate::AddMessageToConsole(WebView* webview,
607 const std::wstring& message, 272 const std::wstring& message,
608 unsigned int line_no, 273 unsigned int line_no,
609 const std::wstring& source_id) { 274 const std::wstring& source_id) {
610 if (!shell_->layout_test_mode()) { 275 if (!shell_->layout_test_mode()) {
611 logging::LogMessage("CONSOLE", 0).stream() << "\"" 276 logging::LogMessage("CONSOLE", 0).stream() << "\""
612 << message.c_str() 277 << message.c_str()
613 << ",\" source: " 278 << ",\" source: "
614 << source_id.c_str() 279 << source_id.c_str()
615 << "(" 280 << "("
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
893 } 558 }
894 } 559 }
895 560
896 void TestWebViewDelegate::didEndEditing() { 561 void TestWebViewDelegate::didEndEditing() {
897 if (shell_->ShouldDumpEditingCallbacks()) { 562 if (shell_->ShouldDumpEditingCallbacks()) {
898 printf("EDITING DELEGATE: " 563 printf("EDITING DELEGATE: "
899 "webViewDidEndEditing:WebViewDidEndEditingNotification\n"); 564 "webViewDidEndEditing:WebViewDidEndEditingNotification\n");
900 } 565 }
901 } 566 }
902 567
568 // WebFrameClient ------------------------------------------------------------
569
570 WebPlugin* TestWebViewDelegate::createPlugin(
571 WebFrame* frame, const WebPluginParams& params) {
572 return new webkit_glue::WebPluginImpl(frame, params, AsWeakPtr());
573 }
574
575 WebWorker* TestWebViewDelegate::createWorker(
576 WebFrame* frame, WebWorkerClient* client) {
577 #if ENABLE(WORKERS)
578 return TestWebWorkerHelper::CreateWebWorker(client);
579 #else
580 return NULL;
581 #endif
582 }
583
584 WebMediaPlayer* TestWebViewDelegate::createMediaPlayer(
585 WebFrame* frame, WebMediaPlayerClient* client) {
586 scoped_refptr<media::FilterFactoryCollection> factory =
587 new media::FilterFactoryCollection();
588
589 // TODO(hclam): this is the same piece of code as in RenderView, maybe they
590 // should be grouped together.
591 webkit_glue::MediaResourceLoaderBridgeFactory* bridge_factory =
592 new webkit_glue::MediaResourceLoaderBridgeFactory(
593 GURL::EmptyGURL(), // referrer
594 "null", // frame origin
595 "null", // main_frame_origin
596 base::GetCurrentProcId(),
597 appcache::kNoHostId,
598 0);
599 factory->AddFactory(webkit_glue::BufferedDataSource::CreateFactory(
600 MessageLoop::current(), bridge_factory));
601 // TODO(hclam): Use command line switch to determine which data source to use.
602 return new webkit_glue::WebMediaPlayerImpl(client, factory);
603 }
604
605 void TestWebViewDelegate::willClose(WebFrame* frame) {
606 }
607
608 void TestWebViewDelegate::loadURLExternally(
609 WebFrame* frame, const WebURLRequest& request,
610 WebNavigationPolicy policy) {
611 DCHECK_NE(policy, WebKit::WebNavigationPolicyCurrentTab);
612 TestShell* shell = NULL;
613 if (TestShell::CreateNewWindow(request.url(), &shell))
614 shell->Show(policy);
615 }
616
617 WebNavigationPolicy TestWebViewDelegate::decidePolicyForNavigation(
618 WebFrame* frame, const WebURLRequest& request,
619 WebNavigationType type, WebNavigationPolicy default_policy,
620 bool is_redirect) {
621 WebNavigationPolicy result;
622 if (policy_delegate_enabled_) {
623 printf("Policy delegate: attempt to load %s with navigation type '%s'\n",
624 GetURLDescription(request.url()).c_str(),
625 WebNavigationTypeToString(type));
626 if (policy_delegate_is_permissive_) {
627 result = WebKit::WebNavigationPolicyCurrentTab;
628 } else {
629 result = WebKit::WebNavigationPolicyIgnore;
630 }
631 if (policy_delegate_should_notify_done_)
632 shell_->layout_test_controller()->PolicyDelegateDone();
633 } else {
634 result = default_policy;
635 }
636 return result;
637 }
638
639 void TestWebViewDelegate::willSubmitForm(WebFrame* frame, const WebForm&) {
640 // Ignore
641 }
642
643 void TestWebViewDelegate::willPerformClientRedirect(
644 WebFrame* frame, const WebURL& from, const WebURL& to,
645 double interval, double fire_time) {
646 if (shell_->ShouldDumpFrameLoadCallbacks()) {
647 printf("%S - willPerformClientRedirectToURL: %s \n",
648 GetFrameDescription(frame).c_str(),
649 to.spec().data());
650 }
651 }
652
653 void TestWebViewDelegate::didCancelClientRedirect(WebFrame* frame) {
654 if (shell_->ShouldDumpFrameLoadCallbacks()) {
655 printf("%S - didCancelClientRedirectForFrame\n",
656 GetFrameDescription(frame).c_str());
657 }
658 }
659
660 void TestWebViewDelegate::didCompleteClientRedirect(
661 WebFrame* frame, const WebURL& from) {
662 }
663
664 void TestWebViewDelegate::didCreateDataSource(
665 WebFrame* frame, WebDataSource* ds) {
666 ds->setExtraData(pending_extra_data_.release());
667 }
668
669 void TestWebViewDelegate::didStartProvisionalLoad(WebFrame* frame) {
670 if (shell_->ShouldDumpFrameLoadCallbacks()) {
671 printf("%S - didStartProvisionalLoadForFrame\n",
672 GetFrameDescription(frame).c_str());
673 }
674
675 if (!top_loading_frame_) {
676 top_loading_frame_ = frame;
677 }
678
679 if (shell_->layout_test_controller()->StopProvisionalFrameLoads()) {
680 printf("%S - stopping load in didStartProvisionalLoadForFrame callback\n",
681 GetFrameDescription(frame).c_str());
682 frame->stopLoading();
683 }
684 UpdateAddressBar(frame->view());
685 }
686
687 void TestWebViewDelegate::didReceiveServerRedirectForProvisionalLoad(
688 WebFrame* frame) {
689 if (shell_->ShouldDumpFrameLoadCallbacks()) {
690 printf("%S - didReceiveServerRedirectForProvisionalLoadForFrame\n",
691 GetFrameDescription(frame).c_str());
692 }
693 UpdateAddressBar(frame->view());
694 }
695
696 void TestWebViewDelegate::didFailProvisionalLoad(
697 WebFrame* frame, const WebURLError& error) {
698 if (shell_->ShouldDumpFrameLoadCallbacks()) {
699 printf("%S - didFailProvisionalLoadWithError\n",
700 GetFrameDescription(frame).c_str());
701 }
702
703 LocationChangeDone(frame);
704
705 // Don't display an error page if we're running layout tests, because
706 // DumpRenderTree doesn't.
707 if (shell_->layout_test_mode())
708 return;
709
710 // Don't display an error page if this is simply a cancelled load. Aside
711 // from being dumb, WebCore doesn't expect it and it will cause a crash.
712 if (error.reason == net::ERR_ABORTED)
713 return;
714
715 const WebDataSource* failed_ds = frame->provisionalDataSource();
716
717 TestShellExtraData* extra_data =
718 static_cast<TestShellExtraData*>(failed_ds->extraData());
719 bool replace = extra_data && extra_data->pending_page_id != -1;
720
721 const std::string& error_text =
722 StringPrintf("Error %d when loading url %s", error.reason,
723 failed_ds->request().url().spec().data());
724
725 // Make sure we never show errors in view source mode.
726 frame->enableViewSourceMode(false);
727
728 frame->loadHTMLString(
729 error_text, GURL("testshell-error:"), error.unreachableURL, replace);
730 }
731
732 void TestWebViewDelegate::didReceiveDocumentData(
733 WebFrame* frame, const char* data, size_t length,
734 bool& preventDefault) {
735 // Ignore
736 }
737
738 void TestWebViewDelegate::didCommitProvisionalLoad(
739 WebFrame* frame, bool is_new_navigation) {
740 if (shell_->ShouldDumpFrameLoadCallbacks()) {
741 printf("%S - didCommitLoadForFrame\n",
742 GetFrameDescription(frame).c_str());
743 }
744 UpdateForCommittedLoad(frame, is_new_navigation);
745 }
746
747 void TestWebViewDelegate::didClearWindowObject(WebFrame* frame) {
748 shell_->BindJSObjectsToWindow(frame);
749 }
750
751 void TestWebViewDelegate::didCreateDocumentElement(WebFrame* frame) {
752 // Ignore
753 }
754
755 void TestWebViewDelegate::didReceiveTitle(
756 WebFrame* frame, const WebString& title) {
757 std::wstring wtitle = UTF16ToWideHack(title);
758
759 if (shell_->ShouldDumpFrameLoadCallbacks()) {
760 printf("%S - didReceiveTitle\n",
761 GetFrameDescription(frame).c_str());
762 }
763
764 if (shell_->ShouldDumpTitleChanges()) {
765 printf("TITLE CHANGED: %S\n", wtitle.c_str());
766 }
767
768 SetPageTitle(wtitle);
769 }
770
771 void TestWebViewDelegate::didFinishDocumentLoad(WebFrame* frame) {
772 if (shell_->ShouldDumpFrameLoadCallbacks()) {
773 printf("%S - didFinishDocumentLoadForFrame\n",
774 GetFrameDescription(frame).c_str());
775 } else {
776 unsigned pending_unload_events = frame->unloadListenerCount();
777 if (pending_unload_events) {
778 printf("%S - has %u onunload handler(s)\n",
779 GetFrameDescription(frame).c_str(), pending_unload_events);
780 }
781 }
782 }
783
784 void TestWebViewDelegate::didHandleOnloadEvents(WebFrame* frame) {
785 if (shell_->ShouldDumpFrameLoadCallbacks()) {
786 printf("%S - didHandleOnloadEventsForFrame\n",
787 GetFrameDescription(frame).c_str());
788 }
789 }
790
791 void TestWebViewDelegate::didFailLoad(
792 WebFrame* frame, const WebURLError& error) {
793 if (shell_->ShouldDumpFrameLoadCallbacks()) {
794 printf("%S - didFailLoadWithError\n",
795 GetFrameDescription(frame).c_str());
796 }
797 LocationChangeDone(frame);
798 }
799
800 void TestWebViewDelegate::didFinishLoad(WebFrame* frame) {
801 TRACE_EVENT_END("frame.load", this, frame->url().spec());
802 if (shell_->ShouldDumpFrameLoadCallbacks()) {
803 printf("%S - didFinishLoadForFrame\n",
804 GetFrameDescription(frame).c_str());
805 }
806 UpdateAddressBar(frame->view());
807 LocationChangeDone(frame);
808 }
809
810 void TestWebViewDelegate::didChangeLocationWithinPage(
811 WebFrame* frame, bool is_new_navigation) {
812 frame->dataSource()->setExtraData(pending_extra_data_.release());
813
814 if (shell_->ShouldDumpFrameLoadCallbacks()) {
815 printf("%S - didChangeLocationWithinPageForFrame\n",
816 GetFrameDescription(frame).c_str());
817 }
818
819 UpdateForCommittedLoad(frame, is_new_navigation);
820 }
821
822 void TestWebViewDelegate::assignIdentifierToRequest(
823 WebFrame* frame, unsigned identifier, const WebURLRequest& request) {
824 if (shell_->ShouldDumpResourceLoadCallbacks())
825 resource_identifier_map_[identifier] = request.url().spec();
826 }
827
828 void TestWebViewDelegate::willSendRequest(
829 WebFrame* frame, unsigned identifier, WebURLRequest& request,
830 const WebURLResponse& redirect_response) {
831 GURL url = request.url();
832 std::string request_url = url.possibly_invalid_spec();
833
834 if (shell_->ShouldDumpResourceLoadCallbacks()) {
835 GURL main_document_url = request.firstPartyForCookies();
836 printf("%s - willSendRequest <NSURLRequest URL %s, main document URL %s,"
837 " http method %s> redirectResponse %s\n",
838 GetResourceDescription(identifier).c_str(),
839 request_url.c_str(),
840 GetURLDescription(main_document_url).c_str(),
841 request.httpMethod().utf8().data(),
842 GetResponseDescription(redirect_response).c_str());
843 }
844
845 if (!redirect_response.isNull() && block_redirects_) {
846 printf("Returning null for this redirect\n");
847
848 // To block the request, we set its URL to an empty one.
849 request.setURL(WebURL());
850 return;
851 }
852
853 std::string host = url.host();
854 if (TestShell::layout_test_mode() && !host.empty() &&
855 (url.SchemeIs("http") || url.SchemeIs("https")) &&
856 host != "127.0.0.1" &&
857 host != "255.255.255.255" && // Used in some tests that expect to get
858 // back an error.
859 host != "localhost") {
860 printf("Blocked access to external URL %s\n", request_url.c_str());
861
862 // To block the request, we set its URL to an empty one.
863 request.setURL(WebURL());
864 return;
865 }
866
867 TRACE_EVENT_BEGIN("url.load", identifier, request_url);
868 // Set the new substituted URL.
869 request.setURL(GURL(TestShell::RewriteLocalUrl(request_url)));
870 }
871
872 void TestWebViewDelegate::didReceiveResponse(
873 WebFrame* frame, unsigned identifier, const WebURLResponse& response) {
874 if (shell_->ShouldDumpResourceLoadCallbacks()) {
875 printf("%s - didReceiveResponse %s\n",
876 GetResourceDescription(identifier).c_str(),
877 GetResponseDescription(response).c_str());
878 }
879 }
880
881 void TestWebViewDelegate::didFinishResourceLoad(
882 WebFrame* frame, unsigned identifier) {
883 TRACE_EVENT_END("url.load", identifier, "");
884 if (shell_->ShouldDumpResourceLoadCallbacks()) {
885 printf("%s - didFinishLoading\n",
886 GetResourceDescription(identifier).c_str());
887 }
888 resource_identifier_map_.erase(identifier);
889 }
890
891 void TestWebViewDelegate::didFailResourceLoad(
892 WebFrame* frame, unsigned identifier, const WebURLError& error) {
893 if (shell_->ShouldDumpResourceLoadCallbacks()) {
894 printf("%s - didFailLoadingWithError: %s\n",
895 GetResourceDescription(identifier).c_str(),
896 GetErrorDescription(error).c_str());
897 }
898 resource_identifier_map_.erase(identifier);
899 }
900
901 void TestWebViewDelegate::didLoadResourceFromMemoryCache(
902 WebFrame* frame, const WebURLRequest&,
903 const WebURLResponse&) {
904 }
905
906 void TestWebViewDelegate::didExhaustMemoryAvailableForScript(WebFrame* frame) {
907 }
908
909 void TestWebViewDelegate::didChangeContentsSize(
910 WebFrame* frame, const WebSize&) {
911 }
912
913
903 // Public methods ------------------------------------------------------------ 914 // Public methods ------------------------------------------------------------
904 915
905 TestWebViewDelegate::TestWebViewDelegate(TestShell* shell) 916 TestWebViewDelegate::TestWebViewDelegate(TestShell* shell)
906 : policy_delegate_enabled_(false), 917 : policy_delegate_enabled_(false),
907 policy_delegate_is_permissive_(false), 918 policy_delegate_is_permissive_(false),
908 policy_delegate_should_notify_done_(false), 919 policy_delegate_should_notify_done_(false),
909 shell_(shell), 920 shell_(shell),
910 top_loading_frame_(NULL), 921 top_loading_frame_(NULL),
911 page_id_(-1), 922 page_id_(-1),
912 last_page_id_updated_(-1), 923 last_page_id_updated_(-1),
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
1083 return L"main frame \"" + name + L"\""; 1094 return L"main frame \"" + name + L"\"";
1084 else 1095 else
1085 return L"main frame"; 1096 return L"main frame";
1086 } else { 1097 } else {
1087 if (name.length()) 1098 if (name.length())
1088 return L"frame \"" + name + L"\""; 1099 return L"frame \"" + name + L"\"";
1089 else 1100 else
1090 return L"frame (anonymous)"; 1101 return L"frame (anonymous)";
1091 } 1102 }
1092 } 1103 }
OLDNEW
« no previous file with comments | « webkit/tools/test_shell/test_webview_delegate.h ('k') | webkit/tools/test_shell/webview_host_gtk.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698