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

Side by Side Diff: content/browser/frame_host/navigator_impl_unittest.cc

Issue 1163303003: PlzNavigate: Create the speculative renderer earlier. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Minor changes from nako@'s review comments. Created 5 years, 6 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
OLDNEW
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
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
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
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
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
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_EQ(speculative_rfh, 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);
894 ASSERT_TRUE(speculative_rfh);
895 892
896 // For now, ensure that the speculative RenderFrameHost does not change after 893 // For now, ensure that the speculative RenderFrameHost does not change after
897 // the redirect. 894 // the redirect.
898 // TODO(carlosk): once the speculative RenderFrameHost updates with redirects 895 // TODO(carlosk): once the speculative RenderFrameHost updates with redirects
899 // this next check will be changed to verify that it actually happens. 896 // this next check will be changed to verify that it actually happens.
897 EXPECT_EQ(speculative_rfh, GetSpeculativeRenderFrameHost(node));
900 EXPECT_EQ(site_instance_id, speculative_rfh->GetSiteInstance()->GetId()); 898 EXPECT_EQ(site_instance_id, speculative_rfh->GetSiteInstance()->GetId());
901 899
902 // Commit the navigation with Navigator by simulating the call to 900 // Commit the navigation with Navigator by simulating the call to
903 // OnResponseStarted. 901 // OnResponseStarted.
904 scoped_refptr<ResourceResponse> response(new ResourceResponse); 902 scoped_refptr<ResourceResponse> response(new ResourceResponse);
905 GetLoaderForNavigationRequest(main_request) 903 GetLoaderForNavigationRequest(main_request)
906 ->CallOnResponseStarted(response, MakeEmptyStream()); 904 ->CallOnResponseStarted(response, MakeEmptyStream());
907 speculative_rfh = GetSpeculativeRenderFrameHost(node); 905 speculative_rfh = GetSpeculativeRenderFrameHost(node);
906 ASSERT_TRUE(speculative_rfh);
908 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); 907 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh));
909 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); 908 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId());
910 909
911 // Once commit happens the speculative RenderFrameHost is updated to match the 910 // Once commit happens the speculative RenderFrameHost is updated to match the
912 // known final SiteInstance. 911 // known final SiteInstance.
913 ASSERT_TRUE(speculative_rfh);
914 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrlRedirect), 912 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrlRedirect),
915 speculative_rfh->GetSiteInstance()->GetSiteURL()); 913 speculative_rfh->GetSiteInstance()->GetSiteURL());
916 int32 redirect_site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); 914 int32 redirect_site_instance_id = speculative_rfh->GetSiteInstance()->GetId();
917 EXPECT_NE(init_site_instance_id, redirect_site_instance_id); 915 EXPECT_NE(init_site_instance_id, redirect_site_instance_id);
918 EXPECT_NE(site_instance_id, redirect_site_instance_id); 916 EXPECT_NE(site_instance_id, redirect_site_instance_id);
919 917
920 // Invoke OnDidCommitProvisionalLoad. 918 // Invoke OnDidCommitProvisionalLoad.
921 speculative_rfh->SendNavigate(0, entry_id, true, kUrlRedirect); 919 speculative_rfh->SendNavigate(0, entry_id, true, kUrlRedirect);
922 920
923 // Check that the speculative RenderFrameHost was swapped in. 921 // Check that the speculative RenderFrameHost was swapped in.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
955 ASSERT_NE(rfh1, main_test_rfh()); 953 ASSERT_NE(rfh1, main_test_rfh());
956 EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state()); 954 EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state());
957 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); 955 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state());
958 EXPECT_TRUE(rfhm->IsOnSwappedOutList(rfh1)); 956 EXPECT_TRUE(rfhm->IsOnSwappedOutList(rfh1));
959 957
960 // Now go back to the initial site so that the swapped out RenderFrameHost 958 // Now go back to the initial site so that the swapped out RenderFrameHost
961 // should be reused. 959 // should be reused.
962 process()->sink().ClearMessages(); 960 process()->sink().ClearMessages();
963 rfh1->GetProcess()->sink().ClearMessages(); 961 rfh1->GetProcess()->sink().ClearMessages();
964 int entry_id = RequestNavigation(node, kUrl1); 962 int entry_id = RequestNavigation(node, kUrl1);
965 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 963 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node));
966 964
967 main_test_rfh()->SendBeforeUnloadACK(true); 965 main_test_rfh()->SendBeforeUnloadACK(true);
968 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); 966 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node));
969 EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT, 967 EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT,
970 GetSpeculativeRenderFrameHost(node)->rfh_state()); 968 GetSpeculativeRenderFrameHost(node)->rfh_state());
971 969
972 scoped_refptr<ResourceResponse> response(new ResourceResponse); 970 scoped_refptr<ResourceResponse> response(new ResourceResponse);
973 GetLoaderForNavigationRequest(node->navigation_request()) 971 GetLoaderForNavigationRequest(node->navigation_request())
974 ->CallOnResponseStarted(response, MakeEmptyStream()); 972 ->CallOnResponseStarted(response, MakeEmptyStream());
975 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); 973 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node));
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
1144 1142
1145 SiteInstance* converted_instance_2 = 1143 SiteInstance* converted_instance_2 =
1146 ConvertToSiteInstance(rfhm, descriptor, unrelated_instance.get()); 1144 ConvertToSiteInstance(rfhm, descriptor, unrelated_instance.get());
1147 // Should return |unrelated_instance| because its site matches and it is 1145 // Should return |unrelated_instance| because its site matches and it is
1148 // unrelated to the current SiteInstance. 1146 // unrelated to the current SiteInstance.
1149 EXPECT_EQ(unrelated_instance.get(), converted_instance_2); 1147 EXPECT_EQ(unrelated_instance.get(), converted_instance_2);
1150 } 1148 }
1151 } 1149 }
1152 1150
1153 } // namespace content 1151 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698