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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 43 void SetUp() override { | 43 void SetUp() override { |
| 44 EnableBrowserSideNavigation(); | 44 EnableBrowserSideNavigation(); |
| 45 RenderViewHostImplTestHarness::SetUp(); | 45 RenderViewHostImplTestHarness::SetUp(); |
| 46 } | 46 } |
| 47 | 47 |
| 48 TestNavigationURLLoader* GetLoaderForNavigationRequest( | 48 TestNavigationURLLoader* GetLoaderForNavigationRequest( |
| 49 NavigationRequest* request) const { | 49 NavigationRequest* request) const { |
| 50 return static_cast<TestNavigationURLLoader*>(request->loader_for_testing()); | 50 return static_cast<TestNavigationURLLoader*>(request->loader_for_testing()); |
| 51 } | 51 } |
| 52 | 52 |
| 53 void RequestNavigation(FrameTreeNode* node, const GURL& url) { | 53 int RequestNavigation(FrameTreeNode* node, const GURL& url) { |
| 54 RequestNavigationWithParameters(node, url, Referrer(), | 54 return RequestNavigationWithParameters(node, url, Referrer(), |
| 55 ui::PAGE_TRANSITION_LINK); | 55 ui::PAGE_TRANSITION_LINK); |
| 56 } | 56 } |
| 57 | 57 |
| 58 void RequestNavigationWithParameters( | 58 int RequestNavigationWithParameters( |
|
Charlie Reis
2015/04/22 05:27:25
Let's put comments on these saying what they're re
Avi (use Gerrit)
2015/04/22 18:31:50
Done.
| |
| 59 FrameTreeNode* node, | 59 FrameTreeNode* node, |
| 60 const GURL& url, | 60 const GURL& url, |
| 61 const Referrer& referrer, | 61 const Referrer& referrer, |
| 62 ui::PageTransition transition_type) { | 62 ui::PageTransition transition_type) { |
| 63 NavigationController::LoadURLParams load_params(url); | 63 NavigationController::LoadURLParams load_params(url); |
| 64 load_params.frame_tree_node_id = node->frame_tree_node_id(); | 64 load_params.frame_tree_node_id = node->frame_tree_node_id(); |
| 65 load_params.referrer = referrer; | 65 load_params.referrer = referrer; |
| 66 load_params.transition_type = transition_type; | 66 load_params.transition_type = transition_type; |
| 67 | 67 |
| 68 controller().LoadURLWithParams(load_params); | 68 controller().LoadURLWithParams(load_params); |
| 69 return controller().GetPendingEntry()->GetUniqueID(); | |
| 69 } | 70 } |
| 70 | 71 |
| 71 TestRenderFrameHost* GetSpeculativeRenderFrameHost(FrameTreeNode* node) { | 72 TestRenderFrameHost* GetSpeculativeRenderFrameHost(FrameTreeNode* node) { |
| 72 return static_cast<TestRenderFrameHost*>( | 73 return static_cast<TestRenderFrameHost*>( |
| 73 node->render_manager()->speculative_render_frame_host_.get()); | 74 node->render_manager()->speculative_render_frame_host_.get()); |
| 74 } | 75 } |
| 75 | 76 |
| 76 // Checks if this RenderFrameHost sent a single FrameMsg_CommitNavigation | 77 // Checks if this RenderFrameHost sent a single FrameMsg_CommitNavigation |
| 77 // since the last clearing of the sink. | 78 // since the last clearing of the sink. |
| 78 // Note: caller must invoke ClearMessages on the sink at some point before | 79 // Note: caller must invoke ClearMessages on the sink at some point before |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 98 // non-live renderer. | 99 // non-live renderer. |
| 99 TEST_F(NavigatorTestWithBrowserSideNavigation, | 100 TEST_F(NavigatorTestWithBrowserSideNavigation, |
| 100 SimpleBrowserInitiatedNavigationFromNonLiveRenderer) { | 101 SimpleBrowserInitiatedNavigationFromNonLiveRenderer) { |
| 101 const GURL kUrl("http://chromium.org/"); | 102 const GURL kUrl("http://chromium.org/"); |
| 102 | 103 |
| 103 EXPECT_FALSE(main_test_rfh()->IsRenderFrameLive()); | 104 EXPECT_FALSE(main_test_rfh()->IsRenderFrameLive()); |
| 104 | 105 |
| 105 // Start a browser-initiated navigation. | 106 // Start a browser-initiated navigation. |
| 106 int32 site_instance_id = main_test_rfh()->GetSiteInstance()->GetId(); | 107 int32 site_instance_id = main_test_rfh()->GetSiteInstance()->GetId(); |
| 107 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 108 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 108 RequestNavigation(node, kUrl); | 109 int entry_id = RequestNavigation(node, kUrl); |
| 109 NavigationRequest* request = node->navigation_request(); | 110 NavigationRequest* request = node->navigation_request(); |
| 110 ASSERT_TRUE(request); | 111 ASSERT_TRUE(request); |
| 111 EXPECT_EQ(kUrl, request->common_params().url); | 112 EXPECT_EQ(kUrl, request->common_params().url); |
| 112 EXPECT_TRUE(request->browser_initiated()); | 113 EXPECT_TRUE(request->browser_initiated()); |
| 113 | 114 |
| 114 // As there's no live renderer the navigation should not wait for a | 115 // As there's no live renderer the navigation should not wait for a |
| 115 // beforeUnload ACK from the renderer and start right away. | 116 // beforeUnload ACK from the renderer and start right away. |
| 116 EXPECT_EQ(NavigationRequest::STARTED, request->state()); | 117 EXPECT_EQ(NavigationRequest::STARTED, request->state()); |
| 117 ASSERT_TRUE(GetLoaderForNavigationRequest(request)); | 118 ASSERT_TRUE(GetLoaderForNavigationRequest(request)); |
| 118 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 119 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 119 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 120 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 120 | 121 |
| 121 // Have the current RenderFrameHost commit the navigation. | 122 // Have the current RenderFrameHost commit the navigation. |
| 122 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 123 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 123 GetLoaderForNavigationRequest(request) | 124 GetLoaderForNavigationRequest(request) |
| 124 ->CallOnResponseStarted(response, MakeEmptyStream()); | 125 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 125 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 126 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 126 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); | 127 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); |
| 127 | 128 |
| 128 // Commit the navigation. | 129 // Commit the navigation. |
| 129 main_test_rfh()->SendNavigate(0, kUrl); | 130 main_test_rfh()->SendNavigate(0, entry_id, true, kUrl); |
| 130 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); | 131 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); |
| 131 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), | 132 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), |
| 132 main_test_rfh()->GetSiteInstance()->GetSiteURL()); | 133 main_test_rfh()->GetSiteInstance()->GetSiteURL()); |
| 133 EXPECT_EQ(kUrl, contents()->GetLastCommittedURL()); | 134 EXPECT_EQ(kUrl, contents()->GetLastCommittedURL()); |
| 134 EXPECT_FALSE(node->navigation_request()); | 135 EXPECT_FALSE(node->navigation_request()); |
| 135 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 136 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 136 | 137 |
| 137 // The main RenderFrameHost should not have been changed, and the renderer | 138 // The main RenderFrameHost should not have been changed, and the renderer |
| 138 // should have been initialized. | 139 // should have been initialized. |
| 139 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); | 140 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 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 |
| 181 // Commit the navigation. | 182 // Commit the navigation. |
| 182 main_test_rfh()->SendNavigate(0, kUrl2); | 183 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); |
| 183 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); | 184 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); |
| 184 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl2), | 185 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl2), |
| 185 main_test_rfh()->GetSiteInstance()->GetSiteURL()); | 186 main_test_rfh()->GetSiteInstance()->GetSiteURL()); |
| 186 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 187 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
| 187 EXPECT_FALSE(node->navigation_request()); | 188 EXPECT_FALSE(node->navigation_request()); |
| 188 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 189 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 189 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 190 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 190 } | 191 } |
| 191 | 192 |
| 192 // PlzNavigate: Test a complete renderer-initiated navigation that should be | 193 // PlzNavigate: Test a complete renderer-initiated navigation that should be |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 217 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 218 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 218 | 219 |
| 219 // Have the current RenderFrameHost commit the navigation. | 220 // Have the current RenderFrameHost commit the navigation. |
| 220 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 221 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 221 GetLoaderForNavigationRequest(request) | 222 GetLoaderForNavigationRequest(request) |
| 222 ->CallOnResponseStarted(response, MakeEmptyStream()); | 223 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 223 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 224 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 224 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); | 225 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); |
| 225 | 226 |
| 226 // Commit the navigation. | 227 // Commit the navigation. |
| 227 main_test_rfh()->SendNavigate(0, kUrl2); | 228 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); |
| 228 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); | 229 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); |
| 229 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 230 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
| 230 EXPECT_FALSE(node->navigation_request()); | 231 EXPECT_FALSE(node->navigation_request()); |
| 231 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 232 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 232 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 233 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 233 | 234 |
| 234 // The SiteInstance did not change. | 235 // The SiteInstance did not change. |
| 235 EXPECT_EQ(site_instance_id_1, main_test_rfh()->GetSiteInstance()->GetId()); | 236 EXPECT_EQ(site_instance_id_1, main_test_rfh()->GetSiteInstance()->GetId()); |
| 236 } | 237 } |
| 237 | 238 |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 407 TEST_F(NavigatorTestWithBrowserSideNavigation, CrossSiteNavigation) { | 408 TEST_F(NavigatorTestWithBrowserSideNavigation, CrossSiteNavigation) { |
| 408 const GURL kUrl1("http://www.chromium.org/"); | 409 const GURL kUrl1("http://www.chromium.org/"); |
| 409 const GURL kUrl2("http://www.google.com/"); | 410 const GURL kUrl2("http://www.google.com/"); |
| 410 | 411 |
| 411 contents()->NavigateAndCommit(kUrl1); | 412 contents()->NavigateAndCommit(kUrl1); |
| 412 RenderFrameHostImpl* initial_rfh = main_test_rfh(); | 413 RenderFrameHostImpl* initial_rfh = main_test_rfh(); |
| 413 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 414 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 414 | 415 |
| 415 // Navigate to a different site. | 416 // Navigate to a different site. |
| 416 process()->sink().ClearMessages(); | 417 process()->sink().ClearMessages(); |
| 417 RequestNavigation(node, kUrl2); | 418 int entry_id = RequestNavigation(node, kUrl2); |
| 418 NavigationRequest* main_request = node->navigation_request(); | 419 NavigationRequest* main_request = node->navigation_request(); |
| 419 ASSERT_TRUE(main_request); | 420 ASSERT_TRUE(main_request); |
| 420 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 421 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 421 | 422 |
| 422 // Receive the beforeUnload ACK. | 423 // Receive the beforeUnload ACK. |
| 423 main_test_rfh()->SendBeforeUnloadACK(true); | 424 main_test_rfh()->SendBeforeUnloadACK(true); |
| 424 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 425 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 425 EXPECT_FALSE(contents()->CrossProcessNavigationPending()); | 426 EXPECT_FALSE(contents()->CrossProcessNavigationPending()); |
| 426 | 427 |
| 427 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 428 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 428 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( | 429 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( |
| 429 response, MakeEmptyStream()); | 430 response, MakeEmptyStream()); |
| 430 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 431 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 431 ASSERT_TRUE(speculative_rfh); | 432 ASSERT_TRUE(speculative_rfh); |
| 432 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 433 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 433 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 434 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 434 EXPECT_TRUE(contents()->CrossProcessNavigationPending()); | 435 EXPECT_TRUE(contents()->CrossProcessNavigationPending()); |
| 435 | 436 |
| 436 speculative_rfh->SendNavigate(0, kUrl2); | 437 speculative_rfh->SendNavigate(0, entry_id, true, kUrl2); |
| 437 | 438 |
| 438 RenderFrameHostImpl* final_rfh = main_test_rfh(); | 439 RenderFrameHostImpl* final_rfh = main_test_rfh(); |
| 439 EXPECT_EQ(speculative_rfh, final_rfh); | 440 EXPECT_EQ(speculative_rfh, final_rfh); |
| 440 EXPECT_NE(initial_rfh, final_rfh); | 441 EXPECT_NE(initial_rfh, final_rfh); |
| 441 EXPECT_TRUE(final_rfh->IsRenderFrameLive()); | 442 EXPECT_TRUE(final_rfh->IsRenderFrameLive()); |
| 442 EXPECT_TRUE(final_rfh->render_view_host()->IsRenderViewLive()); | 443 EXPECT_TRUE(final_rfh->render_view_host()->IsRenderViewLive()); |
| 443 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 444 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 444 } | 445 } |
| 445 | 446 |
| 446 // PlzNavigate: Test that redirects are followed and the speculative | 447 // PlzNavigate: Test that redirects are followed and the speculative |
| 447 // RenderFrameHost logic behaves as expected. | 448 // RenderFrameHost logic behaves as expected. |
| 448 TEST_F(NavigatorTestWithBrowserSideNavigation, RedirectCrossSite) { | 449 TEST_F(NavigatorTestWithBrowserSideNavigation, RedirectCrossSite) { |
| 449 const GURL kUrl1("http://www.chromium.org/"); | 450 const GURL kUrl1("http://www.chromium.org/"); |
| 450 const GURL kUrl2("http://www.google.com/"); | 451 const GURL kUrl2("http://www.google.com/"); |
| 451 | 452 |
| 452 contents()->NavigateAndCommit(kUrl1); | 453 contents()->NavigateAndCommit(kUrl1); |
| 453 RenderFrameHostImpl* rfh = main_test_rfh(); | 454 RenderFrameHostImpl* rfh = main_test_rfh(); |
| 454 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 455 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 455 | 456 |
| 456 // Navigate to a URL on the same site. | 457 // Navigate to a URL on the same site. |
| 457 process()->sink().ClearMessages(); | 458 process()->sink().ClearMessages(); |
| 458 RequestNavigation(node, kUrl1); | 459 int entry_id = RequestNavigation(node, kUrl1); |
| 459 main_test_rfh()->SendBeforeUnloadACK(true); | 460 main_test_rfh()->SendBeforeUnloadACK(true); |
| 460 NavigationRequest* main_request = node->navigation_request(); | 461 NavigationRequest* main_request = node->navigation_request(); |
| 461 ASSERT_TRUE(main_request); | 462 ASSERT_TRUE(main_request); |
| 462 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 463 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 463 | 464 |
| 464 // It then redirects to another site. | 465 // It then redirects to another site. |
| 465 GetLoaderForNavigationRequest(main_request)->SimulateServerRedirect(kUrl2); | 466 GetLoaderForNavigationRequest(main_request)->SimulateServerRedirect(kUrl2); |
| 466 | 467 |
| 467 // The redirect should have been followed. | 468 // The redirect should have been followed. |
| 468 EXPECT_EQ(1, GetLoaderForNavigationRequest(main_request)->redirect_count()); | 469 EXPECT_EQ(1, GetLoaderForNavigationRequest(main_request)->redirect_count()); |
| 469 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 470 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 470 | 471 |
| 471 // Have the RenderFrameHost commit the navigation. | 472 // Have the RenderFrameHost commit the navigation. |
| 472 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 473 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 473 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( | 474 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( |
| 474 response, MakeEmptyStream()); | 475 response, MakeEmptyStream()); |
| 475 TestRenderFrameHost* final_speculative_rfh = | 476 TestRenderFrameHost* final_speculative_rfh = |
| 476 GetSpeculativeRenderFrameHost(node); | 477 GetSpeculativeRenderFrameHost(node); |
| 477 EXPECT_TRUE(final_speculative_rfh); | 478 EXPECT_TRUE(final_speculative_rfh); |
| 478 EXPECT_TRUE(DidRenderFrameHostRequestCommit(final_speculative_rfh)); | 479 EXPECT_TRUE(DidRenderFrameHostRequestCommit(final_speculative_rfh)); |
| 479 | 480 |
| 480 // Commit the navigation. | 481 // Commit the navigation. |
| 481 final_speculative_rfh->SendNavigate(0, kUrl2); | 482 final_speculative_rfh->SendNavigate(0, entry_id, true, kUrl2); |
| 482 RenderFrameHostImpl* final_rfh = main_test_rfh(); | 483 RenderFrameHostImpl* final_rfh = main_test_rfh(); |
| 483 ASSERT_TRUE(final_rfh); | 484 ASSERT_TRUE(final_rfh); |
| 484 EXPECT_NE(rfh, final_rfh); | 485 EXPECT_NE(rfh, final_rfh); |
| 485 EXPECT_EQ(final_speculative_rfh, final_rfh); | 486 EXPECT_EQ(final_speculative_rfh, final_rfh); |
| 486 EXPECT_TRUE(final_rfh->IsRenderFrameLive()); | 487 EXPECT_TRUE(final_rfh->IsRenderFrameLive()); |
| 487 EXPECT_TRUE(final_rfh->render_view_host()->IsRenderViewLive()); | 488 EXPECT_TRUE(final_rfh->render_view_host()->IsRenderViewLive()); |
| 488 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 489 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 489 } | 490 } |
| 490 | 491 |
| 491 // PlzNavigate: Test that a navigation is canceled if another browser-initiated | 492 // PlzNavigate: Test that a navigation is canceled if another browser-initiated |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 516 EXPECT_TRUE(loader1); | 517 EXPECT_TRUE(loader1); |
| 517 | 518 |
| 518 // Confirm a speculative RenderFrameHost was created. | 519 // Confirm a speculative RenderFrameHost was created. |
| 519 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 520 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 520 ASSERT_TRUE(speculative_rfh); | 521 ASSERT_TRUE(speculative_rfh); |
| 521 int32 site_instance_id_1 = speculative_rfh->GetSiteInstance()->GetId(); | 522 int32 site_instance_id_1 = speculative_rfh->GetSiteInstance()->GetId(); |
| 522 EXPECT_EQ(kUrl1_site, speculative_rfh->GetSiteInstance()->GetSiteURL()); | 523 EXPECT_EQ(kUrl1_site, speculative_rfh->GetSiteInstance()->GetSiteURL()); |
| 523 | 524 |
| 524 // Request navigation to the 2nd URL; the NavigationRequest must have been | 525 // Request navigation to the 2nd URL; the NavigationRequest must have been |
| 525 // replaced by a new one with a different URL. | 526 // replaced by a new one with a different URL. |
| 526 RequestNavigation(node, kUrl2); | 527 int entry_id = RequestNavigation(node, kUrl2); |
| 527 main_test_rfh()->SendBeforeUnloadACK(true); | 528 main_test_rfh()->SendBeforeUnloadACK(true); |
| 528 NavigationRequest* request2 = node->navigation_request(); | 529 NavigationRequest* request2 = node->navigation_request(); |
| 529 ASSERT_TRUE(request2); | 530 ASSERT_TRUE(request2); |
| 530 EXPECT_EQ(kUrl2, request2->common_params().url); | 531 EXPECT_EQ(kUrl2, request2->common_params().url); |
| 531 EXPECT_TRUE(request2->browser_initiated()); | 532 EXPECT_TRUE(request2->browser_initiated()); |
| 532 | 533 |
| 533 // Confirm that the first loader got destroyed. | 534 // Confirm that the first loader got destroyed. |
| 534 EXPECT_FALSE(loader1); | 535 EXPECT_FALSE(loader1); |
| 535 | 536 |
| 536 // Confirm that a new speculative RenderFrameHost was created. | 537 // Confirm that a new speculative RenderFrameHost was created. |
| 537 speculative_rfh = GetSpeculativeRenderFrameHost(node); | 538 speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 538 ASSERT_TRUE(speculative_rfh); | 539 ASSERT_TRUE(speculative_rfh); |
| 539 int32 site_instance_id_2 = speculative_rfh->GetSiteInstance()->GetId(); | 540 int32 site_instance_id_2 = speculative_rfh->GetSiteInstance()->GetId(); |
| 540 EXPECT_NE(site_instance_id_1, site_instance_id_2); | 541 EXPECT_NE(site_instance_id_1, site_instance_id_2); |
| 541 | 542 |
| 542 // Have the RenderFrameHost commit the navigation. | 543 // Have the RenderFrameHost commit the navigation. |
| 543 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 544 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 544 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( | 545 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( |
| 545 response, MakeEmptyStream()); | 546 response, MakeEmptyStream()); |
| 546 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 547 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 547 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 548 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 548 | 549 |
| 549 // Commit the navigation. | 550 // Commit the navigation. |
| 550 speculative_rfh->SendNavigate(0, kUrl2); | 551 speculative_rfh->SendNavigate(0, entry_id, true, kUrl2); |
| 551 | 552 |
| 552 // Confirm that the commit corresponds to the new request. | 553 // Confirm that the commit corresponds to the new request. |
| 553 ASSERT_TRUE(main_test_rfh()); | 554 ASSERT_TRUE(main_test_rfh()); |
| 554 EXPECT_EQ(kUrl2_site, main_test_rfh()->GetSiteInstance()->GetSiteURL()); | 555 EXPECT_EQ(kUrl2_site, main_test_rfh()->GetSiteInstance()->GetSiteURL()); |
| 555 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 556 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
| 556 | 557 |
| 557 // Confirm that the committed RenderFrameHost is the latest speculative one. | 558 // Confirm that the committed RenderFrameHost is the latest speculative one. |
| 558 EXPECT_EQ(site_instance_id_2, main_test_rfh()->GetSiteInstance()->GetId()); | 559 EXPECT_EQ(site_instance_id_2, main_test_rfh()->GetSiteInstance()->GetId()); |
| 559 } | 560 } |
| 560 | 561 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 601 // Confirm that the speculative RenderFrameHost was destroyed. | 602 // Confirm that the speculative RenderFrameHost was destroyed. |
| 602 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 603 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 603 | 604 |
| 604 // Have the RenderFrameHost commit the navigation. | 605 // Have the RenderFrameHost commit the navigation. |
| 605 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 606 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 606 GetLoaderForNavigationRequest(request2) | 607 GetLoaderForNavigationRequest(request2) |
| 607 ->CallOnResponseStarted(response, MakeEmptyStream()); | 608 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 608 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 609 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 609 | 610 |
| 610 // Commit the navigation. | 611 // Commit the navigation. |
| 611 main_test_rfh()->SendNavigate(0, kUrl2); | 612 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); |
| 612 | 613 |
| 613 // Confirm that the commit corresponds to the new request. | 614 // Confirm that the commit corresponds to the new request. |
| 614 ASSERT_TRUE(main_test_rfh()); | 615 ASSERT_TRUE(main_test_rfh()); |
| 615 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 616 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
| 616 } | 617 } |
| 617 | 618 |
| 618 // PlzNavigate: Test that a renderer-initiated user-initiated navigation is NOT | 619 // PlzNavigate: Test that a renderer-initiated user-initiated navigation is NOT |
| 619 // canceled if a renderer-initiated non-user-initiated request is issued in the | 620 // canceled if a renderer-initiated non-user-initiated request is issued in the |
| 620 // meantime. | 621 // meantime. |
| 621 TEST_F(NavigatorTestWithBrowserSideNavigation, | 622 TEST_F(NavigatorTestWithBrowserSideNavigation, |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 649 EXPECT_TRUE(request2->begin_params().has_user_gesture); | 650 EXPECT_TRUE(request2->begin_params().has_user_gesture); |
| 650 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 651 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 651 | 652 |
| 652 // Have the RenderFrameHost commit the navigation. | 653 // Have the RenderFrameHost commit the navigation. |
| 653 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 654 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 654 GetLoaderForNavigationRequest(request2) | 655 GetLoaderForNavigationRequest(request2) |
| 655 ->CallOnResponseStarted(response, MakeEmptyStream()); | 656 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 656 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 657 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 657 | 658 |
| 658 // Commit the navigation. | 659 // Commit the navigation. |
| 659 main_test_rfh()->SendNavigate(0, kUrl1); | 660 main_test_rfh()->SendNavigate(1, 0, true, kUrl1); |
| 660 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); | 661 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); |
| 661 } | 662 } |
| 662 | 663 |
| 663 // PlzNavigate: Test that a browser-initiated navigation is NOT canceled if a | 664 // PlzNavigate: Test that a browser-initiated navigation is NOT canceled if a |
| 664 // renderer-initiated non-user-initiated request is issued in the meantime. | 665 // renderer-initiated non-user-initiated request is issued in the meantime. |
| 665 TEST_F(NavigatorTestWithBrowserSideNavigation, | 666 TEST_F(NavigatorTestWithBrowserSideNavigation, |
| 666 RendererNonUserInitiatedNavigationDoesntCancelBrowserInitiated) { | 667 RendererNonUserInitiatedNavigationDoesntCancelBrowserInitiated) { |
| 667 const GURL kUrl0("http://www.wikipedia.org/"); | 668 const GURL kUrl0("http://www.wikipedia.org/"); |
| 668 const GURL kUrl1("http://www.chromium.org/"); | 669 const GURL kUrl1("http://www.chromium.org/"); |
| 669 const GURL kUrl2("http://www.google.com/"); | 670 const GURL kUrl2("http://www.google.com/"); |
| 670 | 671 |
| 671 // Initialization. | 672 // Initialization. |
| 672 contents()->NavigateAndCommit(kUrl0); | 673 contents()->NavigateAndCommit(kUrl0); |
| 673 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 674 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 674 | 675 |
| 675 // Start a browser-initiated navigation to the 1st URL. | 676 // Start a browser-initiated navigation to the 1st URL. |
| 676 process()->sink().ClearMessages(); | 677 process()->sink().ClearMessages(); |
| 677 RequestNavigation(node, kUrl1); | 678 int entry_id = RequestNavigation(node, kUrl1); |
| 678 NavigationRequest* request1 = node->navigation_request(); | 679 NavigationRequest* request1 = node->navigation_request(); |
| 679 ASSERT_TRUE(request1); | 680 ASSERT_TRUE(request1); |
| 680 EXPECT_EQ(kUrl1, request1->common_params().url); | 681 EXPECT_EQ(kUrl1, request1->common_params().url); |
| 681 EXPECT_TRUE(request1->browser_initiated()); | 682 EXPECT_TRUE(request1->browser_initiated()); |
| 682 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 683 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 683 | 684 |
| 684 // Now receive a renderer-initiated non-user-initiated request. Nothing should | 685 // Now receive a renderer-initiated non-user-initiated request. Nothing should |
| 685 // change. | 686 // change. |
| 686 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); | 687 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); |
| 687 NavigationRequest* request2 = node->navigation_request(); | 688 NavigationRequest* request2 = node->navigation_request(); |
| 688 ASSERT_TRUE(request2); | 689 ASSERT_TRUE(request2); |
| 689 EXPECT_EQ(request1, request2); | 690 EXPECT_EQ(request1, request2); |
| 690 EXPECT_EQ(kUrl1, request2->common_params().url); | 691 EXPECT_EQ(kUrl1, request2->common_params().url); |
| 691 EXPECT_TRUE(request2->browser_initiated()); | 692 EXPECT_TRUE(request2->browser_initiated()); |
| 692 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 693 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 693 | 694 |
| 694 // Now receive the beforeUnload ACK from the still ongoing navigation. | 695 // Now receive the beforeUnload ACK from the still ongoing navigation. |
| 695 main_test_rfh()->SendBeforeUnloadACK(true); | 696 main_test_rfh()->SendBeforeUnloadACK(true); |
| 696 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 697 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 697 ASSERT_TRUE(speculative_rfh); | 698 ASSERT_TRUE(speculative_rfh); |
| 698 | 699 |
| 699 // Have the RenderFrameHost commit the navigation. | 700 // Have the RenderFrameHost commit the navigation. |
| 700 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 701 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 701 GetLoaderForNavigationRequest(request2) | 702 GetLoaderForNavigationRequest(request2) |
| 702 ->CallOnResponseStarted(response, MakeEmptyStream()); | 703 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 703 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 704 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 704 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 705 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 705 | 706 |
| 706 // Commit the navigation. | 707 // Commit the navigation. |
| 707 speculative_rfh->SendNavigate(0, kUrl1); | 708 speculative_rfh->SendNavigate(0, entry_id, true, kUrl1); |
| 708 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); | 709 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); |
| 709 } | 710 } |
| 710 | 711 |
| 711 // PlzNavigate: Test that a renderer-initiated non-user-initiated navigation is | 712 // PlzNavigate: Test that a renderer-initiated non-user-initiated navigation is |
| 712 // canceled if a another similar request is issued in the meantime. | 713 // canceled if a another similar request is issued in the meantime. |
| 713 TEST_F(NavigatorTestWithBrowserSideNavigation, | 714 TEST_F(NavigatorTestWithBrowserSideNavigation, |
| 714 RendererNonUserInitiatedNavigationCancelSimilarNavigation) { | 715 RendererNonUserInitiatedNavigationCancelSimilarNavigation) { |
| 715 const GURL kUrl0("http://www.wikipedia.org/"); | 716 const GURL kUrl0("http://www.wikipedia.org/"); |
| 716 const GURL kUrl1("http://www.chromium.org/"); | 717 const GURL kUrl1("http://www.chromium.org/"); |
| 717 const GURL kUrl2("http://www.google.com/"); | 718 const GURL kUrl2("http://www.google.com/"); |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 745 // Confirm that the first loader got destroyed. | 746 // Confirm that the first loader got destroyed. |
| 746 EXPECT_FALSE(loader1); | 747 EXPECT_FALSE(loader1); |
| 747 | 748 |
| 748 // Have the RenderFrameHost commit the navigation. | 749 // Have the RenderFrameHost commit the navigation. |
| 749 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 750 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 750 GetLoaderForNavigationRequest(request2) | 751 GetLoaderForNavigationRequest(request2) |
| 751 ->CallOnResponseStarted(response, MakeEmptyStream()); | 752 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 752 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 753 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 753 | 754 |
| 754 // Commit the navigation. | 755 // Commit the navigation. |
| 755 main_test_rfh()->SendNavigate(0, kUrl2); | 756 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); |
| 756 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 757 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
| 757 | 758 |
| 758 // The SiteInstance did not change. | 759 // The SiteInstance did not change. |
| 759 EXPECT_EQ(site_instance_id_0, main_test_rfh()->GetSiteInstance()->GetId()); | 760 EXPECT_EQ(site_instance_id_0, main_test_rfh()->GetSiteInstance()->GetId()); |
| 760 } | 761 } |
| 761 | 762 |
| 762 // PlzNavigate: Test that a reload navigation is properly signaled to the | 763 // PlzNavigate: Test that a reload navigation is properly signaled to the |
| 763 // RenderFrame when the navigation can commit. A speculative RenderFrameHost | 764 // RenderFrame when the navigation can commit. A speculative RenderFrameHost |
| 764 // should not be created at any step. | 765 // should not be created at any step. |
| 765 TEST_F(NavigatorTestWithBrowserSideNavigation, Reload) { | 766 TEST_F(NavigatorTestWithBrowserSideNavigation, Reload) { |
| 766 const GURL kUrl("http://www.google.com/"); | 767 const GURL kUrl("http://www.google.com/"); |
| 767 contents()->NavigateAndCommit(kUrl); | 768 contents()->NavigateAndCommit(kUrl); |
| 768 | 769 |
| 769 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 770 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 770 controller().Reload(false); | 771 controller().Reload(false); |
| 772 int entry_id = controller().GetPendingEntry()->GetUniqueID(); | |
| 771 // A NavigationRequest should have been generated. | 773 // A NavigationRequest should have been generated. |
| 772 NavigationRequest* main_request = node->navigation_request(); | 774 NavigationRequest* main_request = node->navigation_request(); |
| 773 ASSERT_TRUE(main_request != NULL); | 775 ASSERT_TRUE(main_request != NULL); |
| 774 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD, | 776 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD, |
| 775 main_request->common_params().navigation_type); | 777 main_request->common_params().navigation_type); |
| 776 main_test_rfh()->PrepareForCommit(); | 778 main_test_rfh()->PrepareForCommit(); |
| 777 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 779 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 778 | 780 |
| 779 main_test_rfh()->SendNavigate(0, kUrl); | 781 main_test_rfh()->SendNavigate(0, entry_id, false, kUrl); |
| 780 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 782 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 781 | 783 |
| 782 // Now do a shift+reload. | 784 // Now do a shift+reload. |
| 783 controller().ReloadIgnoringCache(false); | 785 controller().ReloadIgnoringCache(false); |
| 784 // A NavigationRequest should have been generated. | 786 // A NavigationRequest should have been generated. |
| 785 main_request = node->navigation_request(); | 787 main_request = node->navigation_request(); |
| 786 ASSERT_TRUE(main_request != NULL); | 788 ASSERT_TRUE(main_request != NULL); |
| 787 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE, | 789 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE, |
| 788 main_request->common_params().navigation_type); | 790 main_request->common_params().navigation_type); |
| 789 main_test_rfh()->PrepareForCommit(); | 791 main_test_rfh()->PrepareForCommit(); |
| 790 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 792 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 791 } | 793 } |
| 792 | 794 |
| 793 // PlzNavigate: Confirm that a speculative RenderFrameHost is used when | 795 // PlzNavigate: Confirm that a speculative RenderFrameHost is used when |
| 794 // navigating from one site to another. | 796 // navigating from one site to another. |
| 795 TEST_F(NavigatorTestWithBrowserSideNavigation, | 797 TEST_F(NavigatorTestWithBrowserSideNavigation, |
| 796 SpeculativeRendererWorksBaseCase) { | 798 SpeculativeRendererWorksBaseCase) { |
| 797 // Navigate to an initial site. | 799 // Navigate to an initial site. |
| 798 const GURL kUrlInit("http://wikipedia.org/"); | 800 const GURL kUrlInit("http://wikipedia.org/"); |
| 799 contents()->NavigateAndCommit(kUrlInit); | 801 contents()->NavigateAndCommit(kUrlInit); |
| 800 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 802 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 801 | 803 |
| 802 // Begin navigating to another site. | 804 // Begin navigating to another site. |
| 803 const GURL kUrl("http://google.com/"); | 805 const GURL kUrl("http://google.com/"); |
| 804 process()->sink().ClearMessages(); | 806 process()->sink().ClearMessages(); |
| 805 RequestNavigation(node, kUrl); | 807 int entry_id = RequestNavigation(node, kUrl); |
| 806 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 808 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 807 | 809 |
| 808 // Receive the beforeUnload ACK. | 810 // Receive the beforeUnload ACK. |
| 809 main_test_rfh()->SendBeforeUnloadACK(true); | 811 main_test_rfh()->SendBeforeUnloadACK(true); |
| 810 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 812 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 811 ASSERT_TRUE(speculative_rfh); | 813 ASSERT_TRUE(speculative_rfh); |
| 812 EXPECT_NE(speculative_rfh, main_test_rfh()); | 814 EXPECT_NE(speculative_rfh, main_test_rfh()); |
| 813 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), | 815 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), |
| 814 speculative_rfh->GetSiteInstance()->GetSiteURL()); | 816 speculative_rfh->GetSiteInstance()->GetSiteURL()); |
| 815 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 817 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 816 int32 site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); | 818 int32 site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); |
| 817 | 819 |
| 818 // Ask Navigator to commit the navigation by simulating a call to | 820 // Ask Navigator to commit the navigation by simulating a call to |
| 819 // OnResponseStarted. | 821 // OnResponseStarted. |
| 820 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 822 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 821 GetLoaderForNavigationRequest(node->navigation_request()) | 823 GetLoaderForNavigationRequest(node->navigation_request()) |
| 822 ->CallOnResponseStarted(response, MakeEmptyStream()); | 824 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 823 speculative_rfh = GetSpeculativeRenderFrameHost(node); | 825 speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 824 ASSERT_TRUE(speculative_rfh); | 826 ASSERT_TRUE(speculative_rfh); |
| 825 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 827 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 826 EXPECT_EQ(site_instance_id, speculative_rfh->GetSiteInstance()->GetId()); | 828 EXPECT_EQ(site_instance_id, speculative_rfh->GetSiteInstance()->GetId()); |
| 827 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 829 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 828 | 830 |
| 829 // Invoke OnDidCommitProvisionalLoad. | 831 // Invoke OnDidCommitProvisionalLoad. |
| 830 speculative_rfh->SendNavigate(0, kUrl); | 832 speculative_rfh->SendNavigate(0, entry_id, true, kUrl); |
| 831 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); | 833 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); |
| 832 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 834 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 833 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 835 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 834 } | 836 } |
| 835 | 837 |
| 836 // PlzNavigate: Confirm that a speculative RenderFrameHost is thrown away when | 838 // PlzNavigate: Confirm that a speculative RenderFrameHost is thrown away when |
| 837 // the final URL's site differs from the initial one due to redirects. | 839 // the final URL's site differs from the initial one due to redirects. |
| 838 TEST_F(NavigatorTestWithBrowserSideNavigation, | 840 TEST_F(NavigatorTestWithBrowserSideNavigation, |
| 839 SpeculativeRendererDiscardedAfterRedirectToAnotherSite) { | 841 SpeculativeRendererDiscardedAfterRedirectToAnotherSite) { |
| 840 // Navigate to an initial site. | 842 // Navigate to an initial site. |
| 841 const GURL kUrlInit("http://wikipedia.org/"); | 843 const GURL kUrlInit("http://wikipedia.org/"); |
| 842 contents()->NavigateAndCommit(kUrlInit); | 844 contents()->NavigateAndCommit(kUrlInit); |
| 843 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 845 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 844 int32 init_site_instance_id = main_test_rfh()->GetSiteInstance()->GetId(); | 846 int32 init_site_instance_id = main_test_rfh()->GetSiteInstance()->GetId(); |
| 845 | 847 |
| 846 // Begin navigating to another site. | 848 // Begin navigating to another site. |
| 847 const GURL kUrl("http://google.com/"); | 849 const GURL kUrl("http://google.com/"); |
| 848 process()->sink().ClearMessages(); | 850 process()->sink().ClearMessages(); |
| 849 RequestNavigation(node, kUrl); | 851 int entry_id = RequestNavigation(node, kUrl); |
| 850 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 852 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 851 | 853 |
| 852 // Receive the beforeUnload ACK. | 854 // Receive the beforeUnload ACK. |
| 853 main_test_rfh()->SendBeforeUnloadACK(true); | 855 main_test_rfh()->SendBeforeUnloadACK(true); |
| 854 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 856 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 855 int32 site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); | 857 int32 site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); |
| 856 EXPECT_NE(init_site_instance_id, site_instance_id); | 858 EXPECT_NE(init_site_instance_id, site_instance_id); |
| 857 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); | 859 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); |
| 858 ASSERT_TRUE(speculative_rfh); | 860 ASSERT_TRUE(speculative_rfh); |
| 859 EXPECT_NE(speculative_rfh, main_test_rfh()); | 861 EXPECT_NE(speculative_rfh, main_test_rfh()); |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 888 // Once commit happens the speculative RenderFrameHost is updated to match the | 890 // Once commit happens the speculative RenderFrameHost is updated to match the |
| 889 // known final SiteInstance. | 891 // known final SiteInstance. |
| 890 ASSERT_TRUE(speculative_rfh); | 892 ASSERT_TRUE(speculative_rfh); |
| 891 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrlRedirect), | 893 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrlRedirect), |
| 892 speculative_rfh->GetSiteInstance()->GetSiteURL()); | 894 speculative_rfh->GetSiteInstance()->GetSiteURL()); |
| 893 int32 redirect_site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); | 895 int32 redirect_site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); |
| 894 EXPECT_NE(init_site_instance_id, redirect_site_instance_id); | 896 EXPECT_NE(init_site_instance_id, redirect_site_instance_id); |
| 895 EXPECT_NE(site_instance_id, redirect_site_instance_id); | 897 EXPECT_NE(site_instance_id, redirect_site_instance_id); |
| 896 | 898 |
| 897 // Invoke OnDidCommitProvisionalLoad. | 899 // Invoke OnDidCommitProvisionalLoad. |
| 898 speculative_rfh->SendNavigate(0, kUrlRedirect); | 900 speculative_rfh->SendNavigate(0, entry_id, true, kUrlRedirect); |
| 899 | 901 |
| 900 // Check that the speculative RenderFrameHost was swapped in. | 902 // Check that the speculative RenderFrameHost was swapped in. |
| 901 EXPECT_EQ(redirect_site_instance_id, | 903 EXPECT_EQ(redirect_site_instance_id, |
| 902 main_test_rfh()->GetSiteInstance()->GetId()); | 904 main_test_rfh()->GetSiteInstance()->GetId()); |
| 903 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 905 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 904 } | 906 } |
| 905 | 907 |
| 906 // PlzNavigate: Verify that a previously swapped out RenderFrameHost is | 908 // PlzNavigate: Verify that a previously swapped out RenderFrameHost is |
| 907 // correctly reused when spawning a speculative RenderFrameHost in a navigation | 909 // correctly reused when spawning a speculative RenderFrameHost in a navigation |
| 908 // using the same SiteInstance. | 910 // using the same SiteInstance. |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 924 contents()->NavigateAndCommit(kUrl2); | 926 contents()->NavigateAndCommit(kUrl2); |
| 925 ASSERT_NE(rfh1, main_test_rfh()); | 927 ASSERT_NE(rfh1, main_test_rfh()); |
| 926 EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state()); | 928 EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state()); |
| 927 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); | 929 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); |
| 928 EXPECT_TRUE(rfhm->IsOnSwappedOutList(rfh1)); | 930 EXPECT_TRUE(rfhm->IsOnSwappedOutList(rfh1)); |
| 929 | 931 |
| 930 // Now go back to the initial site so that the swapped out RenderFrameHost | 932 // Now go back to the initial site so that the swapped out RenderFrameHost |
| 931 // should be reused. | 933 // should be reused. |
| 932 process()->sink().ClearMessages(); | 934 process()->sink().ClearMessages(); |
| 933 rfh1->GetProcess()->sink().ClearMessages(); | 935 rfh1->GetProcess()->sink().ClearMessages(); |
| 934 RequestNavigation(node, kUrl1); | 936 int entry_id = RequestNavigation(node, kUrl1); |
| 935 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 937 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 936 | 938 |
| 937 main_test_rfh()->SendBeforeUnloadACK(true); | 939 main_test_rfh()->SendBeforeUnloadACK(true); |
| 938 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); | 940 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); |
| 939 EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT, | 941 EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT, |
| 940 GetSpeculativeRenderFrameHost(node)->rfh_state()); | 942 GetSpeculativeRenderFrameHost(node)->rfh_state()); |
| 941 | 943 |
| 942 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 944 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 943 GetLoaderForNavigationRequest(node->navigation_request()) | 945 GetLoaderForNavigationRequest(node->navigation_request()) |
| 944 ->CallOnResponseStarted(response, MakeEmptyStream()); | 946 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 945 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); | 947 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); |
| 946 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, | 948 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, |
| 947 GetSpeculativeRenderFrameHost(node)->rfh_state()); | 949 GetSpeculativeRenderFrameHost(node)->rfh_state()); |
| 948 EXPECT_TRUE(DidRenderFrameHostRequestCommit(rfh1)); | 950 EXPECT_TRUE(DidRenderFrameHostRequestCommit(rfh1)); |
| 949 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 951 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 950 | 952 |
| 951 rfh1->SendNavigate(1, kUrl1); | 953 rfh1->SendNavigate(1, entry_id, true, kUrl1); |
| 952 EXPECT_EQ(rfh1, main_test_rfh()); | 954 EXPECT_EQ(rfh1, main_test_rfh()); |
| 953 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state()); | 955 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state()); |
| 954 EXPECT_FALSE(rfhm->IsOnSwappedOutList(rfh1)); | 956 EXPECT_FALSE(rfhm->IsOnSwappedOutList(rfh1)); |
| 955 } | 957 } |
| 956 | 958 |
| 957 // PlzNavigate: Verify that data urls are properly handled. | 959 // PlzNavigate: Verify that data urls are properly handled. |
| 958 TEST_F(NavigatorTestWithBrowserSideNavigation, DataUrls) { | 960 TEST_F(NavigatorTestWithBrowserSideNavigation, DataUrls) { |
| 959 const GURL kUrl1("http://wikipedia.org/"); | 961 const GURL kUrl1("http://wikipedia.org/"); |
| 960 const GURL kUrl2("data:text/html,test"); | 962 const GURL kUrl2("data:text/html,test"); |
| 961 | 963 |
| 962 // Navigate to an initial site. | 964 // Navigate to an initial site. |
| 963 contents()->NavigateAndCommit(kUrl1); | 965 contents()->NavigateAndCommit(kUrl1); |
| 964 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 966 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 965 | 967 |
| 966 // Navigate to a data url. | 968 // Navigate to a data url. |
| 967 RequestNavigation(node, kUrl2); | 969 int entry_id = RequestNavigation(node, kUrl2); |
| 968 NavigationRequest* navigation_request = node->navigation_request(); | 970 NavigationRequest* navigation_request = node->navigation_request(); |
| 969 ASSERT_TRUE(navigation_request); | 971 ASSERT_TRUE(navigation_request); |
| 970 EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE, | 972 EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE, |
| 971 navigation_request->state()); | 973 navigation_request->state()); |
| 972 main_test_rfh()->SendBeforeUnloadACK(true); | 974 main_test_rfh()->SendBeforeUnloadACK(true); |
| 973 | 975 |
| 974 // The request should not have been sent to the IO thread but committed | 976 // The request should not have been sent to the IO thread but committed |
| 975 // immediately. | 977 // immediately. |
| 976 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, | 978 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, |
| 977 navigation_request->state()); | 979 navigation_request->state()); |
| 978 EXPECT_FALSE(navigation_request->loader_for_testing()); | 980 EXPECT_FALSE(navigation_request->loader_for_testing()); |
| 979 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 981 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 980 ASSERT_TRUE(speculative_rfh); | 982 ASSERT_TRUE(speculative_rfh); |
| 981 speculative_rfh->SendNavigate(0, kUrl2); | 983 speculative_rfh->SendNavigate(0, entry_id, true, kUrl2); |
| 982 EXPECT_EQ(main_test_rfh(), speculative_rfh); | 984 EXPECT_EQ(main_test_rfh(), speculative_rfh); |
| 983 | 985 |
| 984 // Go back to the initial site. | 986 // Go back to the initial site. |
| 985 contents()->NavigateAndCommit(kUrl1); | 987 contents()->NavigateAndCommit(kUrl1); |
| 986 | 988 |
| 987 // Do a renderer-initiated navigation to a data url. The request should not be | 989 // Do a renderer-initiated navigation to a data url. The request should not be |
| 988 // sent to the IO thread, nor committed. | 990 // sent to the IO thread, nor committed. |
| 989 TestRenderFrameHost* main_rfh = main_test_rfh(); | 991 TestRenderFrameHost* main_rfh = main_test_rfh(); |
| 990 main_rfh->SendRendererInitiatedNavigationRequest(kUrl2, true); | 992 main_rfh->SendRendererInitiatedNavigationRequest(kUrl2, true); |
| 991 navigation_request = node->navigation_request(); | 993 navigation_request = node->navigation_request(); |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1119 | 1121 |
| 1120 SiteInstance* converted_instance_2 = | 1122 SiteInstance* converted_instance_2 = |
| 1121 ConvertToSiteInstance(rfhm, descriptor, unrelated_instance.get()); | 1123 ConvertToSiteInstance(rfhm, descriptor, unrelated_instance.get()); |
| 1122 // Should return |unrelated_instance| because its site matches and it is | 1124 // Should return |unrelated_instance| because its site matches and it is |
| 1123 // unrelated to the current SiteInstance. | 1125 // unrelated to the current SiteInstance. |
| 1124 EXPECT_EQ(unrelated_instance.get(), converted_instance_2); | 1126 EXPECT_EQ(unrelated_instance.get(), converted_instance_2); |
| 1125 } | 1127 } |
| 1126 } | 1128 } |
| 1127 | 1129 |
| 1128 } // namespace content | 1130 } // namespace content |
| OLD | NEW |