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

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

Issue 946543003: PlzNavigate: have renderer-initiated navigations be same-process (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Integrating changes from other refactors and fully fixing affected tests. Created 5 years, 9 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 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 EXPECT_TRUE(main_test_rfh()->IsRenderFrameLive()); 145 EXPECT_TRUE(main_test_rfh()->IsRenderFrameLive());
146 146
147 // After a navigation is finished no speculative RenderFrameHost should 147 // After a navigation is finished no speculative RenderFrameHost should
148 // exist. 148 // exist.
149 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 149 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
150 150
151 // With PlzNavigate enabled a pending RenderFrameHost should never exist. 151 // With PlzNavigate enabled a pending RenderFrameHost should never exist.
152 EXPECT_FALSE(node->render_manager()->pending_frame_host()); 152 EXPECT_FALSE(node->render_manager()->pending_frame_host());
153 } 153 }
154 154
155 // PlzNavigate: Test a complete renderer-initiated same-site navigation. 155 // PlzNavigate: Test a complete renderer-initiated same-site navigation.
clamy 2015/03/05 10:44:05 Could you add a test for a complete renderer-initi
carlosk 2015/03/06 11:55:03 Done.
156 TEST_F(NavigatorTestWithBrowserSideNavigation, 156 TEST_F(NavigatorTestWithBrowserSideNavigation,
157 SimpleRendererInitiatedNavigation) { 157 SimpleRendererInitiatedNavigation) {
158 const GURL kUrl1("http://www.chromium.org/"); 158 const GURL kUrl1("http://www.chromium.org/");
159 const GURL kUrl2("http://www.chromium.org/Home"); 159 const GURL kUrl2("http://www.chromium.org/Home");
160 160
161 contents()->NavigateAndCommit(kUrl1); 161 contents()->NavigateAndCommit(kUrl1);
162 EXPECT_TRUE(main_test_rfh()->IsRenderFrameLive()); 162 EXPECT_TRUE(main_test_rfh()->IsRenderFrameLive());
163 163
164 // Start a renderer-initiated non-user-initiated navigation. 164 // Start a renderer-initiated non-user-initiated navigation.
165 process()->sink().ClearMessages(); 165 process()->sink().ClearMessages();
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 RequestNavigation(node, kUrl1); 535 RequestNavigation(node, kUrl1);
536 main_test_rfh()->SendBeforeUnloadACK(true); 536 main_test_rfh()->SendBeforeUnloadACK(true);
537 NavigationRequest* request1 = GetNavigationRequestForFrameTreeNode(node); 537 NavigationRequest* request1 = GetNavigationRequestForFrameTreeNode(node);
538 ASSERT_TRUE(request1); 538 ASSERT_TRUE(request1);
539 EXPECT_EQ(kUrl1, request1->common_params().url); 539 EXPECT_EQ(kUrl1, request1->common_params().url);
540 EXPECT_TRUE(request1->browser_initiated()); 540 EXPECT_TRUE(request1->browser_initiated());
541 base::WeakPtr<TestNavigationURLLoader> loader1 = 541 base::WeakPtr<TestNavigationURLLoader> loader1 =
542 GetLoaderForNavigationRequest(request1)->AsWeakPtr(); 542 GetLoaderForNavigationRequest(request1)->AsWeakPtr();
543 EXPECT_TRUE(loader1); 543 EXPECT_TRUE(loader1);
544 544
545 // Confirm a speculative RenderFrameHost was created. 545 // Confirm a speculative RenderFrameHost was created.
clamy 2015/03/05 10:44:05 nit: "Confirm that"
carlosk 2015/03/06 11:55:03 Done.
546 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); 546 ASSERT_TRUE(GetSpeculativeRenderFrameHost(node));
547 ASSERT_TRUE(speculative_rfh);
548 int32 site_instance_id_1 = speculative_rfh->GetSiteInstance()->GetId();
549 547
550 // Now receive a renderer-initiated user-initiated request. It should replace 548 // Now receive a renderer-initiated user-initiated request. It should replace
551 // the current NavigationRequest. 549 // the current NavigationRequest.
552 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, true); 550 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, true);
553 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node); 551 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node);
554 ASSERT_TRUE(request2); 552 ASSERT_TRUE(request2);
555 EXPECT_EQ(kUrl2, request2->common_params().url); 553 EXPECT_EQ(kUrl2, request2->common_params().url);
556 EXPECT_FALSE(request2->browser_initiated()); 554 EXPECT_FALSE(request2->browser_initiated());
557 EXPECT_TRUE(request2->begin_params().has_user_gesture); 555 EXPECT_TRUE(request2->begin_params().has_user_gesture);
558 556
559 // Confirm that the first loader got destroyed. 557 // Confirm that the first loader got destroyed.
560 EXPECT_FALSE(loader1); 558 EXPECT_FALSE(loader1);
561 559
562 // Confirm that a new speculative RenderFrameHost was created. 560 // Confirm that a the speculative RenderFrameHost was destroyed.
clamy 2015/03/05 10:44:05 Remove the "a" from the comment.
carlosk 2015/03/06 11:55:03 Done.
563 speculative_rfh = GetSpeculativeRenderFrameHost(node); 561 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
564 ASSERT_TRUE(speculative_rfh);
565 int32 site_instance_id_2 = speculative_rfh->GetSiteInstance()->GetId();
566 EXPECT_NE(site_instance_id_1, site_instance_id_2);
567 562
568 // Have the RenderFrameHost commit the navigation. 563 // Have the RenderFrameHost commit the navigation.
569 scoped_refptr<ResourceResponse> response(new ResourceResponse); 564 scoped_refptr<ResourceResponse> response(new ResourceResponse);
570 GetLoaderForNavigationRequest(request2) 565 GetLoaderForNavigationRequest(request2)
571 ->CallOnResponseStarted(response, MakeEmptyStream()); 566 ->CallOnResponseStarted(response, MakeEmptyStream());
572 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); 567 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh()));
573 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh()));
574 568
575 // Commit the navigation. 569 // Commit the navigation.
576 speculative_rfh->SendNavigate(0, kUrl2); 570 main_test_rfh()->SendNavigate(0, kUrl2);
577 571
578 // Confirm that the commit corresponds to the new request. 572 // Confirm that the commit corresponds to the new request.
579 ASSERT_TRUE(main_test_rfh()); 573 ASSERT_TRUE(main_test_rfh());
580 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); 574 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL());
581
582 // Confirm that the committed RenderFrameHost is the latest speculative one.
583 EXPECT_EQ(site_instance_id_2, main_test_rfh()->GetSiteInstance()->GetId());
584 } 575 }
585 576
586 // PlzNavigate: Test that a renderer-initiated user-initiated navigation is NOT 577 // PlzNavigate: Test that a renderer-initiated user-initiated navigation is NOT
587 // canceled if a renderer-initiated non-user-initiated request is issued in the 578 // canceled if a renderer-initiated non-user-initiated request is issued in the
588 // meantime. 579 // meantime.
589 TEST_F(NavigatorTestWithBrowserSideNavigation, 580 TEST_F(NavigatorTestWithBrowserSideNavigation,
590 RendererNonUserInitiatedNavigationDoesntCancelRendererUserInitiated) { 581 RendererNonUserInitiatedNavigationDoesntCancelRendererUserInitiated) {
591 const GURL kUrl0("http://www.wikipedia.org/"); 582 const GURL kUrl0("http://www.wikipedia.org/");
592 const GURL kUrl1("http://www.chromium.org/"); 583 const GURL kUrl1("http://www.chromium.org/");
593 const GURL kUrl2("http://www.google.com/"); 584 const GURL kUrl2("http://www.google.com/");
594 585
595 // Initialization. 586 // Initialization.
596 contents()->NavigateAndCommit(kUrl0); 587 contents()->NavigateAndCommit(kUrl0);
597 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 588 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
598 589
599 // Start a renderer-initiated user-initiated navigation to the 1st URL. 590 // Start a renderer-initiated user-initiated navigation to the 1st URL.
600 process()->sink().ClearMessages(); 591 process()->sink().ClearMessages();
601 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl1, true); 592 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl1, true);
602 NavigationRequest* request1 = GetNavigationRequestForFrameTreeNode(node); 593 NavigationRequest* request1 = GetNavigationRequestForFrameTreeNode(node);
603 ASSERT_TRUE(request1); 594 ASSERT_TRUE(request1);
604 EXPECT_EQ(kUrl1, request1->common_params().url); 595 EXPECT_EQ(kUrl1, request1->common_params().url);
605 EXPECT_FALSE(request1->browser_initiated()); 596 EXPECT_FALSE(request1->browser_initiated());
606 EXPECT_TRUE(request1->begin_params().has_user_gesture); 597 EXPECT_TRUE(request1->begin_params().has_user_gesture);
607 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); 598 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
608 599
609 // Now receive a renderer-initiated non-user-initiated request. Nothing should 600 // Now receive a renderer-initiated non-user-initiated request. Nothing should
610 // change. 601 // change.
611 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); 602 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false);
612 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node); 603 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node);
613 ASSERT_TRUE(request2); 604 ASSERT_TRUE(request2);
614 EXPECT_EQ(request1, request2); 605 EXPECT_EQ(request1, request2);
615 EXPECT_EQ(kUrl1, request2->common_params().url); 606 EXPECT_EQ(kUrl1, request2->common_params().url);
616 EXPECT_FALSE(request2->browser_initiated()); 607 EXPECT_FALSE(request2->browser_initiated());
617 EXPECT_TRUE(request2->begin_params().has_user_gesture); 608 EXPECT_TRUE(request2->begin_params().has_user_gesture);
618 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); 609 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
619 ASSERT_TRUE(speculative_rfh);
620 610
621 // Have the RenderFrameHost commit the navigation. 611 // Have the RenderFrameHost commit the navigation.
622 scoped_refptr<ResourceResponse> response(new ResourceResponse); 612 scoped_refptr<ResourceResponse> response(new ResourceResponse);
623 GetLoaderForNavigationRequest(request2) 613 GetLoaderForNavigationRequest(request2)
624 ->CallOnResponseStarted(response, MakeEmptyStream()); 614 ->CallOnResponseStarted(response, MakeEmptyStream());
625 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); 615 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh()));
626 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh()));
627 616
628 // Commit the navigation. 617 // Commit the navigation.
629 speculative_rfh->SendNavigate(0, kUrl1); 618 main_test_rfh()->SendNavigate(0, kUrl1);
630 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); 619 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL());
631 } 620 }
632 621
633 // PlzNavigate: Test that a browser-initiated navigation is NOT canceled if a 622 // PlzNavigate: Test that a browser-initiated navigation is NOT canceled if a
634 // renderer-initiated non-user-initiated request is issued in the meantime. 623 // renderer-initiated non-user-initiated request is issued in the meantime.
635 TEST_F(NavigatorTestWithBrowserSideNavigation, 624 TEST_F(NavigatorTestWithBrowserSideNavigation,
636 RendererNonUserInitiatedNavigationDoesntCancelBrowserInitiated) { 625 RendererNonUserInitiatedNavigationDoesntCancelBrowserInitiated) {
637 const GURL kUrl0("http://www.wikipedia.org/"); 626 const GURL kUrl0("http://www.wikipedia.org/");
638 const GURL kUrl1("http://www.chromium.org/"); 627 const GURL kUrl1("http://www.chromium.org/");
639 const GURL kUrl2("http://www.google.com/"); 628 const GURL kUrl2("http://www.google.com/");
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
691 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 680 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
692 681
693 // Start a renderer-initiated non-user-initiated navigation to the 1st URL. 682 // Start a renderer-initiated non-user-initiated navigation to the 1st URL.
694 process()->sink().ClearMessages(); 683 process()->sink().ClearMessages();
695 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl1, false); 684 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl1, false);
696 NavigationRequest* request1 = GetNavigationRequestForFrameTreeNode(node); 685 NavigationRequest* request1 = GetNavigationRequestForFrameTreeNode(node);
697 ASSERT_TRUE(request1); 686 ASSERT_TRUE(request1);
698 EXPECT_EQ(kUrl1, request1->common_params().url); 687 EXPECT_EQ(kUrl1, request1->common_params().url);
699 EXPECT_FALSE(request1->browser_initiated()); 688 EXPECT_FALSE(request1->browser_initiated());
700 EXPECT_FALSE(request1->begin_params().has_user_gesture); 689 EXPECT_FALSE(request1->begin_params().has_user_gesture);
701 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); 690 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
702 base::WeakPtr<TestNavigationURLLoader> loader1 = 691 base::WeakPtr<TestNavigationURLLoader> loader1 =
703 GetLoaderForNavigationRequest(request1)->AsWeakPtr(); 692 GetLoaderForNavigationRequest(request1)->AsWeakPtr();
704 EXPECT_TRUE(loader1); 693 EXPECT_TRUE(loader1);
705 694
706 // Now receive a 2nd similar request that should replace the current one. 695 // Now receive a 2nd similar request that should replace the current one.
707 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); 696 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false);
708 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node); 697 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node);
709 EXPECT_EQ(kUrl2, request2->common_params().url); 698 EXPECT_EQ(kUrl2, request2->common_params().url);
710 EXPECT_FALSE(request2->browser_initiated()); 699 EXPECT_FALSE(request2->browser_initiated());
711 EXPECT_FALSE(request2->begin_params().has_user_gesture); 700 EXPECT_FALSE(request2->begin_params().has_user_gesture);
712 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); 701 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
713 ASSERT_TRUE(speculative_rfh);
714 702
715 // Confirm that the first loader got destroyed. 703 // Confirm that the first loader got destroyed.
716 EXPECT_FALSE(loader1); 704 EXPECT_FALSE(loader1);
717 705
718 // Have the RenderFrameHost commit the navigation. 706 // Have the RenderFrameHost commit the navigation.
719 scoped_refptr<ResourceResponse> response(new ResourceResponse); 707 scoped_refptr<ResourceResponse> response(new ResourceResponse);
720 GetLoaderForNavigationRequest(request2) 708 GetLoaderForNavigationRequest(request2)
721 ->CallOnResponseStarted(response, MakeEmptyStream()); 709 ->CallOnResponseStarted(response, MakeEmptyStream());
722 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); 710 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh()));
723 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh()));
724 711
725 // Commit the navigation. 712 // Commit the navigation.
726 speculative_rfh->SendNavigate(0, kUrl2); 713 main_test_rfh()->SendNavigate(0, kUrl2);
727 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); 714 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL());
728 } 715 }
729 716
730 // PlzNavigate: Test that a reload navigation is properly signaled to the 717 // PlzNavigate: Test that a reload navigation is properly signaled to the
731 // RenderFrame when the navigation can commit. A speculative RenderFrameHost 718 // RenderFrame when the navigation can commit. A speculative RenderFrameHost
732 // should not be created at any step. 719 // should not be created at any step.
733 TEST_F(NavigatorTestWithBrowserSideNavigation, Reload) { 720 TEST_F(NavigatorTestWithBrowserSideNavigation, Reload) {
734 const GURL kUrl("http://www.google.com/"); 721 const GURL kUrl("http://www.google.com/");
735 contents()->NavigateAndCommit(kUrl); 722 contents()->NavigateAndCommit(kUrl);
736 723
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
961 948
962 // Do a renderer-initiated navigation to a data url. The request should not be 949 // Do a renderer-initiated navigation to a data url. The request should not be
963 // sent to the IO thread, nor committed. 950 // sent to the IO thread, nor committed.
964 TestRenderFrameHost* main_rfh = main_test_rfh(); 951 TestRenderFrameHost* main_rfh = main_test_rfh();
965 main_rfh->SendRendererInitiatedNavigationRequest(kUrl2, true); 952 main_rfh->SendRendererInitiatedNavigationRequest(kUrl2, true);
966 navigation_request = GetNavigationRequestForFrameTreeNode(node); 953 navigation_request = GetNavigationRequestForFrameTreeNode(node);
967 ASSERT_TRUE(navigation_request); 954 ASSERT_TRUE(navigation_request);
968 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, 955 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED,
969 navigation_request->state()); 956 navigation_request->state());
970 EXPECT_FALSE(navigation_request->loader_for_testing()); 957 EXPECT_FALSE(navigation_request->loader_for_testing());
971 speculative_rfh = GetSpeculativeRenderFrameHost(node); 958 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
carlosk 2015/03/04 19:42:41 I removed the call to SendNavigate because in the
clamy 2015/03/05 10:44:04 Acknowledged.
972 ASSERT_TRUE(speculative_rfh);
973 speculative_rfh->SendNavigate(0, kUrl2);
974 EXPECT_EQ(main_test_rfh(), speculative_rfh);
975 } 959 }
976 960
977 } // namespace content 961 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698