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

Side by Side Diff: webkit/glue/webframeloaderclient_impl.cc

Issue 273003: Convert types in WebFrameLoaderClientImpl in preparation for moving... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 11 years, 2 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
« no previous file with comments | « webkit/glue/webframeloaderclient_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2009 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 "config.h" 5 #include "config.h"
6 6
7 #include <string>
8 #include <vector>
9
10 #include "Chrome.h" 7 #include "Chrome.h"
11 #include "CString.h" 8 #include "CString.h"
12 #include "Document.h" 9 #include "Document.h"
13 #include "DocumentLoader.h" 10 #include "DocumentLoader.h"
14 #include "HTMLAppletElement.h" 11 #include "HTMLAppletElement.h"
15 #include "HTMLFormElement.h" // needed by FormState.h 12 #include "HTMLFormElement.h" // needed by FormState.h
16 #include "HTMLNames.h" 13 #include "HTMLNames.h"
17 #include "FormState.h" 14 #include "FormState.h"
18 #include "FrameLoader.h" 15 #include "FrameLoader.h"
19 #include "FrameLoadRequest.h" 16 #include "FrameLoadRequest.h"
20 #include "MIMETypeRegistry.h" 17 #include "MIMETypeRegistry.h"
21 #include "MouseEvent.h" 18 #include "MouseEvent.h"
22 #include "Page.h" 19 #include "Page.h"
23 #include "PlatformString.h" 20 #include "PlatformString.h"
24 #include "PluginData.h" 21 #include "PluginData.h"
25 #include "StringExtras.h" 22 #include "StringExtras.h"
26 #include "WindowFeatures.h" 23 #include "WindowFeatures.h"
27 #undef LOG 24 #undef LOG
28 25
29 #include "base/basictypes.h"
30 #include "base/logging.h"
31 #include "base/string_util.h"
32 #include "net/base/mime_util.h" 26 #include "net/base/mime_util.h"
33 #include "net/base/net_errors.h" 27 #include "net/base/net_errors.h"
34 #include "webkit/api/public/WebForm.h" 28 #include "webkit/api/public/WebForm.h"
35 #include "webkit/api/public/WebFrameClient.h" 29 #include "webkit/api/public/WebFrameClient.h"
36 #include "webkit/api/public/WebPlugin.h" 30 #include "webkit/api/public/WebPlugin.h"
37 #include "webkit/api/public/WebPluginParams.h" 31 #include "webkit/api/public/WebPluginParams.h"
38 #include "webkit/api/public/WebSecurityOrigin.h" 32 #include "webkit/api/public/WebSecurityOrigin.h"
39 #include "webkit/api/public/WebURL.h" 33 #include "webkit/api/public/WebURL.h"
40 #include "webkit/api/public/WebURLError.h" 34 #include "webkit/api/public/WebURLError.h"
41 #include "webkit/api/public/WebVector.h" 35 #include "webkit/api/public/WebVector.h"
42 #include "webkit/api/src/WebDataSourceImpl.h" 36 #include "webkit/api/src/WebDataSourceImpl.h"
43 #include "webkit/api/src/WebPluginContainerImpl.h" 37 #include "webkit/api/src/WebPluginContainerImpl.h"
44 #include "webkit/api/src/WebPluginLoadObserver.h" 38 #include "webkit/api/src/WebPluginLoadObserver.h"
45 #include "webkit/api/src/WrappedResourceRequest.h" 39 #include "webkit/api/src/WrappedResourceRequest.h"
46 #include "webkit/api/src/WrappedResourceResponse.h" 40 #include "webkit/api/src/WrappedResourceResponse.h"
47 #include "webkit/glue/glue_util.h" 41 #include "webkit/glue/glue_util.h"
48 #include "webkit/glue/plugins/plugin_list.h"
49 #include "webkit/glue/webdevtoolsagent_impl.h" 42 #include "webkit/glue/webdevtoolsagent_impl.h"
50 #include "webkit/glue/webframe_impl.h" 43 #include "webkit/glue/webframe_impl.h"
51 #include "webkit/glue/webframeloaderclient_impl.h" 44 #include "webkit/glue/webframeloaderclient_impl.h"
52 #include "webkit/glue/webkit_glue.h" 45 #include "webkit/glue/webkit_glue.h"
53 #include "webkit/glue/webview_delegate.h"
54 #include "webkit/glue/webview_impl.h" 46 #include "webkit/glue/webview_impl.h"
55 47
56 using namespace WebCore; 48 using namespace WebCore;
57 49
58 using base::Time;
59 using base::TimeDelta;
60
61 using WebKit::WebData; 50 using WebKit::WebData;
62 using WebKit::WebDataSourceImpl; 51 using WebKit::WebDataSourceImpl;
63 using WebKit::WebNavigationType; 52 using WebKit::WebNavigationType;
64 using WebKit::WebNavigationPolicy; 53 using WebKit::WebNavigationPolicy;
65 using WebKit::WebPlugin; 54 using WebKit::WebPlugin;
66 using WebKit::WebPluginContainerImpl; 55 using WebKit::WebPluginContainerImpl;
67 using WebKit::WebPluginLoadObserver; 56 using WebKit::WebPluginLoadObserver;
68 using WebKit::WebPluginParams; 57 using WebKit::WebPluginParams;
69 using WebKit::WebString; 58 using WebKit::WebString;
70 using WebKit::WebURL; 59 using WebKit::WebURL;
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 // dispatchDidCommitLoad() -> DISPATCHES 1#anchor 408 // dispatchDidCommitLoad() -> DISPATCHES 1#anchor
420 // dispatchWillPerformClientRedirect() -> saves exp. source (1#anchor) 409 // dispatchWillPerformClientRedirect() -> saves exp. source (1#anchor)
421 // -- redirect timer fires 410 // -- redirect timer fires
422 // dispatchDidStartProvisionalLoad() -> appends 1#a nchor (src) and 1 (dest) 411 // dispatchDidStartProvisionalLoad() -> appends 1#a nchor (src) and 1 (dest)
423 // dispatchDidCancelClientRedirect() -> clears expe cted redirect 412 // dispatchDidCancelClientRedirect() -> clears expe cted redirect
424 // dispatchDidCommitLoad() -> DISPATCHES 1#anchor + 1 413 // dispatchDidCommitLoad() -> DISPATCHES 1#anchor + 1
425 // 414 //
426 void WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad() { 415 void WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad() {
427 WebDataSourceImpl* ds = webframe_->GetProvisionalDataSourceImpl(); 416 WebDataSourceImpl* ds = webframe_->GetProvisionalDataSourceImpl();
428 if (!ds) { 417 if (!ds) {
429 NOTREACHED() << "Got a server redirect when there is no provisional DS"; 418 // Got a server redirect when there is no provisional DS!
419 ASSERT_NOT_REACHED();
430 return; 420 return;
431 } 421 }
432 422
433 // The server redirect may have been blocked. 423 // The server redirect may have been blocked.
434 if (ds->request().isNull()) 424 if (ds->request().isNull())
435 return; 425 return;
436 426
437 // A provisional load should have started already, which should have put an 427 // A provisional load should have started already, which should have put an
438 // entry in our redirect chain. 428 // entry in our redirect chain.
439 DCHECK(ds->hasRedirectChain()); 429 ASSERT(ds->hasRedirectChain());
440 430
441 // The URL of the destination is on the provisional data source. We also need 431 // The URL of the destination is on the provisional data source. We also need
442 // to update the redirect chain to account for this addition (we do this 432 // to update the redirect chain to account for this addition (we do this
443 // before the callback so the callback can look at the redirect chain to see 433 // before the callback so the callback can look at the redirect chain to see
444 // what happened). 434 // what happened).
445 ds->appendRedirect(ds->request().url()); 435 ds->appendRedirect(webkit_glue::WebURLToKURL(ds->request().url()));
446 436
447 if (webframe_->client()) 437 if (webframe_->client())
448 webframe_->client()->didReceiveServerRedirectForProvisionalLoad(webframe_); 438 webframe_->client()->didReceiveServerRedirectForProvisionalLoad(webframe_);
449 } 439 }
450 440
451 // Called on both success and failure of a client redirect. 441 // Called on both success and failure of a client redirect.
452 void WebFrameLoaderClient::dispatchDidCancelClientRedirect() { 442 void WebFrameLoaderClient::dispatchDidCancelClientRedirect() {
453 // No longer expecting a client redirect. 443 // No longer expecting a client redirect.
454 if (webframe_->client()) { 444 if (webframe_->client()) {
455 expected_client_redirect_src_ = GURL(); 445 expected_client_redirect_src_ = KURL();
456 expected_client_redirect_dest_ = GURL(); 446 expected_client_redirect_dest_ = KURL();
457 webframe_->client()->didCancelClientRedirect(webframe_); 447 webframe_->client()->didCancelClientRedirect(webframe_);
458 } 448 }
459 449
460 // No need to clear the redirect chain, since that data source has already 450 // No need to clear the redirect chain, since that data source has already
461 // been deleted by the time this function is called. 451 // been deleted by the time this function is called.
462 } 452 }
463 453
464 void WebFrameLoaderClient::dispatchWillPerformClientRedirect( 454 void WebFrameLoaderClient::dispatchWillPerformClientRedirect(
465 const KURL& url, 455 const KURL& url,
466 double interval, 456 double interval,
467 double fire_date) { 457 double fire_date) {
468 // Tells dispatchDidStartProvisionalLoad that if it sees this item it is a 458 // Tells dispatchDidStartProvisionalLoad that if it sees this item it is a
469 // redirect and the source item should be added as the start of the chain. 459 // redirect and the source item should be added as the start of the chain.
470 expected_client_redirect_src_ = webframe_->url(); 460 expected_client_redirect_src_ = webkit_glue::WebURLToKURL(webframe_->url());
471 expected_client_redirect_dest_ = webkit_glue::KURLToGURL(url); 461 expected_client_redirect_dest_ = url;
472 462
473 // TODO(timsteele): bug 1135512. Webkit does not properly notify us of 463 // TODO(timsteele): bug 1135512. Webkit does not properly notify us of
474 // cancelling http > file client redirects. Since the FrameLoader's policy 464 // cancelling http > file client redirects. Since the FrameLoader's policy
475 // is to never carry out such a navigation anyway, the best thing we can do 465 // is to never carry out such a navigation anyway, the best thing we can do
476 // for now to not get confused is ignore this notification. 466 // for now to not get confused is ignore this notification.
477 if (expected_client_redirect_dest_.SchemeIsFile() && 467 if (expected_client_redirect_dest_.isLocalFile() &&
478 (expected_client_redirect_src_.SchemeIs("http") || 468 expected_client_redirect_src_.protocolInHTTPFamily()) {
479 expected_client_redirect_src_.SchemeIsSecure())) { 469 expected_client_redirect_src_ = KURL();
480 expected_client_redirect_src_ = GURL(); 470 expected_client_redirect_dest_ = KURL();
481 expected_client_redirect_dest_ = GURL();
482 return; 471 return;
483 } 472 }
484 473
485 if (webframe_->client()) { 474 if (webframe_->client()) {
486 webframe_->client()->willPerformClientRedirect( 475 webframe_->client()->willPerformClientRedirect(
487 webframe_, 476 webframe_,
488 expected_client_redirect_src_, 477 webkit_glue::KURLToWebURL(expected_client_redirect_src_),
489 expected_client_redirect_dest_, 478 webkit_glue::KURLToWebURL(expected_client_redirect_dest_),
490 static_cast<unsigned int>(interval), 479 static_cast<unsigned int>(interval),
491 static_cast<unsigned int>(fire_date)); 480 static_cast<unsigned int>(fire_date));
492 } 481 }
493 } 482 }
494 483
495 void WebFrameLoaderClient::dispatchDidChangeLocationWithinPage() { 484 void WebFrameLoaderClient::dispatchDidChangeLocationWithinPage() {
496 // Anchor fragment navigations are not normal loads, so we need to synthesize 485 // Anchor fragment navigations are not normal loads, so we need to synthesize
497 // some events for our delegate. 486 // some events for our delegate.
498 WebViewImpl* webview = webframe_->GetWebViewImpl(); 487 WebViewImpl* webview = webframe_->GetWebViewImpl();
499 if (webview->client()) 488 if (webview->client())
500 webview->client()->didStartLoading(); 489 webview->client()->didStartLoading();
501 490
502 WebDataSourceImpl* ds = webframe_->GetDataSourceImpl(); 491 WebDataSourceImpl* ds = webframe_->GetDataSourceImpl();
503 DCHECK(ds) << "DataSource NULL when navigating to reference fragment"; 492 ASSERT(ds); // Should not be null when navigating to a reference fragment!
504 if (ds) { 493 if (ds) {
505 GURL url = ds->request().url(); 494 KURL url = webkit_glue::WebURLToKURL(ds->request().url());
506 GURL chain_end = ds->endOfRedirectChain(); 495 KURL chain_end = ds->endOfRedirectChain();
507 ds->clearRedirectChain(); 496 ds->clearRedirectChain();
508 497
509 // Figure out if this location change is because of a JS-initiated client 498 // Figure out if this location change is because of a JS-initiated client
510 // redirect (e.g onload/setTimeout document.location.href=). 499 // redirect (e.g onload/setTimeout document.location.href=).
511 // TODO(timsteele): (bugs 1085325, 1046841) We don't get proper redirect 500 // TODO(timsteele): (bugs 1085325, 1046841) We don't get proper redirect
512 // performed/cancelled notifications across anchor navigations, so the 501 // performed/cancelled notifications across anchor navigations, so the
513 // other redirect-tracking code in this class (see dispatch*ClientRedirect() 502 // other redirect-tracking code in this class (see dispatch*ClientRedirect()
514 // and dispatchDidStartProvisionalLoad) is insufficient to catch and 503 // and dispatchDidStartProvisionalLoad) is insufficient to catch and
515 // properly flag these transitions. Once a proper fix for this bug is 504 // properly flag these transitions. Once a proper fix for this bug is
516 // identified and applied the following block may no longer be required. 505 // identified and applied the following block may no longer be required.
517 bool was_client_redirect = 506 bool was_client_redirect =
518 (url == expected_client_redirect_dest_ && 507 (url == expected_client_redirect_dest_ &&
519 chain_end == expected_client_redirect_src_) || 508 chain_end == expected_client_redirect_src_) ||
520 !webframe_->isProcessingUserGesture(); 509 !webframe_->isProcessingUserGesture();
521 510
522 if (was_client_redirect) { 511 if (was_client_redirect) {
523 if (webframe_->client()) 512 if (webframe_->client()) {
524 webframe_->client()->didCompleteClientRedirect(webframe_, chain_end); 513 webframe_->client()->didCompleteClientRedirect(
514 webframe_, webkit_glue::KURLToWebURL(chain_end));
515 }
525 ds->appendRedirect(chain_end); 516 ds->appendRedirect(chain_end);
526 // Make sure we clear the expected redirect since we just effectively 517 // Make sure we clear the expected redirect since we just effectively
527 // completed it. 518 // completed it.
528 expected_client_redirect_src_ = GURL(); 519 expected_client_redirect_src_ = KURL();
529 expected_client_redirect_dest_ = GURL(); 520 expected_client_redirect_dest_ = KURL();
530 } 521 }
531 522
532 // Regardless of how we got here, we are navigating to a URL so we need to 523 // Regardless of how we got here, we are navigating to a URL so we need to
533 // add it to the redirect chain. 524 // add it to the redirect chain.
534 ds->appendRedirect(url); 525 ds->appendRedirect(url);
535 } 526 }
536 527
537 bool is_new_navigation; 528 bool is_new_navigation;
538 webview->DidCommitLoad(&is_new_navigation); 529 webview->DidCommitLoad(&is_new_navigation);
539 if (webframe_->client()) { 530 if (webframe_->client()) {
(...skipping 16 matching lines...) Expand all
556 } 547 }
557 548
558 void WebFrameLoaderClient::dispatchDidStartProvisionalLoad() { 549 void WebFrameLoaderClient::dispatchDidStartProvisionalLoad() {
559 // In case a redirect occurs, we need this to be set so that the redirect 550 // In case a redirect occurs, we need this to be set so that the redirect
560 // handling code can tell where the redirect came from. Server redirects 551 // handling code can tell where the redirect came from. Server redirects
561 // will occur on the provisional load, so we need to keep track of the most 552 // will occur on the provisional load, so we need to keep track of the most
562 // recent provisional load URL. 553 // recent provisional load URL.
563 // See dispatchDidReceiveServerRedirectForProvisionalLoad. 554 // See dispatchDidReceiveServerRedirectForProvisionalLoad.
564 WebDataSourceImpl* ds = webframe_->GetProvisionalDataSourceImpl(); 555 WebDataSourceImpl* ds = webframe_->GetProvisionalDataSourceImpl();
565 if (!ds) { 556 if (!ds) {
566 NOTREACHED() << "Attempting to provisional load but there isn't one"; 557 ASSERT_NOT_REACHED();
567 return; 558 return;
568 } 559 }
569 GURL url = ds->request().url(); 560 KURL url = webkit_glue::WebURLToKURL(ds->request().url());
570 561
571 // Since the provisional load just started, we should have not gotten 562 // Since the provisional load just started, we should have not gotten
572 // any redirects yet. 563 // any redirects yet.
573 DCHECK(!ds->hasRedirectChain()); 564 ASSERT(!ds->hasRedirectChain());
574 565
575 // If this load is what we expected from a client redirect, treat it as a 566 // If this load is what we expected from a client redirect, treat it as a
576 // redirect from that original page. The expected redirect urls will be 567 // redirect from that original page. The expected redirect urls will be
577 // cleared by DidCancelClientRedirect. 568 // cleared by DidCancelClientRedirect.
578 bool completing_client_redirect = false; 569 bool completing_client_redirect = false;
579 if (expected_client_redirect_src_.is_valid()) { 570 if (expected_client_redirect_src_.isValid()) {
580 // expected_client_redirect_dest_ could be something like 571 // expected_client_redirect_dest_ could be something like
581 // "javascript:history.go(-1)" thus we need to exclude url starts with 572 // "javascript:history.go(-1)" thus we need to exclude url starts with
582 // "javascript:". See bug: 1080873 573 // "javascript:". See bug: 1080873
583 DCHECK(expected_client_redirect_dest_.SchemeIs("javascript") || 574 ASSERT(expected_client_redirect_dest_.protocolIs("javascript") ||
584 expected_client_redirect_dest_ == url); 575 expected_client_redirect_dest_ == url);
585 ds->appendRedirect(expected_client_redirect_src_); 576 ds->appendRedirect(expected_client_redirect_src_);
586 completing_client_redirect = true; 577 completing_client_redirect = true;
587 } 578 }
588 ds->appendRedirect(url); 579 ds->appendRedirect(url);
589 580
590 if (webframe_->client()) { 581 if (webframe_->client()) {
591 // As the comment for DidCompleteClientRedirect in webview_delegate.h 582 // As the comment for DidCompleteClientRedirect in webview_delegate.h
592 // points out, whatever information its invocation contains should only 583 // points out, whatever information its invocation contains should only
593 // be considered relevant until the next provisional load has started. 584 // be considered relevant until the next provisional load has started.
594 // So we first tell the delegate that the load started, and then tell it 585 // So we first tell the delegate that the load started, and then tell it
595 // about the client redirect the load is responsible for completing. 586 // about the client redirect the load is responsible for completing.
596 webframe_->client()->didStartProvisionalLoad(webframe_); 587 webframe_->client()->didStartProvisionalLoad(webframe_);
597 if (completing_client_redirect) 588 if (completing_client_redirect)
598 webframe_->client()->didCompleteClientRedirect( 589 webframe_->client()->didCompleteClientRedirect(
599 webframe_, expected_client_redirect_src_); 590 webframe_, webkit_glue::KURLToWebURL(expected_client_redirect_src_));
600 } 591 }
601 } 592 }
602 593
603 void WebFrameLoaderClient::dispatchDidReceiveTitle(const String& title) { 594 void WebFrameLoaderClient::dispatchDidReceiveTitle(const String& title) {
604 if (webframe_->client()) { 595 if (webframe_->client()) {
605 webframe_->client()->didReceiveTitle( 596 webframe_->client()->didReceiveTitle(
606 webframe_, webkit_glue::StringToWebString(title)); 597 webframe_, webkit_glue::StringToWebString(title));
607 } 598 }
608 } 599 }
609 600
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 // All resources have not necessarily finished loading. 666 // All resources have not necessarily finished loading.
676 } 667 }
677 668
678 Frame* WebFrameLoaderClient::dispatchCreatePage() { 669 Frame* WebFrameLoaderClient::dispatchCreatePage() {
679 struct WebCore::WindowFeatures features; 670 struct WebCore::WindowFeatures features;
680 Page* new_page = webframe_->frame()->page()->chrome()->createWindow( 671 Page* new_page = webframe_->frame()->page()->chrome()->createWindow(
681 webframe_->frame(), FrameLoadRequest(), features); 672 webframe_->frame(), FrameLoadRequest(), features);
682 673
683 // Make sure that we have a valid disposition. This should have been set in 674 // Make sure that we have a valid disposition. This should have been set in
684 // the preceeding call to dispatchDecidePolicyForNewWindowAction. 675 // the preceeding call to dispatchDecidePolicyForNewWindowAction.
685 DCHECK(next_navigation_policy_ != WebKit::WebNavigationPolicyIgnore); 676 ASSERT(next_navigation_policy_ != WebKit::WebNavigationPolicyIgnore);
686 WebNavigationPolicy policy = next_navigation_policy_; 677 WebNavigationPolicy policy = next_navigation_policy_;
687 next_navigation_policy_ = WebKit::WebNavigationPolicyIgnore; 678 next_navigation_policy_ = WebKit::WebNavigationPolicyIgnore;
688 679
689 // createWindow can return NULL (e.g., popup blocker denies the window). 680 // createWindow can return NULL (e.g., popup blocker denies the window).
690 if (!new_page) 681 if (!new_page)
691 return NULL; 682 return NULL;
692 683
693 WebViewImpl::FromPage(new_page)->set_initial_navigation_policy(policy); 684 WebViewImpl::FromPage(new_page)->set_initial_navigation_policy(policy);
694 return new_page->mainFrame(); 685 return new_page->mainFrame();
695 } 686 }
696 687
697 void WebFrameLoaderClient::dispatchShow() { 688 void WebFrameLoaderClient::dispatchShow() {
698 WebViewImpl* webview = webframe_->GetWebViewImpl(); 689 WebViewImpl* webview = webframe_->GetWebViewImpl();
699 WebViewDelegate* d = webview->delegate(); 690 if (webview && webview->client())
700 if (d) 691 webview->client()->show(webview->initial_navigation_policy());
701 d->show(webview->initial_navigation_policy());
702 } 692 }
703 693
704 static bool TreatAsAttachment(const ResourceResponse& response) { 694 static bool TreatAsAttachment(const ResourceResponse& response) {
705 const String& content_disposition = 695 const String& content_disposition =
706 response.httpHeaderField("Content-Disposition"); 696 response.httpHeaderField("Content-Disposition");
707 if (content_disposition.isEmpty()) 697 if (content_disposition.isEmpty())
708 return false; 698 return false;
709 699
710 // Some broken sites just send 700 // Some broken sites just send
711 // Content-Disposition: ; filename="file" 701 // Content-Disposition: ; filename="file"
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
799 // The NULL check here is to fix a crash that seems strange 789 // The NULL check here is to fix a crash that seems strange
800 // (see - https://bugs.webkit.org/show_bug.cgi?id=23554). 790 // (see - https://bugs.webkit.org/show_bug.cgi?id=23554).
801 if (webframe_->client() && !request.url().isNull()) { 791 if (webframe_->client() && !request.url().isNull()) {
802 WebNavigationPolicy navigation_policy = 792 WebNavigationPolicy navigation_policy =
803 WebKit::WebNavigationPolicyCurrentTab; 793 WebKit::WebNavigationPolicyCurrentTab;
804 ActionSpecifiesNavigationPolicy(action, &navigation_policy); 794 ActionSpecifiesNavigationPolicy(action, &navigation_policy);
805 795
806 // Give the delegate a chance to change the navigation policy. 796 // Give the delegate a chance to change the navigation policy.
807 const WebDataSourceImpl* ds = webframe_->GetProvisionalDataSourceImpl(); 797 const WebDataSourceImpl* ds = webframe_->GetProvisionalDataSourceImpl();
808 if (ds) { 798 if (ds) {
809 GURL url = ds->request().url(); 799 KURL url = webkit_glue::WebURLToKURL(ds->request().url());
810 if (url.SchemeIs(webkit_glue::kBackForwardNavigationScheme)) { 800 if (url.protocolIs(webkit_glue::kBackForwardNavigationScheme)) {
811 HandleBackForwardNavigation(url); 801 HandleBackForwardNavigation(url);
812 navigation_policy = WebKit::WebNavigationPolicyIgnore; 802 navigation_policy = WebKit::WebNavigationPolicyIgnore;
813 } else { 803 } else {
814 bool is_redirect = ds->hasRedirectChain(); 804 bool is_redirect = ds->hasRedirectChain();
815 805
816 WebNavigationType webnav_type = 806 WebNavigationType webnav_type =
817 WebDataSourceImpl::toWebNavigationType(action.type()); 807 WebDataSourceImpl::toWebNavigationType(action.type());
818 808
819 navigation_policy = webframe_->client()->decidePolicyForNavigation( 809 navigation_policy = webframe_->client()->decidePolicyForNavigation(
820 webframe_, ds->request(), webnav_type, navigation_policy, 810 webframe_, ds->request(), webnav_type, navigation_policy,
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after
1129 // 1119 //
1130 // item_impl->SetTitle(webkit_glue::StringToStdWString(title)); 1120 // item_impl->SetTitle(webkit_glue::StringToStdWString(title));
1131 } 1121 }
1132 1122
1133 String WebFrameLoaderClient::userAgent(const KURL& url) { 1123 String WebFrameLoaderClient::userAgent(const KURL& url) {
1134 return webkit_glue::StdStringToString( 1124 return webkit_glue::StdStringToString(
1135 webkit_glue::GetUserAgent(webkit_glue::KURLToGURL(url))); 1125 webkit_glue::GetUserAgent(webkit_glue::KURLToGURL(url)));
1136 } 1126 }
1137 1127
1138 void WebFrameLoaderClient::savePlatformDataToCachedFrame(WebCore::CachedFrame*) { 1128 void WebFrameLoaderClient::savePlatformDataToCachedFrame(WebCore::CachedFrame*) {
1139 NOTREACHED() << "Page cache should be disabled"; 1129 // The page cache should be disabled.
1130 ASSERT_NOT_REACHED();
1140 } 1131 }
1141 1132
1142 void WebFrameLoaderClient::transitionToCommittedFromCachedFrame(WebCore::CachedF rame*) { 1133 void WebFrameLoaderClient::transitionToCommittedFromCachedFrame(WebCore::CachedF rame*) {
1143 ASSERT_NOT_REACHED(); 1134 ASSERT_NOT_REACHED();
1144 } 1135 }
1145 1136
1146 // Called when the FrameLoader goes into a state in which a new page load 1137 // Called when the FrameLoader goes into a state in which a new page load
1147 // will occur. 1138 // will occur.
1148 void WebFrameLoaderClient::transitionToCommittedForNewPage() { 1139 void WebFrameLoaderClient::transitionToCommittedForNewPage() {
1149 makeDocumentView(); 1140 makeDocumentView();
1150 } 1141 }
1151 1142
1152 bool WebFrameLoaderClient::canCachePage() const { 1143 bool WebFrameLoaderClient::canCachePage() const {
1153 // Since we manage the cache, always report this page as non-cacheable to 1144 // Since we manage the cache, always report this page as non-cacheable to
1154 // FrameLoader. 1145 // FrameLoader.
1155 return false; 1146 return false;
1156 } 1147 }
1157 1148
1158 // Downloading is handled in the browser process, not WebKit. If we get to this 1149 // Downloading is handled in the browser process, not WebKit. If we get to this
1159 // point, our download detection code in the ResourceDispatcherHost is broken! 1150 // point, our download detection code in the ResourceDispatcherHost is broken!
1160 void WebFrameLoaderClient::download(ResourceHandle* handle, 1151 void WebFrameLoaderClient::download(ResourceHandle* handle,
1161 const ResourceRequest& request, 1152 const ResourceRequest& request,
1162 const ResourceRequest& initialRequest, 1153 const ResourceRequest& initialRequest,
1163 const ResourceResponse& response) { 1154 const ResourceResponse& response) {
1164 NOTREACHED(); 1155 ASSERT_NOT_REACHED();
1165 } 1156 }
1166 1157
1167 PassRefPtr<Frame> WebFrameLoaderClient::createFrame( 1158 PassRefPtr<Frame> WebFrameLoaderClient::createFrame(
1168 const KURL& url, 1159 const KURL& url,
1169 const String& name, 1160 const String& name,
1170 HTMLFrameOwnerElement* owner_element, 1161 HTMLFrameOwnerElement* owner_element,
1171 const String& referrer, 1162 const String& referrer,
1172 bool allows_scrolling, 1163 bool allows_scrolling,
1173 int margin_width, 1164 int margin_width,
1174 int margin_height) { 1165 int margin_height) {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1223 if (!element->renderer()) 1214 if (!element->renderer())
1224 return NULL; 1215 return NULL;
1225 1216
1226 return container; 1217 return container;
1227 } 1218 }
1228 1219
1229 // This method gets called when a plugin is put in place of html content 1220 // This method gets called when a plugin is put in place of html content
1230 // (e.g., acrobat reader). 1221 // (e.g., acrobat reader).
1231 void WebFrameLoaderClient::redirectDataToPlugin(Widget* pluginWidget) { 1222 void WebFrameLoaderClient::redirectDataToPlugin(Widget* pluginWidget) {
1232 plugin_widget_ = static_cast<WebPluginContainerImpl*>(pluginWidget); 1223 plugin_widget_ = static_cast<WebPluginContainerImpl*>(pluginWidget);
1233 DCHECK(plugin_widget_.get()); 1224 ASSERT(plugin_widget_.get());
1234 } 1225 }
1235 1226
1236 PassRefPtr<Widget> WebFrameLoaderClient::createJavaAppletWidget( 1227 PassRefPtr<Widget> WebFrameLoaderClient::createJavaAppletWidget(
1237 const IntSize& size, 1228 const IntSize& size,
1238 HTMLAppletElement* element, 1229 HTMLAppletElement* element,
1239 const KURL& /* base_url */, 1230 const KURL& /* base_url */,
1240 const Vector<String>& param_names, 1231 const Vector<String>& param_names,
1241 const Vector<String>& param_values) { 1232 const Vector<String>& param_values) {
1242 return createPlugin(size, element, KURL(), param_names, param_values, 1233 return createPlugin(size, element, KURL(), param_names, param_values,
1243 "application/x-java-applet", false); 1234 "application/x-java-applet", false);
(...skipping 26 matching lines...) Expand all
1270 return ObjectContentNetscapePlugin; 1261 return ObjectContentNetscapePlugin;
1271 1262
1272 if (MIMETypeRegistry::isSupportedNonImageMIMEType(mime_type)) 1263 if (MIMETypeRegistry::isSupportedNonImageMIMEType(mime_type))
1273 return ObjectContentFrame; 1264 return ObjectContentFrame;
1274 1265
1275 return ObjectContentNone; 1266 return ObjectContentNone;
1276 } 1267 }
1277 1268
1278 String WebFrameLoaderClient::overrideMediaType() const { 1269 String WebFrameLoaderClient::overrideMediaType() const {
1279 // FIXME 1270 // FIXME
1280 String rv; 1271 return String();
1281 return rv;
1282 } 1272 }
1283 1273
1284 bool WebFrameLoaderClient::ActionSpecifiesNavigationPolicy( 1274 bool WebFrameLoaderClient::ActionSpecifiesNavigationPolicy(
1285 const WebCore::NavigationAction& action, 1275 const WebCore::NavigationAction& action,
1286 WebNavigationPolicy* policy) { 1276 WebNavigationPolicy* policy) {
1287 if ((action.type() != NavigationTypeLinkClicked) || 1277 if ((action.type() != NavigationTypeLinkClicked) ||
1288 !action.event()->isMouseEvent()) 1278 !action.event()->isMouseEvent())
1289 return false; 1279 return false;
1290 1280
1291 const MouseEvent* event = static_cast<const MouseEvent*>(action.event()); 1281 const MouseEvent* event = static_cast<const MouseEvent*>(action.event());
1292 return WebViewImpl::NavigationPolicyFromMouseEvent(event->button(), 1282 return WebViewImpl::NavigationPolicyFromMouseEvent(event->button(),
1293 event->ctrlKey(), event->shiftKey(), event->altKey(), event->metaKey(), 1283 event->ctrlKey(), event->shiftKey(), event->altKey(), event->metaKey(),
1294 policy); 1284 policy);
1295 } 1285 }
1296 1286
1297 void WebFrameLoaderClient::HandleBackForwardNavigation(const GURL& url) { 1287 void WebFrameLoaderClient::HandleBackForwardNavigation(const KURL& url) {
1298 DCHECK(url.SchemeIs(webkit_glue::kBackForwardNavigationScheme)); 1288 ASSERT(url.protocolIs(webkit_glue::kBackForwardNavigationScheme));
1299 1289
1300 std::string offset_str = url.ExtractFileName(); 1290 bool ok;
1301 int offset; 1291 int offset = url.lastPathComponent().toIntStrict(&ok);
1302 if (!StringToInt(offset_str, &offset)) 1292 if (!ok)
1303 return; 1293 return;
1304 1294
1305 WebViewImpl* webview = webframe_->GetWebViewImpl(); 1295 WebViewImpl* webview = webframe_->GetWebViewImpl();
1306 if (webview->client()) 1296 if (webview->client())
1307 webview->client()->navigateBackForwardSoon(offset); 1297 webview->client()->navigateBackForwardSoon(offset);
1308 } 1298 }
1309 1299
1310 PassOwnPtr<WebPluginLoadObserver> WebFrameLoaderClient::GetPluginLoadObserver() { 1300 PassOwnPtr<WebPluginLoadObserver> WebFrameLoaderClient::GetPluginLoadObserver() {
1311 WebDataSourceImpl* ds = WebDataSourceImpl::fromDocumentLoader( 1301 WebDataSourceImpl* ds = WebDataSourceImpl::fromDocumentLoader(
1312 webframe_->frame()->loader()->activeDocumentLoader()); 1302 webframe_->frame()->loader()->activeDocumentLoader());
1313 return ds->releasePluginLoadObserver(); 1303 return ds->releasePluginLoadObserver();
1314 } 1304 }
OLDNEW
« no previous file with comments | « webkit/glue/webframeloaderclient_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698