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 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
154 } | 154 } |
155 | 155 |
156 // PlzNavigate: Test a complete renderer-initiated navigation starting with a | 156 // PlzNavigate: Test a complete renderer-initiated navigation starting with a |
157 // non-live renderer. | 157 // non-live renderer. |
158 TEST_F(NavigatorTestWithBrowserSideNavigation, | 158 TEST_F(NavigatorTestWithBrowserSideNavigation, |
159 SimpleRendererInitiatedNavigation) { | 159 SimpleRendererInitiatedNavigation) { |
160 const GURL kUrl("http://chromium.org/"); | 160 const GURL kUrl("http://chromium.org/"); |
161 | 161 |
162 EXPECT_FALSE(main_test_rfh()->IsRenderFrameLive()); | 162 EXPECT_FALSE(main_test_rfh()->IsRenderFrameLive()); |
163 | 163 |
164 // Start a renderer-initiated navigation. | 164 // Start a renderer-initiated non-user-initiated navigation. |
165 main_test_rfh()->SendBeginNavigationWithURL(kUrl); | 165 main_test_rfh()->SendBeginNavigationWithURL(kUrl, false); |
166 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 166 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
167 NavigationRequest* request = GetNavigationRequestForFrameTreeNode(node); | 167 NavigationRequest* request = GetNavigationRequestForFrameTreeNode(node); |
168 ASSERT_TRUE(request); | 168 ASSERT_TRUE(request); |
169 EXPECT_EQ(kUrl, request->common_params().url); | 169 EXPECT_EQ(kUrl, request->common_params().url); |
170 EXPECT_FALSE(request->browser_initiated()); | 170 EXPECT_FALSE(request->browser_initiated()); |
171 EXPECT_FALSE(request->begin_params().has_user_gesture); | |
171 EXPECT_EQ(NavigationRequest::STARTED, request->state()); | 172 EXPECT_EQ(NavigationRequest::STARTED, request->state()); |
172 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 173 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
173 | 174 |
174 // Have the current RenderFrameHost commit the navigation. | 175 // Have the current RenderFrameHost commit the navigation. |
175 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 176 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
176 GetLoaderForNavigationRequest(request) | 177 GetLoaderForNavigationRequest(request) |
177 ->CallOnResponseStarted(response, MakeEmptyStream()); | 178 ->CallOnResponseStarted(response, MakeEmptyStream()); |
178 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 179 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
179 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); | 180 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); |
180 | 181 |
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
508 | 509 |
509 // Confirm that the commit corresponds to the new request. | 510 // Confirm that the commit corresponds to the new request. |
510 ASSERT_TRUE(main_test_rfh()); | 511 ASSERT_TRUE(main_test_rfh()); |
511 EXPECT_EQ(kUrl2_site, main_test_rfh()->GetSiteInstance()->GetSiteURL()); | 512 EXPECT_EQ(kUrl2_site, main_test_rfh()->GetSiteInstance()->GetSiteURL()); |
512 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 513 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
513 | 514 |
514 // Confirm that the committed RFH is the latest speculative one. | 515 // Confirm that the committed RFH is the latest speculative one. |
515 EXPECT_EQ(site_instance_id_2, main_test_rfh()->GetSiteInstance()->GetId()); | 516 EXPECT_EQ(site_instance_id_2, main_test_rfh()->GetSiteInstance()->GetId()); |
516 } | 517 } |
517 | 518 |
519 // PlzNavigate: Test that a navigation is canceled if another renderer-initiated | |
520 // user-initiated request has been issued in the meantime. | |
521 TEST_F(NavigatorTestWithBrowserSideNavigation, | |
522 RendererUserInitiatedNavigationCancel) { | |
523 const GURL kUrl0("http://www.wikipedia.org/"); | |
524 const GURL kUrl1("http://www.chromium.org/"); | |
525 const GURL kUrl2("http://www.google.com/"); | |
526 | |
527 // Initialization. | |
528 contents()->NavigateAndCommit(kUrl0); | |
529 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | |
530 | |
531 // Start a browser-initiated navigation to the 1st URL and receive its | |
532 // beoforeUnload ACK. | |
clamy
2015/02/11 17:22:30
nit: s/beoforeUnload/beforeUnload
carlosk
2015/02/12 12:21:06
Done.
| |
533 SendRequestNavigation(node, kUrl1); | |
534 main_test_rfh()->SendBeforeUnloadACK(true); | |
535 NavigationRequest* request1 = GetNavigationRequestForFrameTreeNode(node); | |
536 ASSERT_TRUE(request1); | |
537 EXPECT_EQ(kUrl1, request1->common_params().url); | |
538 EXPECT_TRUE(request1->browser_initiated()); | |
539 base::WeakPtr<TestNavigationURLLoader> loader1 = | |
540 GetLoaderForNavigationRequest(request1)->AsWeakPtr(); | |
541 | |
542 // Confirm a speculative RFH was created. | |
543 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | |
544 ASSERT_TRUE(speculative_rfh); | |
545 int32 site_instance_id_1 = speculative_rfh->GetSiteInstance()->GetId(); | |
546 | |
547 // Now receive a renderer-initiated user-initiated request. It should replace | |
548 // the current NavigationRequest. | |
549 main_test_rfh()->SendBeginNavigationWithURL(kUrl2, true); | |
550 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node); | |
551 ASSERT_TRUE(request2); | |
552 EXPECT_EQ(kUrl2, request2->common_params().url); | |
553 EXPECT_FALSE(request2->browser_initiated()); | |
554 EXPECT_TRUE(request2->begin_params().has_user_gesture); | |
clamy
2015/02/11 17:22:30
Maybe add a check that loader1 was properly destro
carlosk
2015/02/12 12:21:06
Yes and done.
| |
555 | |
556 // Confirm that a new speculative RFH was created. | |
557 speculative_rfh = GetSpeculativeRenderFrameHost(node); | |
558 ASSERT_TRUE(speculative_rfh); | |
559 int32 site_instance_id_2 = speculative_rfh->GetSiteInstance()->GetId(); | |
560 EXPECT_NE(site_instance_id_1, site_instance_id_2); | |
561 } | |
562 | |
563 // PlzNavigate: Test that a user-initiated navigation is NOT canceled if a | |
564 // renderer-initiated non-user-initiated request is issued in the meantime. | |
565 TEST_F(NavigatorTestWithBrowserSideNavigation, | |
566 RendererNonUserInitiatedNavigationDoesntCancel) { | |
567 const GURL kUrl0("http://www.wikipedia.org/"); | |
568 const GURL kUrl1("http://www.chromium.org/"); | |
569 const GURL kUrl2("http://www.google.com/"); | |
570 | |
571 // Initialization. | |
572 contents()->NavigateAndCommit(kUrl0); | |
573 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | |
574 | |
575 // Start a renderer-initiated user-initiated navigation to the 1st URL. | |
576 main_test_rfh()->SendBeginNavigationWithURL(kUrl1, true); | |
577 NavigationRequest* request = GetNavigationRequestForFrameTreeNode(node); | |
578 ASSERT_TRUE(request); | |
579 EXPECT_EQ(kUrl1, request->common_params().url); | |
580 EXPECT_FALSE(request->browser_initiated()); | |
581 EXPECT_TRUE(request->begin_params().has_user_gesture); | |
582 | |
583 // Now receive a renderer-initiated non-user-initiated request. Nothing should | |
584 // change. | |
585 main_test_rfh()->SendBeginNavigationWithURL(kUrl2, false); | |
586 ASSERT_EQ(request, GetNavigationRequestForFrameTreeNode(node)); | |
587 EXPECT_EQ(kUrl1, request->common_params().url); | |
588 EXPECT_FALSE(request->browser_initiated()); | |
589 EXPECT_TRUE(request->begin_params().has_user_gesture); | |
clamy
2015/02/11 17:22:30
Could you also expend this test to check that a br
carlosk
2015/02/12 12:21:06
Done. As a new test.
| |
590 } | |
591 | |
592 // PlzNavigate: Test that a renderer-initiated non-user-initiated navigation is | |
593 // canceled if a another similar request is issued in the meantime. | |
594 TEST_F(NavigatorTestWithBrowserSideNavigation, | |
595 RendererNonUserInitiatedNavigationCancelSimilarNavigation) { | |
596 const GURL kUrl0("http://www.wikipedia.org/"); | |
597 const GURL kUrl1("http://www.chromium.org/"); | |
598 const GURL kUrl2("http://www.google.com/"); | |
599 | |
600 // Initialization. | |
601 contents()->NavigateAndCommit(kUrl0); | |
602 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | |
603 | |
604 // Start a renderer-initiated non-user-initiated navigation to the 1st URL. | |
605 main_test_rfh()->SendBeginNavigationWithURL(kUrl1, false); | |
606 NavigationRequest* request1 = GetNavigationRequestForFrameTreeNode(node); | |
607 ASSERT_TRUE(request1); | |
608 EXPECT_EQ(kUrl1, request1->common_params().url); | |
609 EXPECT_FALSE(request1->browser_initiated()); | |
610 EXPECT_FALSE(request1->begin_params().has_user_gesture); | |
611 | |
612 // Now receive a 2nd similar request that should replace the current one. | |
613 main_test_rfh()->SendBeginNavigationWithURL(kUrl2, false); | |
614 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node); | |
615 EXPECT_EQ(kUrl2, request2->common_params().url); | |
616 EXPECT_FALSE(request2->browser_initiated()); | |
617 EXPECT_FALSE(request2->begin_params().has_user_gesture); | |
618 } | |
619 | |
518 // PlzNavigate: Test that a reload navigation is properly signaled to the | 620 // PlzNavigate: Test that a reload navigation is properly signaled to the |
519 // RenderFrame when the navigation can commit. A speculative RenderFrameHost | 621 // RenderFrame when the navigation can commit. A speculative RenderFrameHost |
520 // should not be created at any step. | 622 // should not be created at any step. |
521 TEST_F(NavigatorTestWithBrowserSideNavigation, Reload) { | 623 TEST_F(NavigatorTestWithBrowserSideNavigation, Reload) { |
522 const GURL kUrl("http://www.google.com/"); | 624 const GURL kUrl("http://www.google.com/"); |
523 contents()->NavigateAndCommit(kUrl); | 625 contents()->NavigateAndCommit(kUrl); |
524 | 626 |
525 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 627 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
526 SendRequestNavigationWithParameters( | 628 SendRequestNavigationWithParameters( |
527 node, kUrl, Referrer(), ui::PAGE_TRANSITION_LINK, | 629 node, kUrl, Referrer(), ui::PAGE_TRANSITION_LINK, |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
709 EXPECT_TRUE(DidRenderFrameHostRequestCommit(rfh1)); | 811 EXPECT_TRUE(DidRenderFrameHostRequestCommit(rfh1)); |
710 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 812 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
711 | 813 |
712 rfh1->SendNavigate(1, kUrl1); | 814 rfh1->SendNavigate(1, kUrl1); |
713 EXPECT_EQ(rfh1, main_test_rfh()); | 815 EXPECT_EQ(rfh1, main_test_rfh()); |
714 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state()); | 816 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state()); |
715 EXPECT_FALSE(rfhm->IsOnSwappedOutList(rfh1)); | 817 EXPECT_FALSE(rfhm->IsOnSwappedOutList(rfh1)); |
716 } | 818 } |
717 | 819 |
718 } // namespace content | 820 } // namespace content |
OLD | NEW |