Chromium Code Reviews| 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 |