| 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 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 414 | 414 |
| 415 // Navigate to a URL on the same site. | 415 // Navigate to a URL on the same site. |
| 416 process()->sink().ClearMessages(); | 416 process()->sink().ClearMessages(); |
| 417 RequestNavigation(node, kUrl1); | 417 RequestNavigation(node, kUrl1); |
| 418 main_test_rfh()->SendBeforeUnloadACK(true); | 418 main_test_rfh()->SendBeforeUnloadACK(true); |
| 419 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); | 419 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); |
| 420 ASSERT_TRUE(main_request); | 420 ASSERT_TRUE(main_request); |
| 421 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 421 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 422 | 422 |
| 423 // It then redirects to another site. | 423 // It then redirects to another site. |
| 424 net::RedirectInfo redirect_info; | 424 GetLoaderForNavigationRequest(main_request)->SimulateServerRedirect(kUrl2); |
| 425 redirect_info.status_code = 302; | |
| 426 redirect_info.new_method = "GET"; | |
| 427 redirect_info.new_url = kUrl2; | |
| 428 redirect_info.new_first_party_for_cookies = kUrl2; | |
| 429 scoped_refptr<ResourceResponse> response(new ResourceResponse); | |
| 430 GetLoaderForNavigationRequest(main_request)->CallOnRequestRedirected( | |
| 431 redirect_info, response); | |
| 432 | 425 |
| 433 // The redirect should have been followed. | 426 // The redirect should have been followed. |
| 434 EXPECT_EQ(1, GetLoaderForNavigationRequest(main_request)->redirect_count()); | 427 EXPECT_EQ(1, GetLoaderForNavigationRequest(main_request)->redirect_count()); |
| 435 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 428 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 436 | 429 |
| 437 // Have the RenderFrameHost commit the navigation. | 430 // Have the RenderFrameHost commit the navigation. |
| 438 response = new ResourceResponse; | 431 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 439 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( | 432 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( |
| 440 response, MakeEmptyStream()); | 433 response, MakeEmptyStream()); |
| 441 TestRenderFrameHost* final_speculative_rfh = | 434 TestRenderFrameHost* final_speculative_rfh = |
| 442 GetSpeculativeRenderFrameHost(node); | 435 GetSpeculativeRenderFrameHost(node); |
| 443 EXPECT_TRUE(final_speculative_rfh); | 436 EXPECT_TRUE(final_speculative_rfh); |
| 444 EXPECT_TRUE(DidRenderFrameHostRequestCommit(final_speculative_rfh)); | 437 EXPECT_TRUE(DidRenderFrameHostRequestCommit(final_speculative_rfh)); |
| 445 | 438 |
| 446 // Commit the navigation. | 439 // Commit the navigation. |
| 447 final_speculative_rfh->SendNavigate(0, kUrl2); | 440 final_speculative_rfh->SendNavigate(0, kUrl2); |
| 448 RenderFrameHostImpl* final_rfh = main_test_rfh(); | 441 RenderFrameHostImpl* final_rfh = main_test_rfh(); |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 743 | 736 |
| 744 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 737 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 745 RequestNavigationWithParameters(node, kUrl, Referrer(), | 738 RequestNavigationWithParameters(node, kUrl, Referrer(), |
| 746 ui::PAGE_TRANSITION_LINK, | 739 ui::PAGE_TRANSITION_LINK, |
| 747 NavigationController::RELOAD); | 740 NavigationController::RELOAD); |
| 748 // A NavigationRequest should have been generated. | 741 // A NavigationRequest should have been generated. |
| 749 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); | 742 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); |
| 750 ASSERT_TRUE(main_request != NULL); | 743 ASSERT_TRUE(main_request != NULL); |
| 751 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD, | 744 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD, |
| 752 main_request->common_params().navigation_type); | 745 main_request->common_params().navigation_type); |
| 753 main_test_rfh()->PrepareForCommit(kUrl); | 746 main_test_rfh()->PrepareForCommit(); |
| 754 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 747 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 755 | 748 |
| 756 main_test_rfh()->SendNavigate(0, kUrl); | 749 main_test_rfh()->SendNavigate(0, kUrl); |
| 757 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 750 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 758 | 751 |
| 759 // Now do a shift+reload. | 752 // Now do a shift+reload. |
| 760 RequestNavigationWithParameters(node, kUrl, Referrer(), | 753 RequestNavigationWithParameters(node, kUrl, Referrer(), |
| 761 ui::PAGE_TRANSITION_LINK, | 754 ui::PAGE_TRANSITION_LINK, |
| 762 NavigationController::RELOAD_IGNORING_CACHE); | 755 NavigationController::RELOAD_IGNORING_CACHE); |
| 763 // A NavigationRequest should have been generated. | 756 // A NavigationRequest should have been generated. |
| 764 main_request = GetNavigationRequestForFrameTreeNode(node); | 757 main_request = GetNavigationRequestForFrameTreeNode(node); |
| 765 ASSERT_TRUE(main_request != NULL); | 758 ASSERT_TRUE(main_request != NULL); |
| 766 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE, | 759 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE, |
| 767 main_request->common_params().navigation_type); | 760 main_request->common_params().navigation_type); |
| 768 main_test_rfh()->PrepareForCommit(kUrl); | 761 main_test_rfh()->PrepareForCommit(); |
| 769 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 762 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 770 } | 763 } |
| 771 | 764 |
| 772 // PlzNavigate: Confirm that a speculative RenderFrameHost is used when | 765 // PlzNavigate: Confirm that a speculative RenderFrameHost is used when |
| 773 // navigating from one site to another. | 766 // navigating from one site to another. |
| 774 TEST_F(NavigatorTestWithBrowserSideNavigation, | 767 TEST_F(NavigatorTestWithBrowserSideNavigation, |
| 775 SpeculativeRendererWorksBaseCase) { | 768 SpeculativeRendererWorksBaseCase) { |
| 776 // Navigate to an initial site. | 769 // Navigate to an initial site. |
| 777 const GURL kUrlInit("http://wikipedia.org/"); | 770 const GURL kUrlInit("http://wikipedia.org/"); |
| 778 contents()->NavigateAndCommit(kUrlInit); | 771 contents()->NavigateAndCommit(kUrlInit); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 836 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); | 829 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); |
| 837 ASSERT_TRUE(speculative_rfh); | 830 ASSERT_TRUE(speculative_rfh); |
| 838 EXPECT_NE(speculative_rfh, main_test_rfh()); | 831 EXPECT_NE(speculative_rfh, main_test_rfh()); |
| 839 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), | 832 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), |
| 840 speculative_rfh->GetSiteInstance()->GetSiteURL()); | 833 speculative_rfh->GetSiteInstance()->GetSiteURL()); |
| 841 | 834 |
| 842 // It then redirects to yet another site. | 835 // It then redirects to yet another site. |
| 843 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); | 836 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); |
| 844 ASSERT_TRUE(main_request); | 837 ASSERT_TRUE(main_request); |
| 845 const GURL kUrlRedirect("https://www.google.com/"); | 838 const GURL kUrlRedirect("https://www.google.com/"); |
| 846 net::RedirectInfo redirect_info; | |
| 847 redirect_info.status_code = 302; | |
| 848 redirect_info.new_method = "GET"; | |
| 849 redirect_info.new_url = kUrlRedirect; | |
| 850 redirect_info.new_first_party_for_cookies = kUrlRedirect; | |
| 851 scoped_refptr<ResourceResponse> response(new ResourceResponse); | |
| 852 GetLoaderForNavigationRequest(main_request) | 839 GetLoaderForNavigationRequest(main_request) |
| 853 ->CallOnRequestRedirected(redirect_info, response); | 840 ->SimulateServerRedirect(kUrlRedirect); |
| 854 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); | 841 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); |
| 855 speculative_rfh = GetSpeculativeRenderFrameHost(node); | 842 speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 856 ASSERT_TRUE(speculative_rfh); | 843 ASSERT_TRUE(speculative_rfh); |
| 857 | 844 |
| 858 // For now, ensure that the speculative RenderFrameHost does not change after | 845 // For now, ensure that the speculative RenderFrameHost does not change after |
| 859 // the redirect. | 846 // the redirect. |
| 860 // TODO(carlosk): once the speculative RenderFrameHost updates with redirects | 847 // TODO(carlosk): once the speculative RenderFrameHost updates with redirects |
| 861 // this next check will be changed to verify that it actually happens. | 848 // this next check will be changed to verify that it actually happens. |
| 862 EXPECT_EQ(site_instance_id, speculative_rfh->GetSiteInstance()->GetId()); | 849 EXPECT_EQ(site_instance_id, speculative_rfh->GetSiteInstance()->GetId()); |
| 863 | 850 |
| 864 // Commit the navigation with Navigator by simulating the call to | 851 // Commit the navigation with Navigator by simulating the call to |
| 865 // OnResponseStarted. | 852 // OnResponseStarted. |
| 866 response = new ResourceResponse; | 853 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 867 GetLoaderForNavigationRequest(main_request) | 854 GetLoaderForNavigationRequest(main_request) |
| 868 ->CallOnResponseStarted(response, MakeEmptyStream()); | 855 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 869 speculative_rfh = GetSpeculativeRenderFrameHost(node); | 856 speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 870 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 857 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 871 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); | 858 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); |
| 872 | 859 |
| 873 // Once commit happens the speculative RenderFrameHost is updated to match the | 860 // Once commit happens the speculative RenderFrameHost is updated to match the |
| 874 // known final SiteInstance. | 861 // known final SiteInstance. |
| 875 ASSERT_TRUE(speculative_rfh); | 862 ASSERT_TRUE(speculative_rfh); |
| 876 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrlRedirect), | 863 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrlRedirect), |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 935 EXPECT_TRUE(DidRenderFrameHostRequestCommit(rfh1)); | 922 EXPECT_TRUE(DidRenderFrameHostRequestCommit(rfh1)); |
| 936 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 923 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 937 | 924 |
| 938 rfh1->SendNavigate(1, kUrl1); | 925 rfh1->SendNavigate(1, kUrl1); |
| 939 EXPECT_EQ(rfh1, main_test_rfh()); | 926 EXPECT_EQ(rfh1, main_test_rfh()); |
| 940 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state()); | 927 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state()); |
| 941 EXPECT_FALSE(rfhm->IsOnSwappedOutList(rfh1)); | 928 EXPECT_FALSE(rfhm->IsOnSwappedOutList(rfh1)); |
| 942 } | 929 } |
| 943 | 930 |
| 944 } // namespace content | 931 } // namespace content |
| OLD | NEW |