Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/macros.h" | 6 #include "base/macros.h" |
| 7 #include "base/time/time.h" | 7 #include "base/time/time.h" |
| 8 #include "content/browser/frame_host/navigation_controller_impl.h" | 8 #include "content/browser/frame_host/navigation_controller_impl.h" |
| 9 #include "content/browser/frame_host/navigation_entry_impl.h" | 9 #include "content/browser/frame_host/navigation_entry_impl.h" |
| 10 #include "content/browser/frame_host/navigation_request.h" | 10 #include "content/browser/frame_host/navigation_request.h" |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 60 NavigationController::ReloadType reload_type) { | 60 NavigationController::ReloadType reload_type) { |
| 61 scoped_ptr<NavigationEntryImpl> entry( | 61 scoped_ptr<NavigationEntryImpl> entry( |
| 62 NavigationEntryImpl::FromNavigationEntry( | 62 NavigationEntryImpl::FromNavigationEntry( |
| 63 NavigationController::CreateNavigationEntry( | 63 NavigationController::CreateNavigationEntry( |
| 64 url, | 64 url, |
| 65 referrer, | 65 referrer, |
| 66 transition_type, | 66 transition_type, |
| 67 false, | 67 false, |
| 68 std::string(), | 68 std::string(), |
| 69 controller().GetBrowserContext()))); | 69 controller().GetBrowserContext()))); |
| 70 static_cast<NavigatorImpl*>(node->navigator())->RequestNavigation( | 70 static_cast<NavigatorImpl*>(node->navigator())->RequestNavigation( |
|
clamy
2015/03/16 10:39:55
As explained by mail this is likely to cause a few
| |
| 71 node, *entry, reload_type, base::TimeTicks::Now()); | 71 node, *entry, reload_type, base::TimeTicks::Now()); |
| 72 } | 72 } |
| 73 | 73 |
| 74 NavigationRequest* GetNavigationRequestForFrameTreeNode( | 74 NavigationRequest* GetNavigationRequestForFrameTreeNode( |
| 75 FrameTreeNode* frame_tree_node) { | 75 FrameTreeNode* frame_tree_node) { |
| 76 return static_cast<NavigatorImpl*>(frame_tree_node->navigator()) | 76 return static_cast<NavigatorImpl*>(frame_tree_node->navigator()) |
| 77 ->GetNavigationRequestForNodeForTesting(frame_tree_node); | 77 ->GetNavigationRequestForNodeForTesting(frame_tree_node); |
| 78 } | 78 } |
| 79 | 79 |
| 80 TestRenderFrameHost* GetSpeculativeRenderFrameHost(FrameTreeNode* node) { | 80 TestRenderFrameHost* GetSpeculativeRenderFrameHost(FrameTreeNode* node) { |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 124 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 124 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 125 | 125 |
| 126 // Have the current RenderFrameHost commit the navigation. | 126 // Have the current RenderFrameHost commit the navigation. |
| 127 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 127 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 128 GetLoaderForNavigationRequest(request) | 128 GetLoaderForNavigationRequest(request) |
| 129 ->CallOnResponseStarted(response, MakeEmptyStream()); | 129 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 130 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 130 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 131 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); | 131 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); |
| 132 | 132 |
| 133 // Commit the navigation. | 133 // Commit the navigation. |
| 134 main_test_rfh()->SendNavigate(0, kUrl); | 134 main_test_rfh()->SendNavigate(0, 0, true, kUrl); |
| 135 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); | 135 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); |
| 136 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), | 136 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), |
| 137 main_test_rfh()->GetSiteInstance()->GetSiteURL()); | 137 main_test_rfh()->GetSiteInstance()->GetSiteURL()); |
| 138 EXPECT_EQ(kUrl, contents()->GetLastCommittedURL()); | 138 EXPECT_EQ(kUrl, contents()->GetLastCommittedURL()); |
| 139 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node)); | 139 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node)); |
| 140 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 140 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 141 | 141 |
| 142 // The main RenderFrameHost should not have been changed, and the renderer | 142 // The main RenderFrameHost should not have been changed, and the renderer |
| 143 // should have been initialized. | 143 // should have been initialized. |
| 144 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); | 144 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 177 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 177 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 178 | 178 |
| 179 // Have the current RenderFrameHost commit the navigation. | 179 // Have the current RenderFrameHost commit the navigation. |
| 180 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 180 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 181 GetLoaderForNavigationRequest(request) | 181 GetLoaderForNavigationRequest(request) |
| 182 ->CallOnResponseStarted(response, MakeEmptyStream()); | 182 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 183 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 183 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 184 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); | 184 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); |
| 185 | 185 |
| 186 // Commit the navigation. | 186 // Commit the navigation. |
| 187 main_test_rfh()->SendNavigate(0, kUrl2); | 187 main_test_rfh()->SendNavigate(0, 0, true, kUrl2); |
| 188 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); | 188 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); |
| 189 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl2), | 189 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl2), |
| 190 main_test_rfh()->GetSiteInstance()->GetSiteURL()); | 190 main_test_rfh()->GetSiteInstance()->GetSiteURL()); |
| 191 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 191 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
| 192 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node)); | 192 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node)); |
| 193 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 193 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 194 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 194 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 195 } | 195 } |
| 196 | 196 |
| 197 // PlzNavigate: Test that a beforeUnload denial cancels the navigation. | 197 // PlzNavigate: Test that a beforeUnload denial cancels the navigation. |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 385 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 385 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 386 | 386 |
| 387 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 387 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 388 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( | 388 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( |
| 389 response, MakeEmptyStream()); | 389 response, MakeEmptyStream()); |
| 390 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 390 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 391 ASSERT_TRUE(speculative_rfh); | 391 ASSERT_TRUE(speculative_rfh); |
| 392 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 392 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 393 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 393 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 394 | 394 |
| 395 speculative_rfh->SendNavigate(0, kUrl2); | 395 speculative_rfh->SendNavigate(0, 0, true, kUrl2); |
| 396 | 396 |
| 397 RenderFrameHostImpl* final_rfh = main_test_rfh(); | 397 RenderFrameHostImpl* final_rfh = main_test_rfh(); |
| 398 EXPECT_EQ(speculative_rfh, final_rfh); | 398 EXPECT_EQ(speculative_rfh, final_rfh); |
| 399 EXPECT_NE(initial_rfh, final_rfh); | 399 EXPECT_NE(initial_rfh, final_rfh); |
| 400 EXPECT_TRUE(final_rfh->IsRenderFrameLive()); | 400 EXPECT_TRUE(final_rfh->IsRenderFrameLive()); |
| 401 EXPECT_TRUE(final_rfh->render_view_host()->IsRenderViewLive()); | 401 EXPECT_TRUE(final_rfh->render_view_host()->IsRenderViewLive()); |
| 402 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 402 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 403 } | 403 } |
| 404 | 404 |
| 405 // PlzNavigate: Test that redirects are followed and the speculative | 405 // PlzNavigate: Test that redirects are followed and the speculative |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 430 // Have the RenderFrameHost commit the navigation. | 430 // Have the RenderFrameHost commit the navigation. |
| 431 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 431 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 432 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( | 432 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( |
| 433 response, MakeEmptyStream()); | 433 response, MakeEmptyStream()); |
| 434 TestRenderFrameHost* final_speculative_rfh = | 434 TestRenderFrameHost* final_speculative_rfh = |
| 435 GetSpeculativeRenderFrameHost(node); | 435 GetSpeculativeRenderFrameHost(node); |
| 436 EXPECT_TRUE(final_speculative_rfh); | 436 EXPECT_TRUE(final_speculative_rfh); |
| 437 EXPECT_TRUE(DidRenderFrameHostRequestCommit(final_speculative_rfh)); | 437 EXPECT_TRUE(DidRenderFrameHostRequestCommit(final_speculative_rfh)); |
| 438 | 438 |
| 439 // Commit the navigation. | 439 // Commit the navigation. |
| 440 final_speculative_rfh->SendNavigate(0, kUrl2); | 440 final_speculative_rfh->SendNavigate(0, 0, true, kUrl2); |
| 441 RenderFrameHostImpl* final_rfh = main_test_rfh(); | 441 RenderFrameHostImpl* final_rfh = main_test_rfh(); |
| 442 ASSERT_TRUE(final_rfh); | 442 ASSERT_TRUE(final_rfh); |
| 443 EXPECT_NE(rfh, final_rfh); | 443 EXPECT_NE(rfh, final_rfh); |
| 444 EXPECT_EQ(final_speculative_rfh, final_rfh); | 444 EXPECT_EQ(final_speculative_rfh, final_rfh); |
| 445 EXPECT_TRUE(final_rfh->IsRenderFrameLive()); | 445 EXPECT_TRUE(final_rfh->IsRenderFrameLive()); |
| 446 EXPECT_TRUE(final_rfh->render_view_host()->IsRenderViewLive()); | 446 EXPECT_TRUE(final_rfh->render_view_host()->IsRenderViewLive()); |
| 447 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 447 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 448 } | 448 } |
| 449 | 449 |
| 450 // PlzNavigate: Test that a navigation is canceled if another browser-initiated | 450 // PlzNavigate: Test that a navigation is canceled if another browser-initiated |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 499 EXPECT_NE(site_instance_id_1, site_instance_id_2); | 499 EXPECT_NE(site_instance_id_1, site_instance_id_2); |
| 500 | 500 |
| 501 // Have the RenderFrameHost commit the navigation. | 501 // Have the RenderFrameHost commit the navigation. |
| 502 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 502 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 503 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( | 503 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( |
| 504 response, MakeEmptyStream()); | 504 response, MakeEmptyStream()); |
| 505 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 505 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 506 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 506 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 507 | 507 |
| 508 // Commit the navigation. | 508 // Commit the navigation. |
| 509 speculative_rfh->SendNavigate(0, kUrl2); | 509 speculative_rfh->SendNavigate(0, 0, true, kUrl2); |
| 510 | 510 |
| 511 // Confirm that the commit corresponds to the new request. | 511 // Confirm that the commit corresponds to the new request. |
| 512 ASSERT_TRUE(main_test_rfh()); | 512 ASSERT_TRUE(main_test_rfh()); |
| 513 EXPECT_EQ(kUrl2_site, main_test_rfh()->GetSiteInstance()->GetSiteURL()); | 513 EXPECT_EQ(kUrl2_site, main_test_rfh()->GetSiteInstance()->GetSiteURL()); |
| 514 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 514 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
| 515 | 515 |
| 516 // Confirm that the committed RenderFrameHost is the latest speculative one. | 516 // Confirm that the committed RenderFrameHost is the latest speculative one. |
| 517 EXPECT_EQ(site_instance_id_2, main_test_rfh()->GetSiteInstance()->GetId()); | 517 EXPECT_EQ(site_instance_id_2, main_test_rfh()->GetSiteInstance()->GetId()); |
| 518 } | 518 } |
| 519 | 519 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 566 EXPECT_NE(site_instance_id_1, site_instance_id_2); | 566 EXPECT_NE(site_instance_id_1, site_instance_id_2); |
| 567 | 567 |
| 568 // Have the RenderFrameHost commit the navigation. | 568 // Have the RenderFrameHost commit the navigation. |
| 569 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 569 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 570 GetLoaderForNavigationRequest(request2) | 570 GetLoaderForNavigationRequest(request2) |
| 571 ->CallOnResponseStarted(response, MakeEmptyStream()); | 571 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 572 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 572 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 573 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 573 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 574 | 574 |
| 575 // Commit the navigation. | 575 // Commit the navigation. |
| 576 speculative_rfh->SendNavigate(0, kUrl2); | 576 speculative_rfh->SendNavigate(0, 0, true, kUrl2); |
| 577 | 577 |
| 578 // Confirm that the commit corresponds to the new request. | 578 // Confirm that the commit corresponds to the new request. |
| 579 ASSERT_TRUE(main_test_rfh()); | 579 ASSERT_TRUE(main_test_rfh()); |
| 580 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 580 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
| 581 | 581 |
| 582 // Confirm that the committed RenderFrameHost is the latest speculative one. | 582 // Confirm that the committed RenderFrameHost is the latest speculative one. |
| 583 EXPECT_EQ(site_instance_id_2, main_test_rfh()->GetSiteInstance()->GetId()); | 583 EXPECT_EQ(site_instance_id_2, main_test_rfh()->GetSiteInstance()->GetId()); |
| 584 } | 584 } |
| 585 | 585 |
| 586 // PlzNavigate: Test that a renderer-initiated user-initiated navigation is NOT | 586 // PlzNavigate: Test that a renderer-initiated user-initiated navigation is NOT |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 619 ASSERT_TRUE(speculative_rfh); | 619 ASSERT_TRUE(speculative_rfh); |
| 620 | 620 |
| 621 // Have the RenderFrameHost commit the navigation. | 621 // Have the RenderFrameHost commit the navigation. |
| 622 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 622 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 623 GetLoaderForNavigationRequest(request2) | 623 GetLoaderForNavigationRequest(request2) |
| 624 ->CallOnResponseStarted(response, MakeEmptyStream()); | 624 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 625 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 625 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 626 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 626 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 627 | 627 |
| 628 // Commit the navigation. | 628 // Commit the navigation. |
| 629 speculative_rfh->SendNavigate(0, kUrl1); | 629 speculative_rfh->SendNavigate(0, 0, true, kUrl1); |
| 630 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); | 630 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); |
| 631 } | 631 } |
| 632 | 632 |
| 633 // PlzNavigate: Test that a browser-initiated navigation is NOT canceled if a | 633 // PlzNavigate: Test that a browser-initiated navigation is NOT canceled if a |
| 634 // renderer-initiated non-user-initiated request is issued in the meantime. | 634 // renderer-initiated non-user-initiated request is issued in the meantime. |
| 635 TEST_F(NavigatorTestWithBrowserSideNavigation, | 635 TEST_F(NavigatorTestWithBrowserSideNavigation, |
| 636 RendererNonUserInitiatedNavigationDoesntCancelBrowserInitiated) { | 636 RendererNonUserInitiatedNavigationDoesntCancelBrowserInitiated) { |
| 637 const GURL kUrl0("http://www.wikipedia.org/"); | 637 const GURL kUrl0("http://www.wikipedia.org/"); |
| 638 const GURL kUrl1("http://www.chromium.org/"); | 638 const GURL kUrl1("http://www.chromium.org/"); |
| 639 const GURL kUrl2("http://www.google.com/"); | 639 const GURL kUrl2("http://www.google.com/"); |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 667 ASSERT_TRUE(speculative_rfh); | 667 ASSERT_TRUE(speculative_rfh); |
| 668 | 668 |
| 669 // Have the RenderFrameHost commit the navigation. | 669 // Have the RenderFrameHost commit the navigation. |
| 670 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 670 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 671 GetLoaderForNavigationRequest(request2) | 671 GetLoaderForNavigationRequest(request2) |
| 672 ->CallOnResponseStarted(response, MakeEmptyStream()); | 672 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 673 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 673 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 674 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 674 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 675 | 675 |
| 676 // Commit the navigation. | 676 // Commit the navigation. |
| 677 speculative_rfh->SendNavigate(0, kUrl1); | 677 speculative_rfh->SendNavigate(0, 0, true, kUrl1); |
| 678 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); | 678 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); |
| 679 } | 679 } |
| 680 | 680 |
| 681 // PlzNavigate: Test that a renderer-initiated non-user-initiated navigation is | 681 // PlzNavigate: Test that a renderer-initiated non-user-initiated navigation is |
| 682 // canceled if a another similar request is issued in the meantime. | 682 // canceled if a another similar request is issued in the meantime. |
| 683 TEST_F(NavigatorTestWithBrowserSideNavigation, | 683 TEST_F(NavigatorTestWithBrowserSideNavigation, |
| 684 RendererNonUserInitiatedNavigationCancelSimilarNavigation) { | 684 RendererNonUserInitiatedNavigationCancelSimilarNavigation) { |
| 685 const GURL kUrl0("http://www.wikipedia.org/"); | 685 const GURL kUrl0("http://www.wikipedia.org/"); |
| 686 const GURL kUrl1("http://www.chromium.org/"); | 686 const GURL kUrl1("http://www.chromium.org/"); |
| 687 const GURL kUrl2("http://www.google.com/"); | 687 const GURL kUrl2("http://www.google.com/"); |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 716 EXPECT_FALSE(loader1); | 716 EXPECT_FALSE(loader1); |
| 717 | 717 |
| 718 // Have the RenderFrameHost commit the navigation. | 718 // Have the RenderFrameHost commit the navigation. |
| 719 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 719 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 720 GetLoaderForNavigationRequest(request2) | 720 GetLoaderForNavigationRequest(request2) |
| 721 ->CallOnResponseStarted(response, MakeEmptyStream()); | 721 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 722 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 722 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 723 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 723 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 724 | 724 |
| 725 // Commit the navigation. | 725 // Commit the navigation. |
| 726 speculative_rfh->SendNavigate(0, kUrl2); | 726 speculative_rfh->SendNavigate(0, 0, true, kUrl2); |
| 727 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 727 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
| 728 } | 728 } |
| 729 | 729 |
| 730 // PlzNavigate: Test that a reload navigation is properly signaled to the | 730 // PlzNavigate: Test that a reload navigation is properly signaled to the |
| 731 // RenderFrame when the navigation can commit. A speculative RenderFrameHost | 731 // RenderFrame when the navigation can commit. A speculative RenderFrameHost |
| 732 // should not be created at any step. | 732 // should not be created at any step. |
| 733 TEST_F(NavigatorTestWithBrowserSideNavigation, Reload) { | 733 TEST_F(NavigatorTestWithBrowserSideNavigation, Reload) { |
| 734 const GURL kUrl("http://www.google.com/"); | 734 const GURL kUrl("http://www.google.com/"); |
| 735 contents()->NavigateAndCommit(kUrl); | 735 contents()->NavigateAndCommit(kUrl); |
| 736 | 736 |
| 737 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 737 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 738 RequestNavigationWithParameters(node, kUrl, Referrer(), | 738 RequestNavigationWithParameters(node, kUrl, Referrer(), |
| 739 ui::PAGE_TRANSITION_LINK, | 739 ui::PAGE_TRANSITION_LINK, |
| 740 NavigationController::RELOAD); | 740 NavigationController::RELOAD); |
| 741 // A NavigationRequest should have been generated. | 741 // A NavigationRequest should have been generated. |
| 742 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); | 742 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); |
| 743 ASSERT_TRUE(main_request != NULL); | 743 ASSERT_TRUE(main_request != NULL); |
| 744 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD, | 744 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD, |
| 745 main_request->common_params().navigation_type); | 745 main_request->common_params().navigation_type); |
| 746 main_test_rfh()->PrepareForCommit(); | 746 main_test_rfh()->PrepareForCommit(); |
| 747 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 747 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 748 | 748 |
| 749 main_test_rfh()->SendNavigate(0, kUrl); | 749 main_test_rfh()->SendNavigate(0, 0, true, kUrl); |
| 750 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 750 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 751 | 751 |
| 752 // Now do a shift+reload. | 752 // Now do a shift+reload. |
| 753 RequestNavigationWithParameters(node, kUrl, Referrer(), | 753 RequestNavigationWithParameters(node, kUrl, Referrer(), |
| 754 ui::PAGE_TRANSITION_LINK, | 754 ui::PAGE_TRANSITION_LINK, |
| 755 NavigationController::RELOAD_IGNORING_CACHE); | 755 NavigationController::RELOAD_IGNORING_CACHE); |
| 756 // A NavigationRequest should have been generated. | 756 // A NavigationRequest should have been generated. |
| 757 main_request = GetNavigationRequestForFrameTreeNode(node); | 757 main_request = GetNavigationRequestForFrameTreeNode(node); |
| 758 ASSERT_TRUE(main_request != NULL); | 758 ASSERT_TRUE(main_request != NULL); |
| 759 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE, | 759 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE, |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 792 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 792 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 793 GetLoaderForNavigationRequest(GetNavigationRequestForFrameTreeNode(node)) | 793 GetLoaderForNavigationRequest(GetNavigationRequestForFrameTreeNode(node)) |
| 794 ->CallOnResponseStarted(response, MakeEmptyStream()); | 794 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 795 speculative_rfh = GetSpeculativeRenderFrameHost(node); | 795 speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 796 ASSERT_TRUE(speculative_rfh); | 796 ASSERT_TRUE(speculative_rfh); |
| 797 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 797 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 798 EXPECT_EQ(site_instance_id, speculative_rfh->GetSiteInstance()->GetId()); | 798 EXPECT_EQ(site_instance_id, speculative_rfh->GetSiteInstance()->GetId()); |
| 799 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 799 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 800 | 800 |
| 801 // Invoke OnDidCommitProvisionalLoad. | 801 // Invoke OnDidCommitProvisionalLoad. |
| 802 speculative_rfh->SendNavigate(0, kUrl); | 802 speculative_rfh->SendNavigate(0, 0, true, kUrl); |
| 803 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); | 803 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); |
| 804 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 804 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 805 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 805 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 806 } | 806 } |
| 807 | 807 |
| 808 // PlzNavigate: Confirm that a speculative RenderFrameHost is thrown away when | 808 // PlzNavigate: Confirm that a speculative RenderFrameHost is thrown away when |
| 809 // the final URL's site differs from the initial one due to redirects. | 809 // the final URL's site differs from the initial one due to redirects. |
| 810 TEST_F(NavigatorTestWithBrowserSideNavigation, | 810 TEST_F(NavigatorTestWithBrowserSideNavigation, |
| 811 SpeculativeRendererDiscardedAfterRedirectToAnotherSite) { | 811 SpeculativeRendererDiscardedAfterRedirectToAnotherSite) { |
| 812 // Navigate to an initial site. | 812 // Navigate to an initial site. |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 860 // Once commit happens the speculative RenderFrameHost is updated to match the | 860 // Once commit happens the speculative RenderFrameHost is updated to match the |
| 861 // known final SiteInstance. | 861 // known final SiteInstance. |
| 862 ASSERT_TRUE(speculative_rfh); | 862 ASSERT_TRUE(speculative_rfh); |
| 863 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrlRedirect), | 863 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrlRedirect), |
| 864 speculative_rfh->GetSiteInstance()->GetSiteURL()); | 864 speculative_rfh->GetSiteInstance()->GetSiteURL()); |
| 865 int32 redirect_site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); | 865 int32 redirect_site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); |
| 866 EXPECT_NE(init_site_instance_id, redirect_site_instance_id); | 866 EXPECT_NE(init_site_instance_id, redirect_site_instance_id); |
| 867 EXPECT_NE(site_instance_id, redirect_site_instance_id); | 867 EXPECT_NE(site_instance_id, redirect_site_instance_id); |
| 868 | 868 |
| 869 // Invoke OnDidCommitProvisionalLoad. | 869 // Invoke OnDidCommitProvisionalLoad. |
| 870 speculative_rfh->SendNavigate(0, kUrlRedirect); | 870 speculative_rfh->SendNavigate(0, 0, false, kUrlRedirect); |
| 871 | 871 |
| 872 // Check that the speculative RenderFrameHost was swapped in. | 872 // Check that the speculative RenderFrameHost was swapped in. |
| 873 EXPECT_EQ(redirect_site_instance_id, | 873 EXPECT_EQ(redirect_site_instance_id, |
| 874 main_test_rfh()->GetSiteInstance()->GetId()); | 874 main_test_rfh()->GetSiteInstance()->GetId()); |
| 875 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 875 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 876 } | 876 } |
| 877 | 877 |
| 878 // PlzNavigate: Verify that a previously swapped out RenderFrameHost is | 878 // PlzNavigate: Verify that a previously swapped out RenderFrameHost is |
| 879 // correctly reused when spawning a speculative RenderFrameHost in a navigation | 879 // correctly reused when spawning a speculative RenderFrameHost in a navigation |
| 880 // using the same SiteInstance. | 880 // using the same SiteInstance. |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 915 | 915 |
| 916 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 916 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 917 GetLoaderForNavigationRequest(GetNavigationRequestForFrameTreeNode(node)) | 917 GetLoaderForNavigationRequest(GetNavigationRequestForFrameTreeNode(node)) |
| 918 ->CallOnResponseStarted(response, MakeEmptyStream()); | 918 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 919 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); | 919 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); |
| 920 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, | 920 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, |
| 921 GetSpeculativeRenderFrameHost(node)->rfh_state()); | 921 GetSpeculativeRenderFrameHost(node)->rfh_state()); |
| 922 EXPECT_TRUE(DidRenderFrameHostRequestCommit(rfh1)); | 922 EXPECT_TRUE(DidRenderFrameHostRequestCommit(rfh1)); |
| 923 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 923 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 924 | 924 |
| 925 rfh1->SendNavigate(1, kUrl1); | 925 rfh1->SendNavigate(1, 1, false, kUrl1); |
| 926 EXPECT_EQ(rfh1, main_test_rfh()); | 926 EXPECT_EQ(rfh1, main_test_rfh()); |
| 927 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state()); | 927 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state()); |
| 928 EXPECT_FALSE(rfhm->IsOnSwappedOutList(rfh1)); | 928 EXPECT_FALSE(rfhm->IsOnSwappedOutList(rfh1)); |
| 929 } | 929 } |
| 930 | 930 |
| 931 // PlzNavigate: Verify that data urls are properly handled. | 931 // PlzNavigate: Verify that data urls are properly handled. |
| 932 TEST_F(NavigatorTestWithBrowserSideNavigation, DataUrls) { | 932 TEST_F(NavigatorTestWithBrowserSideNavigation, DataUrls) { |
| 933 const GURL kUrl1("http://wikipedia.org/"); | 933 const GURL kUrl1("http://wikipedia.org/"); |
| 934 const GURL kUrl2("data:text/html,test"); | 934 const GURL kUrl2("data:text/html,test"); |
| 935 | 935 |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 946 navigation_request->state()); | 946 navigation_request->state()); |
| 947 main_test_rfh()->SendBeforeUnloadACK(true); | 947 main_test_rfh()->SendBeforeUnloadACK(true); |
| 948 | 948 |
| 949 // The request should not have been sent to the IO thread but committed | 949 // The request should not have been sent to the IO thread but committed |
| 950 // immediately. | 950 // immediately. |
| 951 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, | 951 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, |
| 952 navigation_request->state()); | 952 navigation_request->state()); |
| 953 EXPECT_FALSE(navigation_request->loader_for_testing()); | 953 EXPECT_FALSE(navigation_request->loader_for_testing()); |
| 954 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 954 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 955 ASSERT_TRUE(speculative_rfh); | 955 ASSERT_TRUE(speculative_rfh); |
| 956 speculative_rfh->SendNavigate(0, kUrl2); | 956 speculative_rfh->SendNavigate(0, 0, true, kUrl2); |
| 957 EXPECT_EQ(main_test_rfh(), speculative_rfh); | 957 EXPECT_EQ(main_test_rfh(), speculative_rfh); |
| 958 | 958 |
| 959 // Go back to the initial site. | 959 // Go back to the initial site. |
| 960 contents()->NavigateAndCommit(kUrl1); | 960 contents()->NavigateAndCommit(kUrl1); |
| 961 | 961 |
| 962 // Do a renderer-initiated navigation to a data url. The request should not be | 962 // Do a renderer-initiated navigation to a data url. The request should not be |
| 963 // sent to the IO thread, nor committed. | 963 // sent to the IO thread, nor committed. |
| 964 TestRenderFrameHost* main_rfh = main_test_rfh(); | 964 TestRenderFrameHost* main_rfh = main_test_rfh(); |
| 965 main_rfh->SendRendererInitiatedNavigationRequest(kUrl2, true); | 965 main_rfh->SendRendererInitiatedNavigationRequest(kUrl2, true); |
| 966 navigation_request = GetNavigationRequestForFrameTreeNode(node); | 966 navigation_request = GetNavigationRequestForFrameTreeNode(node); |
| 967 ASSERT_TRUE(navigation_request); | 967 ASSERT_TRUE(navigation_request); |
| 968 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, | 968 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, |
| 969 navigation_request->state()); | 969 navigation_request->state()); |
| 970 EXPECT_FALSE(navigation_request->loader_for_testing()); | 970 EXPECT_FALSE(navigation_request->loader_for_testing()); |
| 971 speculative_rfh = GetSpeculativeRenderFrameHost(node); | 971 speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 972 ASSERT_TRUE(speculative_rfh); | 972 ASSERT_TRUE(speculative_rfh); |
| 973 speculative_rfh->SendNavigate(0, kUrl2); | 973 speculative_rfh->SendNavigate(0, 0, true, kUrl2); |
| 974 EXPECT_EQ(main_test_rfh(), speculative_rfh); | 974 EXPECT_EQ(main_test_rfh(), speculative_rfh); |
| 975 } | 975 } |
| 976 | 976 |
| 977 } // namespace content | 977 } // namespace content |
| OLD | NEW |