| 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 <stdint.h> | 5 #include <stdint.h> |
| 6 | 6 |
| 7 #include "base/macros.h" | 7 #include "base/macros.h" |
| 8 #include "base/time/time.h" | 8 #include "base/time/time.h" |
| 9 #include "build/build_config.h" | 9 #include "build/build_config.h" |
| 10 #include "content/browser/frame_host/navigation_controller_impl.h" | 10 #include "content/browser/frame_host/navigation_controller_impl.h" |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 230 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 230 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 231 NavigationRequest* request = node->navigation_request(); | 231 NavigationRequest* request = node->navigation_request(); |
| 232 ASSERT_TRUE(request); | 232 ASSERT_TRUE(request); |
| 233 | 233 |
| 234 // The navigation is immediately started as there's no need to wait for | 234 // The navigation is immediately started as there's no need to wait for |
| 235 // beforeUnload to be executed. | 235 // beforeUnload to be executed. |
| 236 EXPECT_EQ(NavigationRequest::STARTED, request->state()); | 236 EXPECT_EQ(NavigationRequest::STARTED, request->state()); |
| 237 EXPECT_FALSE(request->begin_params().has_user_gesture); | 237 EXPECT_FALSE(request->begin_params().has_user_gesture); |
| 238 EXPECT_EQ(kUrl2, request->common_params().url); | 238 EXPECT_EQ(kUrl2, request->common_params().url); |
| 239 EXPECT_FALSE(request->browser_initiated()); | 239 EXPECT_FALSE(request->browser_initiated()); |
| 240 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 240 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { |
| 241 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 242 } else { |
| 243 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 244 } |
| 241 | 245 |
| 242 // Have the current RenderFrameHost commit the navigation. | 246 // Have the current RenderFrameHost commit the navigation. |
| 243 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 247 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 244 GetLoaderForNavigationRequest(request) | 248 GetLoaderForNavigationRequest(request) |
| 245 ->CallOnResponseStarted(response, MakeEmptyStream()); | 249 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 246 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 250 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { |
| 251 EXPECT_TRUE( |
| 252 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); |
| 253 } else { |
| 254 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 255 } |
| 247 EXPECT_TRUE(main_test_rfh()->is_loading()); | 256 EXPECT_TRUE(main_test_rfh()->is_loading()); |
| 248 EXPECT_FALSE(node->navigation_request()); | 257 EXPECT_FALSE(node->navigation_request()); |
| 249 | 258 |
| 250 // Commit the navigation. | 259 // Commit the navigation. |
| 251 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); | 260 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); |
| 252 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); | 261 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); |
| 253 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 262 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
| 254 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 263 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 255 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 264 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 256 | 265 |
| (...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 615 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, true); | 624 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, true); |
| 616 NavigationRequest* request2 = node->navigation_request(); | 625 NavigationRequest* request2 = node->navigation_request(); |
| 617 ASSERT_TRUE(request2); | 626 ASSERT_TRUE(request2); |
| 618 EXPECT_EQ(kUrl2, request2->common_params().url); | 627 EXPECT_EQ(kUrl2, request2->common_params().url); |
| 619 EXPECT_FALSE(request2->browser_initiated()); | 628 EXPECT_FALSE(request2->browser_initiated()); |
| 620 EXPECT_TRUE(request2->begin_params().has_user_gesture); | 629 EXPECT_TRUE(request2->begin_params().has_user_gesture); |
| 621 | 630 |
| 622 // Confirm that the first loader got destroyed. | 631 // Confirm that the first loader got destroyed. |
| 623 EXPECT_FALSE(loader1); | 632 EXPECT_FALSE(loader1); |
| 624 | 633 |
| 625 // Confirm that the speculative RenderFrameHost was destroyed. | 634 // Confirm that the speculative RenderFrameHost was destroyed in the non |
| 626 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 635 // SitePerProcess case. |
| 636 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { |
| 637 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 638 } else { |
| 639 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 640 } |
| 627 | 641 |
| 628 // Have the RenderFrameHost commit the navigation. | 642 // Have the RenderFrameHost commit the navigation. |
| 629 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 643 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 630 GetLoaderForNavigationRequest(request2) | 644 GetLoaderForNavigationRequest(request2) |
| 631 ->CallOnResponseStarted(response, MakeEmptyStream()); | 645 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 632 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 646 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { |
| 647 EXPECT_TRUE( |
| 648 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); |
| 649 } else { |
| 650 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 651 } |
| 633 | 652 |
| 634 // Commit the navigation. | 653 // Commit the navigation. |
| 635 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); | 654 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); |
| 636 | 655 |
| 637 // Confirm that the commit corresponds to the new request. | 656 // Confirm that the commit corresponds to the new request. |
| 638 ASSERT_TRUE(main_test_rfh()); | 657 ASSERT_TRUE(main_test_rfh()); |
| 639 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 658 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
| 640 } | 659 } |
| 641 | 660 |
| 642 // PlzNavigate: Test that a renderer-initiated user-initiated navigation is NOT | 661 // PlzNavigate: Test that a renderer-initiated user-initiated navigation is NOT |
| (...skipping 10 matching lines...) Expand all Loading... |
| 653 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 672 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 654 | 673 |
| 655 // Start a renderer-initiated user-initiated navigation to the 1st URL. | 674 // Start a renderer-initiated user-initiated navigation to the 1st URL. |
| 656 process()->sink().ClearMessages(); | 675 process()->sink().ClearMessages(); |
| 657 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl1, true); | 676 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl1, true); |
| 658 NavigationRequest* request1 = node->navigation_request(); | 677 NavigationRequest* request1 = node->navigation_request(); |
| 659 ASSERT_TRUE(request1); | 678 ASSERT_TRUE(request1); |
| 660 EXPECT_EQ(kUrl1, request1->common_params().url); | 679 EXPECT_EQ(kUrl1, request1->common_params().url); |
| 661 EXPECT_FALSE(request1->browser_initiated()); | 680 EXPECT_FALSE(request1->browser_initiated()); |
| 662 EXPECT_TRUE(request1->begin_params().has_user_gesture); | 681 EXPECT_TRUE(request1->begin_params().has_user_gesture); |
| 663 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 682 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { |
| 683 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 684 } else { |
| 685 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 686 } |
| 664 | 687 |
| 665 // Now receive a renderer-initiated non-user-initiated request. Nothing should | 688 // Now receive a renderer-initiated non-user-initiated request. Nothing should |
| 666 // change. | 689 // change. |
| 667 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); | 690 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); |
| 668 NavigationRequest* request2 = node->navigation_request(); | 691 NavigationRequest* request2 = node->navigation_request(); |
| 669 ASSERT_TRUE(request2); | 692 ASSERT_TRUE(request2); |
| 670 EXPECT_EQ(request1, request2); | 693 EXPECT_EQ(request1, request2); |
| 671 EXPECT_EQ(kUrl1, request2->common_params().url); | 694 EXPECT_EQ(kUrl1, request2->common_params().url); |
| 672 EXPECT_FALSE(request2->browser_initiated()); | 695 EXPECT_FALSE(request2->browser_initiated()); |
| 673 EXPECT_TRUE(request2->begin_params().has_user_gesture); | 696 EXPECT_TRUE(request2->begin_params().has_user_gesture); |
| 674 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 697 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { |
| 698 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 699 } else { |
| 700 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 701 } |
| 675 | 702 |
| 676 // Have the RenderFrameHost commit the navigation. | 703 // Have the RenderFrameHost commit the navigation. |
| 677 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 704 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 678 GetLoaderForNavigationRequest(request2) | 705 GetLoaderForNavigationRequest(request2) |
| 679 ->CallOnResponseStarted(response, MakeEmptyStream()); | 706 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 680 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 707 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { |
| 708 EXPECT_TRUE( |
| 709 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); |
| 710 } else { |
| 711 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 712 } |
| 681 | 713 |
| 682 // Commit the navigation. | 714 // Commit the navigation. |
| 683 main_test_rfh()->SendNavigate(1, 0, true, kUrl1); | 715 main_test_rfh()->SendNavigate(1, 0, true, kUrl1); |
| 684 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); | 716 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); |
| 685 } | 717 } |
| 686 | 718 |
| 687 // PlzNavigate: Test that a browser-initiated navigation is NOT canceled if a | 719 // PlzNavigate: Test that a browser-initiated navigation is NOT canceled if a |
| 688 // renderer-initiated non-user-initiated request is issued in the meantime. | 720 // renderer-initiated non-user-initiated request is issued in the meantime. |
| 689 TEST_F(NavigatorTestWithBrowserSideNavigation, | 721 TEST_F(NavigatorTestWithBrowserSideNavigation, |
| 690 RendererNonUserInitiatedNavigationDoesntCancelBrowserInitiated) { | 722 RendererNonUserInitiatedNavigationDoesntCancelBrowserInitiated) { |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 746 int32_t site_instance_id_0 = main_test_rfh()->GetSiteInstance()->GetId(); | 778 int32_t site_instance_id_0 = main_test_rfh()->GetSiteInstance()->GetId(); |
| 747 | 779 |
| 748 // Start a renderer-initiated non-user-initiated navigation to the 1st URL. | 780 // Start a renderer-initiated non-user-initiated navigation to the 1st URL. |
| 749 process()->sink().ClearMessages(); | 781 process()->sink().ClearMessages(); |
| 750 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl1, false); | 782 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl1, false); |
| 751 NavigationRequest* request1 = node->navigation_request(); | 783 NavigationRequest* request1 = node->navigation_request(); |
| 752 ASSERT_TRUE(request1); | 784 ASSERT_TRUE(request1); |
| 753 EXPECT_EQ(kUrl1, request1->common_params().url); | 785 EXPECT_EQ(kUrl1, request1->common_params().url); |
| 754 EXPECT_FALSE(request1->browser_initiated()); | 786 EXPECT_FALSE(request1->browser_initiated()); |
| 755 EXPECT_FALSE(request1->begin_params().has_user_gesture); | 787 EXPECT_FALSE(request1->begin_params().has_user_gesture); |
| 756 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 788 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { |
| 789 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 790 } else { |
| 791 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 792 } |
| 757 base::WeakPtr<TestNavigationURLLoader> loader1 = | 793 base::WeakPtr<TestNavigationURLLoader> loader1 = |
| 758 GetLoaderForNavigationRequest(request1)->AsWeakPtr(); | 794 GetLoaderForNavigationRequest(request1)->AsWeakPtr(); |
| 759 EXPECT_TRUE(loader1); | 795 EXPECT_TRUE(loader1); |
| 760 | 796 |
| 761 // Now receive a 2nd similar request that should replace the current one. | 797 // Now receive a 2nd similar request that should replace the current one. |
| 762 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); | 798 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); |
| 763 NavigationRequest* request2 = node->navigation_request(); | 799 NavigationRequest* request2 = node->navigation_request(); |
| 764 EXPECT_EQ(kUrl2, request2->common_params().url); | 800 EXPECT_EQ(kUrl2, request2->common_params().url); |
| 765 EXPECT_FALSE(request2->browser_initiated()); | 801 EXPECT_FALSE(request2->browser_initiated()); |
| 766 EXPECT_FALSE(request2->begin_params().has_user_gesture); | 802 EXPECT_FALSE(request2->begin_params().has_user_gesture); |
| 767 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 803 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { |
| 804 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 805 } else { |
| 806 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 807 } |
| 768 | 808 |
| 769 // Confirm that the first loader got destroyed. | 809 // Confirm that the first loader got destroyed. |
| 770 EXPECT_FALSE(loader1); | 810 EXPECT_FALSE(loader1); |
| 771 | 811 |
| 772 // Have the RenderFrameHost commit the navigation. | 812 // Have the RenderFrameHost commit the navigation. |
| 773 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 813 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 774 GetLoaderForNavigationRequest(request2) | 814 GetLoaderForNavigationRequest(request2) |
| 775 ->CallOnResponseStarted(response, MakeEmptyStream()); | 815 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 776 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 816 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { |
| 817 EXPECT_TRUE( |
| 818 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); |
| 819 } else { |
| 820 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 821 } |
| 777 | 822 |
| 778 // Commit the navigation. | 823 // Commit the navigation. |
| 779 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); | 824 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); |
| 780 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 825 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
| 781 | 826 |
| 782 // The SiteInstance did not change. | 827 // The SiteInstance did not change. |
| 783 EXPECT_EQ(site_instance_id_0, main_test_rfh()->GetSiteInstance()->GetId()); | 828 EXPECT_EQ(site_instance_id_0, main_test_rfh()->GetSiteInstance()->GetId()); |
| 784 } | 829 } |
| 785 | 830 |
| 786 // PlzNavigate: Test that a reload navigation is properly signaled to the | 831 // PlzNavigate: Test that a reload navigation is properly signaled to the |
| (...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1140 | 1185 |
| 1141 SiteInstance* converted_instance_2 = | 1186 SiteInstance* converted_instance_2 = |
| 1142 ConvertToSiteInstance(rfhm, descriptor, unrelated_instance.get()); | 1187 ConvertToSiteInstance(rfhm, descriptor, unrelated_instance.get()); |
| 1143 // Should return |unrelated_instance| because its site matches and it is | 1188 // Should return |unrelated_instance| because its site matches and it is |
| 1144 // unrelated to the current SiteInstance. | 1189 // unrelated to the current SiteInstance. |
| 1145 EXPECT_EQ(unrelated_instance.get(), converted_instance_2); | 1190 EXPECT_EQ(unrelated_instance.get(), converted_instance_2); |
| 1146 } | 1191 } |
| 1147 } | 1192 } |
| 1148 | 1193 |
| 1149 } // namespace content | 1194 } // namespace content |
| OLD | NEW |