| 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/feature_list.h" | 7 #include "base/feature_list.h" |
| 8 #include "base/macros.h" | 8 #include "base/macros.h" |
| 9 #include "base/time/time.h" | 9 #include "base/time/time.h" |
| 10 #include "build/build_config.h" | 10 #include "build/build_config.h" |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 225 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 226 NavigationRequest* request = node->navigation_request(); | 226 NavigationRequest* request = node->navigation_request(); |
| 227 ASSERT_TRUE(request); | 227 ASSERT_TRUE(request); |
| 228 | 228 |
| 229 // The navigation is immediately started as there's no need to wait for | 229 // The navigation is immediately started as there's no need to wait for |
| 230 // beforeUnload to be executed. | 230 // beforeUnload to be executed. |
| 231 EXPECT_EQ(NavigationRequest::STARTED, request->state()); | 231 EXPECT_EQ(NavigationRequest::STARTED, request->state()); |
| 232 EXPECT_FALSE(request->begin_params().has_user_gesture); | 232 EXPECT_FALSE(request->begin_params().has_user_gesture); |
| 233 EXPECT_EQ(kUrl2, request->common_params().url); | 233 EXPECT_EQ(kUrl2, request->common_params().url); |
| 234 EXPECT_FALSE(request->browser_initiated()); | 234 EXPECT_FALSE(request->browser_initiated()); |
| 235 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | 235 if (AreAllSitesIsolatedForTesting()) { |
| 236 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 236 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 237 } else { | 237 } else { |
| 238 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 238 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 239 } | 239 } |
| 240 | 240 |
| 241 // Have the current RenderFrameHost commit the navigation. | 241 // Have the current RenderFrameHost commit the navigation. |
| 242 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 242 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 243 GetLoaderForNavigationRequest(request)->CallOnResponseStarted( | 243 GetLoaderForNavigationRequest(request)->CallOnResponseStarted( |
| 244 response, MakeEmptyStream(), nullptr); | 244 response, MakeEmptyStream(), nullptr); |
| 245 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | 245 if (AreAllSitesIsolatedForTesting()) { |
| 246 EXPECT_TRUE( | 246 EXPECT_TRUE( |
| 247 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); | 247 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); |
| 248 } else { | 248 } else { |
| 249 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 249 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 250 } | 250 } |
| 251 EXPECT_TRUE(main_test_rfh()->is_loading()); | 251 EXPECT_TRUE(main_test_rfh()->is_loading()); |
| 252 EXPECT_FALSE(node->navigation_request()); | 252 EXPECT_FALSE(node->navigation_request()); |
| 253 | 253 |
| 254 // Commit the navigation. | 254 // Commit the navigation. |
| 255 main_test_rfh()->SendNavigate(0, true, kUrl2); | 255 main_test_rfh()->SendNavigate(0, true, kUrl2); |
| (...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 624 ASSERT_TRUE(request2); | 624 ASSERT_TRUE(request2); |
| 625 EXPECT_EQ(kUrl2, request2->common_params().url); | 625 EXPECT_EQ(kUrl2, request2->common_params().url); |
| 626 EXPECT_FALSE(request2->browser_initiated()); | 626 EXPECT_FALSE(request2->browser_initiated()); |
| 627 EXPECT_TRUE(request2->begin_params().has_user_gesture); | 627 EXPECT_TRUE(request2->begin_params().has_user_gesture); |
| 628 | 628 |
| 629 // Confirm that the first loader got destroyed. | 629 // Confirm that the first loader got destroyed. |
| 630 EXPECT_FALSE(loader1); | 630 EXPECT_FALSE(loader1); |
| 631 | 631 |
| 632 // Confirm that the speculative RenderFrameHost was destroyed in the non | 632 // Confirm that the speculative RenderFrameHost was destroyed in the non |
| 633 // SitePerProcess case. | 633 // SitePerProcess case. |
| 634 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | 634 if (AreAllSitesIsolatedForTesting()) { |
| 635 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 635 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 636 } else { | 636 } else { |
| 637 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 637 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 638 } | 638 } |
| 639 | 639 |
| 640 // Have the RenderFrameHost commit the navigation. | 640 // Have the RenderFrameHost commit the navigation. |
| 641 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 641 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 642 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( | 642 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( |
| 643 response, MakeEmptyStream(), nullptr); | 643 response, MakeEmptyStream(), nullptr); |
| 644 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | 644 if (AreAllSitesIsolatedForTesting()) { |
| 645 EXPECT_TRUE( | 645 EXPECT_TRUE( |
| 646 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); | 646 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); |
| 647 } else { | 647 } else { |
| 648 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 648 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 649 } | 649 } |
| 650 | 650 |
| 651 // Commit the navigation. | 651 // Commit the navigation. |
| 652 main_test_rfh()->SendNavigate(0, true, kUrl2); | 652 main_test_rfh()->SendNavigate(0, true, kUrl2); |
| 653 | 653 |
| 654 // Confirm that the commit corresponds to the new request. | 654 // Confirm that the commit corresponds to the new request. |
| (...skipping 15 matching lines...) Expand all Loading... |
| 670 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 670 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 671 | 671 |
| 672 // Start a renderer-initiated user-initiated navigation to the 1st URL. | 672 // Start a renderer-initiated user-initiated navigation to the 1st URL. |
| 673 process()->sink().ClearMessages(); | 673 process()->sink().ClearMessages(); |
| 674 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl1, true); | 674 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl1, true); |
| 675 NavigationRequest* request1 = node->navigation_request(); | 675 NavigationRequest* request1 = node->navigation_request(); |
| 676 ASSERT_TRUE(request1); | 676 ASSERT_TRUE(request1); |
| 677 EXPECT_EQ(kUrl1, request1->common_params().url); | 677 EXPECT_EQ(kUrl1, request1->common_params().url); |
| 678 EXPECT_FALSE(request1->browser_initiated()); | 678 EXPECT_FALSE(request1->browser_initiated()); |
| 679 EXPECT_TRUE(request1->begin_params().has_user_gesture); | 679 EXPECT_TRUE(request1->begin_params().has_user_gesture); |
| 680 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | 680 if (AreAllSitesIsolatedForTesting()) { |
| 681 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 681 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 682 } else { | 682 } else { |
| 683 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 683 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 684 } | 684 } |
| 685 | 685 |
| 686 // Now receive a renderer-initiated non-user-initiated request. Nothing should | 686 // Now receive a renderer-initiated non-user-initiated request. Nothing should |
| 687 // change. | 687 // change. |
| 688 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); | 688 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); |
| 689 NavigationRequest* request2 = node->navigation_request(); | 689 NavigationRequest* request2 = node->navigation_request(); |
| 690 ASSERT_TRUE(request2); | 690 ASSERT_TRUE(request2); |
| 691 EXPECT_EQ(request1, request2); | 691 EXPECT_EQ(request1, request2); |
| 692 EXPECT_EQ(kUrl1, request2->common_params().url); | 692 EXPECT_EQ(kUrl1, request2->common_params().url); |
| 693 EXPECT_FALSE(request2->browser_initiated()); | 693 EXPECT_FALSE(request2->browser_initiated()); |
| 694 EXPECT_TRUE(request2->begin_params().has_user_gesture); | 694 EXPECT_TRUE(request2->begin_params().has_user_gesture); |
| 695 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | 695 if (AreAllSitesIsolatedForTesting()) { |
| 696 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 696 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 697 } else { | 697 } else { |
| 698 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 698 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 699 } | 699 } |
| 700 | 700 |
| 701 // Have the RenderFrameHost commit the navigation. | 701 // Have the RenderFrameHost commit the navigation. |
| 702 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 702 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 703 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( | 703 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( |
| 704 response, MakeEmptyStream(), nullptr); | 704 response, MakeEmptyStream(), nullptr); |
| 705 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | 705 if (AreAllSitesIsolatedForTesting()) { |
| 706 EXPECT_TRUE( | 706 EXPECT_TRUE( |
| 707 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); | 707 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); |
| 708 } else { | 708 } else { |
| 709 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 709 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 710 } | 710 } |
| 711 | 711 |
| 712 // Commit the navigation. | 712 // Commit the navigation. |
| 713 main_test_rfh()->SendNavigate(0, true, kUrl1); | 713 main_test_rfh()->SendNavigate(0, true, kUrl1); |
| 714 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); | 714 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); |
| 715 } | 715 } |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 776 int32_t site_instance_id_0 = main_test_rfh()->GetSiteInstance()->GetId(); | 776 int32_t site_instance_id_0 = main_test_rfh()->GetSiteInstance()->GetId(); |
| 777 | 777 |
| 778 // Start a renderer-initiated non-user-initiated navigation to the 1st URL. | 778 // Start a renderer-initiated non-user-initiated navigation to the 1st URL. |
| 779 process()->sink().ClearMessages(); | 779 process()->sink().ClearMessages(); |
| 780 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl1, false); | 780 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl1, false); |
| 781 NavigationRequest* request1 = node->navigation_request(); | 781 NavigationRequest* request1 = node->navigation_request(); |
| 782 ASSERT_TRUE(request1); | 782 ASSERT_TRUE(request1); |
| 783 EXPECT_EQ(kUrl1, request1->common_params().url); | 783 EXPECT_EQ(kUrl1, request1->common_params().url); |
| 784 EXPECT_FALSE(request1->browser_initiated()); | 784 EXPECT_FALSE(request1->browser_initiated()); |
| 785 EXPECT_FALSE(request1->begin_params().has_user_gesture); | 785 EXPECT_FALSE(request1->begin_params().has_user_gesture); |
| 786 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | 786 if (AreAllSitesIsolatedForTesting()) { |
| 787 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 787 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 788 } else { | 788 } else { |
| 789 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 789 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 790 } | 790 } |
| 791 base::WeakPtr<TestNavigationURLLoader> loader1 = | 791 base::WeakPtr<TestNavigationURLLoader> loader1 = |
| 792 GetLoaderForNavigationRequest(request1)->AsWeakPtr(); | 792 GetLoaderForNavigationRequest(request1)->AsWeakPtr(); |
| 793 EXPECT_TRUE(loader1); | 793 EXPECT_TRUE(loader1); |
| 794 | 794 |
| 795 // Now receive a 2nd similar request that should replace the current one. | 795 // Now receive a 2nd similar request that should replace the current one. |
| 796 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); | 796 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); |
| 797 NavigationRequest* request2 = node->navigation_request(); | 797 NavigationRequest* request2 = node->navigation_request(); |
| 798 EXPECT_EQ(kUrl2, request2->common_params().url); | 798 EXPECT_EQ(kUrl2, request2->common_params().url); |
| 799 EXPECT_FALSE(request2->browser_initiated()); | 799 EXPECT_FALSE(request2->browser_initiated()); |
| 800 EXPECT_FALSE(request2->begin_params().has_user_gesture); | 800 EXPECT_FALSE(request2->begin_params().has_user_gesture); |
| 801 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | 801 if (AreAllSitesIsolatedForTesting()) { |
| 802 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 802 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 803 } else { | 803 } else { |
| 804 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 804 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 805 } | 805 } |
| 806 | 806 |
| 807 // Confirm that the first loader got destroyed. | 807 // Confirm that the first loader got destroyed. |
| 808 EXPECT_FALSE(loader1); | 808 EXPECT_FALSE(loader1); |
| 809 | 809 |
| 810 // Have the RenderFrameHost commit the navigation. | 810 // Have the RenderFrameHost commit the navigation. |
| 811 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 811 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 812 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( | 812 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( |
| 813 response, MakeEmptyStream(), nullptr); | 813 response, MakeEmptyStream(), nullptr); |
| 814 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | 814 if (AreAllSitesIsolatedForTesting()) { |
| 815 EXPECT_TRUE( | 815 EXPECT_TRUE( |
| 816 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); | 816 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); |
| 817 } else { | 817 } else { |
| 818 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 818 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 819 } | 819 } |
| 820 | 820 |
| 821 // Commit the navigation. | 821 // Commit the navigation. |
| 822 main_test_rfh()->SendNavigate(0, true, kUrl2); | 822 main_test_rfh()->SendNavigate(0, true, kUrl2); |
| 823 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 823 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
| 824 | 824 |
| (...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1234 | 1234 |
| 1235 // The first navigation commits. This should clear up the speculative RFH and | 1235 // The first navigation commits. This should clear up the speculative RFH and |
| 1236 // the ongoing NavigationRequest. | 1236 // the ongoing NavigationRequest. |
| 1237 speculative_rfh->SendNavigate(entry_id, true, kUrl2); | 1237 speculative_rfh->SendNavigate(entry_id, true, kUrl2); |
| 1238 EXPECT_FALSE(node->navigation_request()); | 1238 EXPECT_FALSE(node->navigation_request()); |
| 1239 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 1239 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 1240 EXPECT_EQ(speculative_rfh, main_test_rfh()); | 1240 EXPECT_EQ(speculative_rfh, main_test_rfh()); |
| 1241 } | 1241 } |
| 1242 | 1242 |
| 1243 } // namespace content | 1243 } // namespace content |
| OLD | NEW |