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 |