| 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 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 | 265 |
| 266 contents()->NavigateAndCommit(kUrl1); | 266 contents()->NavigateAndCommit(kUrl1); |
| 267 | 267 |
| 268 // Start a new navigation. | 268 // Start a new navigation. |
| 269 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 269 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 270 RequestNavigation(node, kUrl2); | 270 RequestNavigation(node, kUrl2); |
| 271 NavigationRequest* request = node->navigation_request(); | 271 NavigationRequest* request = node->navigation_request(); |
| 272 ASSERT_TRUE(request); | 272 ASSERT_TRUE(request); |
| 273 EXPECT_TRUE(request->browser_initiated()); | 273 EXPECT_TRUE(request->browser_initiated()); |
| 274 EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE, request->state()); | 274 EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE, request->state()); |
| 275 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 275 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 276 | 276 |
| 277 // Simulate a beforeUnload denial. | 277 // Simulate a beforeUnload denial. |
| 278 main_test_rfh()->SendBeforeUnloadACK(false); | 278 main_test_rfh()->SendBeforeUnloadACK(false); |
| 279 EXPECT_FALSE(node->navigation_request()); | 279 EXPECT_FALSE(node->navigation_request()); |
| 280 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 280 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 281 } | 281 } |
| 282 | 282 |
| 283 // PlzNavigate: Test that a proper NavigationRequest is created by | 283 // PlzNavigate: Test that a proper NavigationRequest is created by |
| 284 // RequestNavigation. | 284 // RequestNavigation. |
| 285 TEST_F(NavigatorTestWithBrowserSideNavigation, BeginNavigation) { | 285 TEST_F(NavigatorTestWithBrowserSideNavigation, BeginNavigation) { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 324 } else { | 324 } else { |
| 325 EXPECT_FALSE(GetSpeculativeRenderFrameHost(subframe_node)); | 325 EXPECT_FALSE(GetSpeculativeRenderFrameHost(subframe_node)); |
| 326 } | 326 } |
| 327 | 327 |
| 328 // Now start a navigation at the root node. | 328 // Now start a navigation at the root node. |
| 329 RequestNavigation(root_node, kUrl3); | 329 RequestNavigation(root_node, kUrl3); |
| 330 NavigationRequest* main_request = root_node->navigation_request(); | 330 NavigationRequest* main_request = root_node->navigation_request(); |
| 331 ASSERT_TRUE(main_request); | 331 ASSERT_TRUE(main_request); |
| 332 EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE, | 332 EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE, |
| 333 main_request->state()); | 333 main_request->state()); |
| 334 EXPECT_FALSE(GetSpeculativeRenderFrameHost(root_node)); | 334 |
| 335 // Main frame navigation to a different site should use a speculative |
| 336 // RenderFrameHost. |
| 337 EXPECT_TRUE(GetSpeculativeRenderFrameHost(root_node)); |
| 335 | 338 |
| 336 // Simulate a BeforeUnloadACK IPC on the main frame. | 339 // Simulate a BeforeUnloadACK IPC on the main frame. |
| 337 main_test_rfh()->SendBeforeUnloadACK(true); | 340 main_test_rfh()->SendBeforeUnloadACK(true); |
| 338 TestNavigationURLLoader* main_loader = | 341 TestNavigationURLLoader* main_loader = |
| 339 GetLoaderForNavigationRequest(main_request); | 342 GetLoaderForNavigationRequest(main_request); |
| 340 EXPECT_EQ(kUrl3, main_request->common_params().url); | 343 EXPECT_EQ(kUrl3, main_request->common_params().url); |
| 341 EXPECT_EQ(kUrl3, main_loader->request_info()->common_params.url); | 344 EXPECT_EQ(kUrl3, main_loader->request_info()->common_params.url); |
| 342 EXPECT_EQ(kUrl3, main_loader->request_info()->first_party_for_cookies); | 345 EXPECT_EQ(kUrl3, main_loader->request_info()->first_party_for_cookies); |
| 343 EXPECT_TRUE(main_loader->request_info()->is_main_frame); | 346 EXPECT_TRUE(main_loader->request_info()->is_main_frame); |
| 344 EXPECT_FALSE(main_loader->request_info()->parent_is_main_frame); | 347 EXPECT_FALSE(main_loader->request_info()->parent_is_main_frame); |
| 345 EXPECT_TRUE(main_request->browser_initiated()); | 348 EXPECT_TRUE(main_request->browser_initiated()); |
| 346 // BeforeUnloadACK was received from the renderer so the navigation should | 349 // BeforeUnloadACK was received from the renderer so the navigation should |
| 347 // have started. | 350 // have started. |
| 348 EXPECT_EQ(NavigationRequest::STARTED, main_request->state()); | 351 EXPECT_EQ(NavigationRequest::STARTED, main_request->state()); |
| 349 | |
| 350 // Main frame navigation to a different site should use a speculative | |
| 351 // RenderFrameHost. | |
| 352 EXPECT_TRUE(GetSpeculativeRenderFrameHost(root_node)); | 352 EXPECT_TRUE(GetSpeculativeRenderFrameHost(root_node)); |
| 353 | 353 |
| 354 // As the main frame hasn't yet committed the subframe still exists. Thus, the | 354 // As the main frame hasn't yet committed the subframe still exists. Thus, the |
| 355 // above situation regarding subframe navigations is valid here. | 355 // above situation regarding subframe navigations is valid here. |
| 356 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 356 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 357 switches::kSitePerProcess)) { | 357 switches::kSitePerProcess)) { |
| 358 EXPECT_TRUE(GetSpeculativeRenderFrameHost(subframe_node)); | 358 EXPECT_TRUE(GetSpeculativeRenderFrameHost(subframe_node)); |
| 359 } else { | 359 } else { |
| 360 EXPECT_FALSE(GetSpeculativeRenderFrameHost(subframe_node)); | 360 EXPECT_FALSE(GetSpeculativeRenderFrameHost(subframe_node)); |
| 361 } | 361 } |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 432 | 432 |
| 433 contents()->NavigateAndCommit(kUrl1); | 433 contents()->NavigateAndCommit(kUrl1); |
| 434 RenderFrameHostImpl* initial_rfh = main_test_rfh(); | 434 RenderFrameHostImpl* initial_rfh = main_test_rfh(); |
| 435 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 435 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 436 | 436 |
| 437 // Navigate to a different site. | 437 // Navigate to a different site. |
| 438 process()->sink().ClearMessages(); | 438 process()->sink().ClearMessages(); |
| 439 int entry_id = RequestNavigation(node, kUrl2); | 439 int entry_id = RequestNavigation(node, kUrl2); |
| 440 NavigationRequest* main_request = node->navigation_request(); | 440 NavigationRequest* main_request = node->navigation_request(); |
| 441 ASSERT_TRUE(main_request); | 441 ASSERT_TRUE(main_request); |
| 442 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 442 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 443 ASSERT_TRUE(speculative_rfh); |
| 443 | 444 |
| 444 // Receive the beforeUnload ACK. | 445 // Receive the beforeUnload ACK. |
| 445 main_test_rfh()->SendBeforeUnloadACK(true); | 446 main_test_rfh()->SendBeforeUnloadACK(true); |
| 446 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 447 EXPECT_EQ(speculative_rfh, GetSpeculativeRenderFrameHost(node)); |
| 447 EXPECT_FALSE(contents()->CrossProcessNavigationPending()); | 448 EXPECT_FALSE(contents()->CrossProcessNavigationPending()); |
| 448 | 449 |
| 449 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 450 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 450 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( | 451 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( |
| 451 response, MakeEmptyStream()); | 452 response, MakeEmptyStream()); |
| 452 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 453 EXPECT_EQ(speculative_rfh, GetSpeculativeRenderFrameHost(node)); |
| 453 ASSERT_TRUE(speculative_rfh); | |
| 454 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 454 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 455 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 455 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 456 EXPECT_TRUE(contents()->CrossProcessNavigationPending()); | 456 EXPECT_TRUE(contents()->CrossProcessNavigationPending()); |
| 457 | 457 |
| 458 speculative_rfh->SendNavigate(0, entry_id, true, kUrl2); | 458 speculative_rfh->SendNavigate(0, entry_id, true, kUrl2); |
| 459 | 459 |
| 460 RenderFrameHostImpl* final_rfh = main_test_rfh(); | 460 RenderFrameHostImpl* final_rfh = main_test_rfh(); |
| 461 EXPECT_EQ(speculative_rfh, final_rfh); | 461 EXPECT_EQ(speculative_rfh, final_rfh); |
| 462 EXPECT_NE(initial_rfh, final_rfh); | 462 EXPECT_NE(initial_rfh, final_rfh); |
| 463 EXPECT_TRUE(final_rfh->IsRenderFrameLive()); | 463 EXPECT_TRUE(final_rfh->IsRenderFrameLive()); |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 694 contents()->NavigateAndCommit(kUrl0); | 694 contents()->NavigateAndCommit(kUrl0); |
| 695 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 695 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 696 | 696 |
| 697 // Start a browser-initiated navigation to the 1st URL. | 697 // Start a browser-initiated navigation to the 1st URL. |
| 698 process()->sink().ClearMessages(); | 698 process()->sink().ClearMessages(); |
| 699 int entry_id = RequestNavigation(node, kUrl1); | 699 int entry_id = RequestNavigation(node, kUrl1); |
| 700 NavigationRequest* request1 = node->navigation_request(); | 700 NavigationRequest* request1 = node->navigation_request(); |
| 701 ASSERT_TRUE(request1); | 701 ASSERT_TRUE(request1); |
| 702 EXPECT_EQ(kUrl1, request1->common_params().url); | 702 EXPECT_EQ(kUrl1, request1->common_params().url); |
| 703 EXPECT_TRUE(request1->browser_initiated()); | 703 EXPECT_TRUE(request1->browser_initiated()); |
| 704 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 704 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 705 | 705 |
| 706 // Now receive a renderer-initiated non-user-initiated request. Nothing should | 706 // Now receive a renderer-initiated non-user-initiated request. Nothing should |
| 707 // change. | 707 // change. |
| 708 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); | 708 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); |
| 709 NavigationRequest* request2 = node->navigation_request(); | 709 NavigationRequest* request2 = node->navigation_request(); |
| 710 ASSERT_TRUE(request2); | 710 ASSERT_TRUE(request2); |
| 711 EXPECT_EQ(request1, request2); | 711 EXPECT_EQ(request1, request2); |
| 712 EXPECT_EQ(kUrl1, request2->common_params().url); | 712 EXPECT_EQ(kUrl1, request2->common_params().url); |
| 713 EXPECT_TRUE(request2->browser_initiated()); | 713 EXPECT_TRUE(request2->browser_initiated()); |
| 714 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 714 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 715 | 715 |
| 716 // Now receive the beforeUnload ACK from the still ongoing navigation. | 716 // Now receive the beforeUnload ACK from the still ongoing navigation. |
| 717 main_test_rfh()->SendBeforeUnloadACK(true); | 717 main_test_rfh()->SendBeforeUnloadACK(true); |
| 718 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 718 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 719 ASSERT_TRUE(speculative_rfh); | 719 ASSERT_TRUE(speculative_rfh); |
| 720 | 720 |
| 721 // Have the RenderFrameHost commit the navigation. | 721 // Have the RenderFrameHost commit the navigation. |
| 722 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 722 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 723 GetLoaderForNavigationRequest(request2) | 723 GetLoaderForNavigationRequest(request2) |
| 724 ->CallOnResponseStarted(response, MakeEmptyStream()); | 724 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 819 SpeculativeRendererWorksBaseCase) { | 819 SpeculativeRendererWorksBaseCase) { |
| 820 // Navigate to an initial site. | 820 // Navigate to an initial site. |
| 821 const GURL kUrlInit("http://wikipedia.org/"); | 821 const GURL kUrlInit("http://wikipedia.org/"); |
| 822 contents()->NavigateAndCommit(kUrlInit); | 822 contents()->NavigateAndCommit(kUrlInit); |
| 823 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 823 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 824 | 824 |
| 825 // Begin navigating to another site. | 825 // Begin navigating to another site. |
| 826 const GURL kUrl("http://google.com/"); | 826 const GURL kUrl("http://google.com/"); |
| 827 process()->sink().ClearMessages(); | 827 process()->sink().ClearMessages(); |
| 828 int entry_id = RequestNavigation(node, kUrl); | 828 int entry_id = RequestNavigation(node, kUrl); |
| 829 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 829 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 830 ASSERT_TRUE(speculative_rfh); |
| 831 EXPECT_NE(speculative_rfh, main_test_rfh()); |
| 830 | 832 |
| 831 // Receive the beforeUnload ACK. | 833 // Receive the beforeUnload ACK. |
| 832 main_test_rfh()->SendBeforeUnloadACK(true); | 834 main_test_rfh()->SendBeforeUnloadACK(true); |
| 833 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 835 EXPECT_EQ(speculative_rfh, GetSpeculativeRenderFrameHost(node)); |
| 834 ASSERT_TRUE(speculative_rfh); | |
| 835 EXPECT_NE(speculative_rfh, main_test_rfh()); | |
| 836 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), | 836 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), |
| 837 speculative_rfh->GetSiteInstance()->GetSiteURL()); | 837 speculative_rfh->GetSiteInstance()->GetSiteURL()); |
| 838 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 838 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 839 int32 site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); | 839 int32 site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); |
| 840 | 840 |
| 841 // Ask Navigator to commit the navigation by simulating a call to | 841 // Ask Navigator to commit the navigation by simulating a call to |
| 842 // OnResponseStarted. | 842 // OnResponseStarted. |
| 843 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 843 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 844 GetLoaderForNavigationRequest(node->navigation_request()) | 844 GetLoaderForNavigationRequest(node->navigation_request()) |
| 845 ->CallOnResponseStarted(response, MakeEmptyStream()); | 845 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 846 speculative_rfh = GetSpeculativeRenderFrameHost(node); | 846 EXPECT_EQ(speculative_rfh, GetSpeculativeRenderFrameHost(node)); |
| 847 ASSERT_TRUE(speculative_rfh); | |
| 848 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 847 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 849 EXPECT_EQ(site_instance_id, speculative_rfh->GetSiteInstance()->GetId()); | 848 EXPECT_EQ(site_instance_id, speculative_rfh->GetSiteInstance()->GetId()); |
| 850 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 849 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 851 | 850 |
| 852 // Invoke OnDidCommitProvisionalLoad. | 851 // Invoke OnDidCommitProvisionalLoad. |
| 853 speculative_rfh->SendNavigate(0, entry_id, true, kUrl); | 852 speculative_rfh->SendNavigate(0, entry_id, true, kUrl); |
| 854 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); | 853 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); |
| 855 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 854 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 856 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 855 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 857 } | 856 } |
| 858 | 857 |
| 859 // PlzNavigate: Confirm that a speculative RenderFrameHost is thrown away when | 858 // PlzNavigate: Confirm that a speculative RenderFrameHost is thrown away when |
| 860 // the final URL's site differs from the initial one due to redirects. | 859 // the final URL's site differs from the initial one due to redirects. |
| 861 TEST_F(NavigatorTestWithBrowserSideNavigation, | 860 TEST_F(NavigatorTestWithBrowserSideNavigation, |
| 862 SpeculativeRendererDiscardedAfterRedirectToAnotherSite) { | 861 SpeculativeRendererDiscardedAfterRedirectToAnotherSite) { |
| 863 // Navigate to an initial site. | 862 // Navigate to an initial site. |
| 864 const GURL kUrlInit("http://wikipedia.org/"); | 863 const GURL kUrlInit("http://wikipedia.org/"); |
| 865 contents()->NavigateAndCommit(kUrlInit); | 864 contents()->NavigateAndCommit(kUrlInit); |
| 866 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 865 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 867 int32 init_site_instance_id = main_test_rfh()->GetSiteInstance()->GetId(); | 866 int32 init_site_instance_id = main_test_rfh()->GetSiteInstance()->GetId(); |
| 868 | 867 |
| 869 // Begin navigating to another site. | 868 // Begin navigating to another site. |
| 870 const GURL kUrl("http://google.com/"); | 869 const GURL kUrl("http://google.com/"); |
| 871 process()->sink().ClearMessages(); | 870 process()->sink().ClearMessages(); |
| 872 int entry_id = RequestNavigation(node, kUrl); | 871 int entry_id = RequestNavigation(node, kUrl); |
| 873 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | |
| 874 | |
| 875 // Receive the beforeUnload ACK. | |
| 876 main_test_rfh()->SendBeforeUnloadACK(true); | |
| 877 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 872 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 873 ASSERT_TRUE(speculative_rfh); |
| 878 int32 site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); | 874 int32 site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); |
| 879 EXPECT_NE(init_site_instance_id, site_instance_id); | 875 EXPECT_NE(init_site_instance_id, site_instance_id); |
| 880 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); | 876 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); |
| 881 ASSERT_TRUE(speculative_rfh); | |
| 882 EXPECT_NE(speculative_rfh, main_test_rfh()); | 877 EXPECT_NE(speculative_rfh, main_test_rfh()); |
| 883 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), | 878 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), |
| 884 speculative_rfh->GetSiteInstance()->GetSiteURL()); | 879 speculative_rfh->GetSiteInstance()->GetSiteURL()); |
| 885 | 880 |
| 881 // Receive the beforeUnload ACK. |
| 882 main_test_rfh()->SendBeforeUnloadACK(true); |
| 883 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 884 |
| 886 // It then redirects to yet another site. | 885 // It then redirects to yet another site. |
| 887 NavigationRequest* main_request = node->navigation_request(); | 886 NavigationRequest* main_request = node->navigation_request(); |
| 888 ASSERT_TRUE(main_request); | 887 ASSERT_TRUE(main_request); |
| 889 const GURL kUrlRedirect("https://www.google.com/"); | 888 const GURL kUrlRedirect("https://www.google.com/"); |
| 890 GetLoaderForNavigationRequest(main_request) | 889 GetLoaderForNavigationRequest(main_request) |
| 891 ->SimulateServerRedirect(kUrlRedirect); | 890 ->SimulateServerRedirect(kUrlRedirect); |
| 892 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); | 891 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); |
| 893 speculative_rfh = GetSpeculativeRenderFrameHost(node); | 892 speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 894 ASSERT_TRUE(speculative_rfh); | 893 ASSERT_TRUE(speculative_rfh); |
| 895 | 894 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 948 ASSERT_NE(rfh1, main_test_rfh()); | 947 ASSERT_NE(rfh1, main_test_rfh()); |
| 949 EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state()); | 948 EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state()); |
| 950 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); | 949 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); |
| 951 EXPECT_TRUE(rfhm->IsOnSwappedOutList(rfh1)); | 950 EXPECT_TRUE(rfhm->IsOnSwappedOutList(rfh1)); |
| 952 | 951 |
| 953 // Now go back to the initial site so that the swapped out RenderFrameHost | 952 // Now go back to the initial site so that the swapped out RenderFrameHost |
| 954 // should be reused. | 953 // should be reused. |
| 955 process()->sink().ClearMessages(); | 954 process()->sink().ClearMessages(); |
| 956 rfh1->GetProcess()->sink().ClearMessages(); | 955 rfh1->GetProcess()->sink().ClearMessages(); |
| 957 int entry_id = RequestNavigation(node, kUrl1); | 956 int entry_id = RequestNavigation(node, kUrl1); |
| 958 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 957 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); |
| 959 | 958 |
| 960 main_test_rfh()->SendBeforeUnloadACK(true); | 959 main_test_rfh()->SendBeforeUnloadACK(true); |
| 961 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); | 960 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); |
| 962 EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT, | 961 EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT, |
| 963 GetSpeculativeRenderFrameHost(node)->rfh_state()); | 962 GetSpeculativeRenderFrameHost(node)->rfh_state()); |
| 964 | 963 |
| 965 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 964 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 966 GetLoaderForNavigationRequest(node->navigation_request()) | 965 GetLoaderForNavigationRequest(node->navigation_request()) |
| 967 ->CallOnResponseStarted(response, MakeEmptyStream()); | 966 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 968 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); | 967 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1137 | 1136 |
| 1138 SiteInstance* converted_instance_2 = | 1137 SiteInstance* converted_instance_2 = |
| 1139 ConvertToSiteInstance(rfhm, descriptor, unrelated_instance.get()); | 1138 ConvertToSiteInstance(rfhm, descriptor, unrelated_instance.get()); |
| 1140 // Should return |unrelated_instance| because its site matches and it is | 1139 // Should return |unrelated_instance| because its site matches and it is |
| 1141 // unrelated to the current SiteInstance. | 1140 // unrelated to the current SiteInstance. |
| 1142 EXPECT_EQ(unrelated_instance.get(), converted_instance_2); | 1141 EXPECT_EQ(unrelated_instance.get(), converted_instance_2); |
| 1143 } | 1142 } |
| 1144 } | 1143 } |
| 1145 | 1144 |
| 1146 } // namespace content | 1145 } // namespace content |
| OLD | NEW |