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 RequestNavigationWithParameters(node, url, Referrer(), |
55 ui::PAGE_TRANSITION_LINK); | 55 ui::PAGE_TRANSITION_LINK); |
56 return controller().GetPendingEntry()->GetUniqueID(); | |
clamy
2015/04/10 12:05:44
Should the return come from RequestNavigationWithP
Avi (use Gerrit)
2015/04/13 22:42:48
Done.
| |
56 } | 57 } |
57 | 58 |
58 void RequestNavigationWithParameters( | 59 void RequestNavigationWithParameters( |
59 FrameTreeNode* node, | 60 FrameTreeNode* node, |
60 const GURL& url, | 61 const GURL& url, |
61 const Referrer& referrer, | 62 const Referrer& referrer, |
62 ui::PageTransition transition_type) { | 63 ui::PageTransition transition_type) { |
63 NavigationController::LoadURLParams load_params(url); | 64 NavigationController::LoadURLParams load_params(url); |
64 load_params.frame_tree_node_id = node->frame_tree_node_id(); | 65 load_params.frame_tree_node_id = node->frame_tree_node_id(); |
65 load_params.referrer = referrer; | 66 load_params.referrer = referrer; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
106 // non-live renderer. | 107 // non-live renderer. |
107 TEST_F(NavigatorTestWithBrowserSideNavigation, | 108 TEST_F(NavigatorTestWithBrowserSideNavigation, |
108 SimpleBrowserInitiatedNavigationFromNonLiveRenderer) { | 109 SimpleBrowserInitiatedNavigationFromNonLiveRenderer) { |
109 const GURL kUrl("http://chromium.org/"); | 110 const GURL kUrl("http://chromium.org/"); |
110 | 111 |
111 EXPECT_FALSE(main_test_rfh()->IsRenderFrameLive()); | 112 EXPECT_FALSE(main_test_rfh()->IsRenderFrameLive()); |
112 | 113 |
113 // Start a browser-initiated navigation. | 114 // Start a browser-initiated navigation. |
114 int32 site_instance_id = main_test_rfh()->GetSiteInstance()->GetId(); | 115 int32 site_instance_id = main_test_rfh()->GetSiteInstance()->GetId(); |
115 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 116 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
116 RequestNavigation(node, kUrl); | 117 int entry_id = RequestNavigation(node, kUrl); |
117 NavigationRequest* request = GetNavigationRequestForFrameTreeNode(node); | 118 NavigationRequest* request = GetNavigationRequestForFrameTreeNode(node); |
118 ASSERT_TRUE(request); | 119 ASSERT_TRUE(request); |
119 EXPECT_EQ(kUrl, request->common_params().url); | 120 EXPECT_EQ(kUrl, request->common_params().url); |
120 EXPECT_TRUE(request->browser_initiated()); | 121 EXPECT_TRUE(request->browser_initiated()); |
121 | 122 |
122 // As there's no live renderer the navigation should not wait for a | 123 // As there's no live renderer the navigation should not wait for a |
123 // beforeUnload ACK from the renderer and start right away. | 124 // beforeUnload ACK from the renderer and start right away. |
124 EXPECT_EQ(NavigationRequest::STARTED, request->state()); | 125 EXPECT_EQ(NavigationRequest::STARTED, request->state()); |
125 ASSERT_TRUE(GetLoaderForNavigationRequest(request)); | 126 ASSERT_TRUE(GetLoaderForNavigationRequest(request)); |
126 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 127 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
127 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 128 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
128 | 129 |
129 // Have the current RenderFrameHost commit the navigation. | 130 // Have the current RenderFrameHost commit the navigation. |
130 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 131 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
131 GetLoaderForNavigationRequest(request) | 132 GetLoaderForNavigationRequest(request) |
132 ->CallOnResponseStarted(response, MakeEmptyStream()); | 133 ->CallOnResponseStarted(response, MakeEmptyStream()); |
133 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 134 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
134 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); | 135 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); |
135 | 136 |
136 // Commit the navigation. | 137 // Commit the navigation. |
137 main_test_rfh()->SendNavigate(0, kUrl); | 138 main_test_rfh()->SendNavigate(0, entry_id, true, kUrl); |
138 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); | 139 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); |
139 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), | 140 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), |
140 main_test_rfh()->GetSiteInstance()->GetSiteURL()); | 141 main_test_rfh()->GetSiteInstance()->GetSiteURL()); |
141 EXPECT_EQ(kUrl, contents()->GetLastCommittedURL()); | 142 EXPECT_EQ(kUrl, contents()->GetLastCommittedURL()); |
142 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node)); | 143 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node)); |
143 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 144 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
144 | 145 |
145 // The main RenderFrameHost should not have been changed, and the renderer | 146 // The main RenderFrameHost should not have been changed, and the renderer |
146 // should have been initialized. | 147 // should have been initialized. |
147 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); | 148 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
180 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 181 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
181 | 182 |
182 // Have the current RenderFrameHost commit the navigation. | 183 // Have the current RenderFrameHost commit the navigation. |
183 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 184 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
184 GetLoaderForNavigationRequest(request) | 185 GetLoaderForNavigationRequest(request) |
185 ->CallOnResponseStarted(response, MakeEmptyStream()); | 186 ->CallOnResponseStarted(response, MakeEmptyStream()); |
186 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 187 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
187 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); | 188 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); |
188 | 189 |
189 // Commit the navigation. | 190 // Commit the navigation. |
190 main_test_rfh()->SendNavigate(0, kUrl2); | 191 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); |
191 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); | 192 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); |
192 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl2), | 193 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl2), |
193 main_test_rfh()->GetSiteInstance()->GetSiteURL()); | 194 main_test_rfh()->GetSiteInstance()->GetSiteURL()); |
194 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 195 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
195 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node)); | 196 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node)); |
196 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 197 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
197 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 198 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
198 } | 199 } |
199 | 200 |
200 // PlzNavigate: Test a complete renderer-initiated navigation that should be | 201 // PlzNavigate: Test a complete renderer-initiated navigation that should be |
(...skipping 24 matching lines...) Expand all Loading... | |
225 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 226 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
226 | 227 |
227 // Have the current RenderFrameHost commit the navigation. | 228 // Have the current RenderFrameHost commit the navigation. |
228 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 229 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
229 GetLoaderForNavigationRequest(request) | 230 GetLoaderForNavigationRequest(request) |
230 ->CallOnResponseStarted(response, MakeEmptyStream()); | 231 ->CallOnResponseStarted(response, MakeEmptyStream()); |
231 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 232 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
232 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); | 233 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); |
233 | 234 |
234 // Commit the navigation. | 235 // Commit the navigation. |
235 main_test_rfh()->SendNavigate(0, kUrl2); | 236 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); |
236 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); | 237 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); |
237 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 238 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
238 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node)); | 239 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node)); |
239 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 240 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
240 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 241 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
241 | 242 |
242 // The SiteInstance did not change. | 243 // The SiteInstance did not change. |
243 EXPECT_EQ(site_instance_id_1, main_test_rfh()->GetSiteInstance()->GetId()); | 244 EXPECT_EQ(site_instance_id_1, main_test_rfh()->GetSiteInstance()->GetId()); |
244 } | 245 } |
245 | 246 |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
417 TEST_F(NavigatorTestWithBrowserSideNavigation, CrossSiteNavigation) { | 418 TEST_F(NavigatorTestWithBrowserSideNavigation, CrossSiteNavigation) { |
418 const GURL kUrl1("http://www.chromium.org/"); | 419 const GURL kUrl1("http://www.chromium.org/"); |
419 const GURL kUrl2("http://www.google.com/"); | 420 const GURL kUrl2("http://www.google.com/"); |
420 | 421 |
421 contents()->NavigateAndCommit(kUrl1); | 422 contents()->NavigateAndCommit(kUrl1); |
422 RenderFrameHostImpl* initial_rfh = main_test_rfh(); | 423 RenderFrameHostImpl* initial_rfh = main_test_rfh(); |
423 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 424 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
424 | 425 |
425 // Navigate to a different site. | 426 // Navigate to a different site. |
426 process()->sink().ClearMessages(); | 427 process()->sink().ClearMessages(); |
427 RequestNavigation(node, kUrl2); | 428 int entry_id = RequestNavigation(node, kUrl2); |
428 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); | 429 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); |
429 ASSERT_TRUE(main_request); | 430 ASSERT_TRUE(main_request); |
430 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 431 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
431 | 432 |
432 // Receive the beforeUnload ACK. | 433 // Receive the beforeUnload ACK. |
433 main_test_rfh()->SendBeforeUnloadACK(true); | 434 main_test_rfh()->SendBeforeUnloadACK(true); |
434 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 435 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
435 | 436 |
436 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 437 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
437 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( | 438 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( |
438 response, MakeEmptyStream()); | 439 response, MakeEmptyStream()); |
439 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 440 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
440 ASSERT_TRUE(speculative_rfh); | 441 ASSERT_TRUE(speculative_rfh); |
441 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 442 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
442 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 443 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
443 | 444 |
444 speculative_rfh->SendNavigate(0, kUrl2); | 445 speculative_rfh->SendNavigate(0, entry_id, true, kUrl2); |
445 | 446 |
446 RenderFrameHostImpl* final_rfh = main_test_rfh(); | 447 RenderFrameHostImpl* final_rfh = main_test_rfh(); |
447 EXPECT_EQ(speculative_rfh, final_rfh); | 448 EXPECT_EQ(speculative_rfh, final_rfh); |
448 EXPECT_NE(initial_rfh, final_rfh); | 449 EXPECT_NE(initial_rfh, final_rfh); |
449 EXPECT_TRUE(final_rfh->IsRenderFrameLive()); | 450 EXPECT_TRUE(final_rfh->IsRenderFrameLive()); |
450 EXPECT_TRUE(final_rfh->render_view_host()->IsRenderViewLive()); | 451 EXPECT_TRUE(final_rfh->render_view_host()->IsRenderViewLive()); |
451 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 452 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
452 } | 453 } |
453 | 454 |
454 // PlzNavigate: Test that redirects are followed and the speculative | 455 // PlzNavigate: Test that redirects are followed and the speculative |
455 // RenderFrameHost logic behaves as expected. | 456 // RenderFrameHost logic behaves as expected. |
456 TEST_F(NavigatorTestWithBrowserSideNavigation, RedirectCrossSite) { | 457 TEST_F(NavigatorTestWithBrowserSideNavigation, RedirectCrossSite) { |
457 const GURL kUrl1("http://www.chromium.org/"); | 458 const GURL kUrl1("http://www.chromium.org/"); |
458 const GURL kUrl2("http://www.google.com/"); | 459 const GURL kUrl2("http://www.google.com/"); |
459 | 460 |
460 contents()->NavigateAndCommit(kUrl1); | 461 contents()->NavigateAndCommit(kUrl1); |
461 RenderFrameHostImpl* rfh = main_test_rfh(); | 462 RenderFrameHostImpl* rfh = main_test_rfh(); |
462 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 463 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
463 | 464 |
464 // Navigate to a URL on the same site. | 465 // Navigate to a URL on the same site. |
465 process()->sink().ClearMessages(); | 466 process()->sink().ClearMessages(); |
466 RequestNavigation(node, kUrl1); | 467 int entry_id = RequestNavigation(node, kUrl1); |
467 main_test_rfh()->SendBeforeUnloadACK(true); | 468 main_test_rfh()->SendBeforeUnloadACK(true); |
468 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); | 469 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); |
469 ASSERT_TRUE(main_request); | 470 ASSERT_TRUE(main_request); |
470 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 471 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
471 | 472 |
472 // It then redirects to another site. | 473 // It then redirects to another site. |
473 GetLoaderForNavigationRequest(main_request)->SimulateServerRedirect(kUrl2); | 474 GetLoaderForNavigationRequest(main_request)->SimulateServerRedirect(kUrl2); |
474 | 475 |
475 // The redirect should have been followed. | 476 // The redirect should have been followed. |
476 EXPECT_EQ(1, GetLoaderForNavigationRequest(main_request)->redirect_count()); | 477 EXPECT_EQ(1, GetLoaderForNavigationRequest(main_request)->redirect_count()); |
477 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 478 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
478 | 479 |
479 // Have the RenderFrameHost commit the navigation. | 480 // Have the RenderFrameHost commit the navigation. |
480 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 481 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
481 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( | 482 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( |
482 response, MakeEmptyStream()); | 483 response, MakeEmptyStream()); |
483 TestRenderFrameHost* final_speculative_rfh = | 484 TestRenderFrameHost* final_speculative_rfh = |
484 GetSpeculativeRenderFrameHost(node); | 485 GetSpeculativeRenderFrameHost(node); |
485 EXPECT_TRUE(final_speculative_rfh); | 486 EXPECT_TRUE(final_speculative_rfh); |
486 EXPECT_TRUE(DidRenderFrameHostRequestCommit(final_speculative_rfh)); | 487 EXPECT_TRUE(DidRenderFrameHostRequestCommit(final_speculative_rfh)); |
487 | 488 |
488 // Commit the navigation. | 489 // Commit the navigation. |
489 final_speculative_rfh->SendNavigate(0, kUrl2); | 490 final_speculative_rfh->SendNavigate(0, entry_id, true, kUrl2); |
490 RenderFrameHostImpl* final_rfh = main_test_rfh(); | 491 RenderFrameHostImpl* final_rfh = main_test_rfh(); |
491 ASSERT_TRUE(final_rfh); | 492 ASSERT_TRUE(final_rfh); |
492 EXPECT_NE(rfh, final_rfh); | 493 EXPECT_NE(rfh, final_rfh); |
493 EXPECT_EQ(final_speculative_rfh, final_rfh); | 494 EXPECT_EQ(final_speculative_rfh, final_rfh); |
494 EXPECT_TRUE(final_rfh->IsRenderFrameLive()); | 495 EXPECT_TRUE(final_rfh->IsRenderFrameLive()); |
495 EXPECT_TRUE(final_rfh->render_view_host()->IsRenderViewLive()); | 496 EXPECT_TRUE(final_rfh->render_view_host()->IsRenderViewLive()); |
496 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 497 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
497 } | 498 } |
498 | 499 |
499 // PlzNavigate: Test that a navigation is canceled if another browser-initiated | 500 // PlzNavigate: Test that a navigation is canceled if another browser-initiated |
(...skipping 24 matching lines...) Expand all Loading... | |
524 EXPECT_TRUE(loader1); | 525 EXPECT_TRUE(loader1); |
525 | 526 |
526 // Confirm a speculative RenderFrameHost was created. | 527 // Confirm a speculative RenderFrameHost was created. |
527 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 528 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
528 ASSERT_TRUE(speculative_rfh); | 529 ASSERT_TRUE(speculative_rfh); |
529 int32 site_instance_id_1 = speculative_rfh->GetSiteInstance()->GetId(); | 530 int32 site_instance_id_1 = speculative_rfh->GetSiteInstance()->GetId(); |
530 EXPECT_EQ(kUrl1_site, speculative_rfh->GetSiteInstance()->GetSiteURL()); | 531 EXPECT_EQ(kUrl1_site, speculative_rfh->GetSiteInstance()->GetSiteURL()); |
531 | 532 |
532 // Request navigation to the 2nd URL; the NavigationRequest must have been | 533 // Request navigation to the 2nd URL; the NavigationRequest must have been |
533 // replaced by a new one with a different URL. | 534 // replaced by a new one with a different URL. |
534 RequestNavigation(node, kUrl2); | 535 int entry_id = RequestNavigation(node, kUrl2); |
535 main_test_rfh()->SendBeforeUnloadACK(true); | 536 main_test_rfh()->SendBeforeUnloadACK(true); |
536 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node); | 537 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node); |
537 ASSERT_TRUE(request2); | 538 ASSERT_TRUE(request2); |
538 EXPECT_EQ(kUrl2, request2->common_params().url); | 539 EXPECT_EQ(kUrl2, request2->common_params().url); |
539 EXPECT_TRUE(request2->browser_initiated()); | 540 EXPECT_TRUE(request2->browser_initiated()); |
540 | 541 |
541 // Confirm that the first loader got destroyed. | 542 // Confirm that the first loader got destroyed. |
542 EXPECT_FALSE(loader1); | 543 EXPECT_FALSE(loader1); |
543 | 544 |
544 // Confirm that a new speculative RenderFrameHost was created. | 545 // Confirm that a new speculative RenderFrameHost was created. |
545 speculative_rfh = GetSpeculativeRenderFrameHost(node); | 546 speculative_rfh = GetSpeculativeRenderFrameHost(node); |
546 ASSERT_TRUE(speculative_rfh); | 547 ASSERT_TRUE(speculative_rfh); |
547 int32 site_instance_id_2 = speculative_rfh->GetSiteInstance()->GetId(); | 548 int32 site_instance_id_2 = speculative_rfh->GetSiteInstance()->GetId(); |
548 EXPECT_NE(site_instance_id_1, site_instance_id_2); | 549 EXPECT_NE(site_instance_id_1, site_instance_id_2); |
549 | 550 |
550 // Have the RenderFrameHost commit the navigation. | 551 // Have the RenderFrameHost commit the navigation. |
551 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 552 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
552 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( | 553 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( |
553 response, MakeEmptyStream()); | 554 response, MakeEmptyStream()); |
554 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 555 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
555 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 556 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
556 | 557 |
557 // Commit the navigation. | 558 // Commit the navigation. |
558 speculative_rfh->SendNavigate(0, kUrl2); | 559 speculative_rfh->SendNavigate(0, entry_id, true, kUrl2); |
559 | 560 |
560 // Confirm that the commit corresponds to the new request. | 561 // Confirm that the commit corresponds to the new request. |
561 ASSERT_TRUE(main_test_rfh()); | 562 ASSERT_TRUE(main_test_rfh()); |
562 EXPECT_EQ(kUrl2_site, main_test_rfh()->GetSiteInstance()->GetSiteURL()); | 563 EXPECT_EQ(kUrl2_site, main_test_rfh()->GetSiteInstance()->GetSiteURL()); |
563 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 564 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
564 | 565 |
565 // Confirm that the committed RenderFrameHost is the latest speculative one. | 566 // Confirm that the committed RenderFrameHost is the latest speculative one. |
566 EXPECT_EQ(site_instance_id_2, main_test_rfh()->GetSiteInstance()->GetId()); | 567 EXPECT_EQ(site_instance_id_2, main_test_rfh()->GetSiteInstance()->GetId()); |
567 } | 568 } |
568 | 569 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
609 // Confirm that the speculative RenderFrameHost was destroyed. | 610 // Confirm that the speculative RenderFrameHost was destroyed. |
610 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 611 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
611 | 612 |
612 // Have the RenderFrameHost commit the navigation. | 613 // Have the RenderFrameHost commit the navigation. |
613 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 614 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
614 GetLoaderForNavigationRequest(request2) | 615 GetLoaderForNavigationRequest(request2) |
615 ->CallOnResponseStarted(response, MakeEmptyStream()); | 616 ->CallOnResponseStarted(response, MakeEmptyStream()); |
616 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 617 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
617 | 618 |
618 // Commit the navigation. | 619 // Commit the navigation. |
619 main_test_rfh()->SendNavigate(0, kUrl2); | 620 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); |
620 | 621 |
621 // Confirm that the commit corresponds to the new request. | 622 // Confirm that the commit corresponds to the new request. |
622 ASSERT_TRUE(main_test_rfh()); | 623 ASSERT_TRUE(main_test_rfh()); |
623 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 624 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
624 } | 625 } |
625 | 626 |
626 // PlzNavigate: Test that a renderer-initiated user-initiated navigation is NOT | 627 // PlzNavigate: Test that a renderer-initiated user-initiated navigation is NOT |
627 // canceled if a renderer-initiated non-user-initiated request is issued in the | 628 // canceled if a renderer-initiated non-user-initiated request is issued in the |
628 // meantime. | 629 // meantime. |
629 TEST_F(NavigatorTestWithBrowserSideNavigation, | 630 TEST_F(NavigatorTestWithBrowserSideNavigation, |
(...skipping 27 matching lines...) Expand all Loading... | |
657 EXPECT_TRUE(request2->begin_params().has_user_gesture); | 658 EXPECT_TRUE(request2->begin_params().has_user_gesture); |
658 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 659 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
659 | 660 |
660 // Have the RenderFrameHost commit the navigation. | 661 // Have the RenderFrameHost commit the navigation. |
661 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 662 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
662 GetLoaderForNavigationRequest(request2) | 663 GetLoaderForNavigationRequest(request2) |
663 ->CallOnResponseStarted(response, MakeEmptyStream()); | 664 ->CallOnResponseStarted(response, MakeEmptyStream()); |
664 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 665 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
665 | 666 |
666 // Commit the navigation. | 667 // Commit the navigation. |
667 main_test_rfh()->SendNavigate(0, kUrl1); | 668 main_test_rfh()->SendNavigate(1, 0, true, kUrl1); |
668 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); | 669 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); |
669 } | 670 } |
670 | 671 |
671 // PlzNavigate: Test that a browser-initiated navigation is NOT canceled if a | 672 // PlzNavigate: Test that a browser-initiated navigation is NOT canceled if a |
672 // renderer-initiated non-user-initiated request is issued in the meantime. | 673 // renderer-initiated non-user-initiated request is issued in the meantime. |
673 TEST_F(NavigatorTestWithBrowserSideNavigation, | 674 TEST_F(NavigatorTestWithBrowserSideNavigation, |
674 RendererNonUserInitiatedNavigationDoesntCancelBrowserInitiated) { | 675 RendererNonUserInitiatedNavigationDoesntCancelBrowserInitiated) { |
675 const GURL kUrl0("http://www.wikipedia.org/"); | 676 const GURL kUrl0("http://www.wikipedia.org/"); |
676 const GURL kUrl1("http://www.chromium.org/"); | 677 const GURL kUrl1("http://www.chromium.org/"); |
677 const GURL kUrl2("http://www.google.com/"); | 678 const GURL kUrl2("http://www.google.com/"); |
678 | 679 |
679 // Initialization. | 680 // Initialization. |
680 contents()->NavigateAndCommit(kUrl0); | 681 contents()->NavigateAndCommit(kUrl0); |
681 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 682 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
682 | 683 |
683 // Start a browser-initiated navigation to the 1st URL. | 684 // Start a browser-initiated navigation to the 1st URL. |
684 process()->sink().ClearMessages(); | 685 process()->sink().ClearMessages(); |
685 RequestNavigation(node, kUrl1); | 686 int entry_id = RequestNavigation(node, kUrl1); |
686 NavigationRequest* request1 = GetNavigationRequestForFrameTreeNode(node); | 687 NavigationRequest* request1 = GetNavigationRequestForFrameTreeNode(node); |
687 ASSERT_TRUE(request1); | 688 ASSERT_TRUE(request1); |
688 EXPECT_EQ(kUrl1, request1->common_params().url); | 689 EXPECT_EQ(kUrl1, request1->common_params().url); |
689 EXPECT_TRUE(request1->browser_initiated()); | 690 EXPECT_TRUE(request1->browser_initiated()); |
690 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 691 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
691 | 692 |
692 // Now receive a renderer-initiated non-user-initiated request. Nothing should | 693 // Now receive a renderer-initiated non-user-initiated request. Nothing should |
693 // change. | 694 // change. |
694 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); | 695 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); |
695 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node); | 696 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node); |
696 ASSERT_TRUE(request2); | 697 ASSERT_TRUE(request2); |
697 EXPECT_EQ(request1, request2); | 698 EXPECT_EQ(request1, request2); |
698 EXPECT_EQ(kUrl1, request2->common_params().url); | 699 EXPECT_EQ(kUrl1, request2->common_params().url); |
699 EXPECT_TRUE(request2->browser_initiated()); | 700 EXPECT_TRUE(request2->browser_initiated()); |
700 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 701 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
701 | 702 |
702 // Now receive the beforeUnload ACK from the still ongoing navigation. | 703 // Now receive the beforeUnload ACK from the still ongoing navigation. |
703 main_test_rfh()->SendBeforeUnloadACK(true); | 704 main_test_rfh()->SendBeforeUnloadACK(true); |
704 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 705 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
705 ASSERT_TRUE(speculative_rfh); | 706 ASSERT_TRUE(speculative_rfh); |
706 | 707 |
707 // Have the RenderFrameHost commit the navigation. | 708 // Have the RenderFrameHost commit the navigation. |
708 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 709 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
709 GetLoaderForNavigationRequest(request2) | 710 GetLoaderForNavigationRequest(request2) |
710 ->CallOnResponseStarted(response, MakeEmptyStream()); | 711 ->CallOnResponseStarted(response, MakeEmptyStream()); |
711 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 712 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
712 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 713 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
713 | 714 |
714 // Commit the navigation. | 715 // Commit the navigation. |
715 speculative_rfh->SendNavigate(0, kUrl1); | 716 speculative_rfh->SendNavigate(0, entry_id, true, kUrl1); |
716 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); | 717 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); |
717 } | 718 } |
718 | 719 |
719 // PlzNavigate: Test that a renderer-initiated non-user-initiated navigation is | 720 // PlzNavigate: Test that a renderer-initiated non-user-initiated navigation is |
720 // canceled if a another similar request is issued in the meantime. | 721 // canceled if a another similar request is issued in the meantime. |
721 TEST_F(NavigatorTestWithBrowserSideNavigation, | 722 TEST_F(NavigatorTestWithBrowserSideNavigation, |
722 RendererNonUserInitiatedNavigationCancelSimilarNavigation) { | 723 RendererNonUserInitiatedNavigationCancelSimilarNavigation) { |
723 const GURL kUrl0("http://www.wikipedia.org/"); | 724 const GURL kUrl0("http://www.wikipedia.org/"); |
724 const GURL kUrl1("http://www.chromium.org/"); | 725 const GURL kUrl1("http://www.chromium.org/"); |
725 const GURL kUrl2("http://www.google.com/"); | 726 const GURL kUrl2("http://www.google.com/"); |
(...skipping 27 matching lines...) Expand all Loading... | |
753 // Confirm that the first loader got destroyed. | 754 // Confirm that the first loader got destroyed. |
754 EXPECT_FALSE(loader1); | 755 EXPECT_FALSE(loader1); |
755 | 756 |
756 // Have the RenderFrameHost commit the navigation. | 757 // Have the RenderFrameHost commit the navigation. |
757 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 758 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
758 GetLoaderForNavigationRequest(request2) | 759 GetLoaderForNavigationRequest(request2) |
759 ->CallOnResponseStarted(response, MakeEmptyStream()); | 760 ->CallOnResponseStarted(response, MakeEmptyStream()); |
760 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 761 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
761 | 762 |
762 // Commit the navigation. | 763 // Commit the navigation. |
763 main_test_rfh()->SendNavigate(0, kUrl2); | 764 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); |
764 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 765 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
765 | 766 |
766 // The SiteInstance did not change. | 767 // The SiteInstance did not change. |
767 EXPECT_EQ(site_instance_id_0, main_test_rfh()->GetSiteInstance()->GetId()); | 768 EXPECT_EQ(site_instance_id_0, main_test_rfh()->GetSiteInstance()->GetId()); |
768 } | 769 } |
769 | 770 |
770 // PlzNavigate: Test that a reload navigation is properly signaled to the | 771 // PlzNavigate: Test that a reload navigation is properly signaled to the |
771 // RenderFrame when the navigation can commit. A speculative RenderFrameHost | 772 // RenderFrame when the navigation can commit. A speculative RenderFrameHost |
772 // should not be created at any step. | 773 // should not be created at any step. |
773 TEST_F(NavigatorTestWithBrowserSideNavigation, Reload) { | 774 TEST_F(NavigatorTestWithBrowserSideNavigation, Reload) { |
774 const GURL kUrl("http://www.google.com/"); | 775 const GURL kUrl("http://www.google.com/"); |
775 contents()->NavigateAndCommit(kUrl); | 776 contents()->NavigateAndCommit(kUrl); |
776 | 777 |
777 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 778 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
778 controller().Reload(false); | 779 controller().Reload(false); |
780 int entry_id = controller().GetPendingEntry()->GetUniqueID(); | |
779 // A NavigationRequest should have been generated. | 781 // A NavigationRequest should have been generated. |
780 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); | 782 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); |
781 ASSERT_TRUE(main_request != NULL); | 783 ASSERT_TRUE(main_request != NULL); |
782 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD, | 784 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD, |
783 main_request->common_params().navigation_type); | 785 main_request->common_params().navigation_type); |
784 main_test_rfh()->PrepareForCommit(); | 786 main_test_rfh()->PrepareForCommit(); |
785 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 787 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
786 | 788 |
787 main_test_rfh()->SendNavigate(0, kUrl); | 789 main_test_rfh()->SendNavigate(0, entry_id, false, kUrl); |
788 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 790 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
789 | 791 |
790 // Now do a shift+reload. | 792 // Now do a shift+reload. |
791 controller().ReloadIgnoringCache(false); | 793 controller().ReloadIgnoringCache(false); |
792 // A NavigationRequest should have been generated. | 794 // A NavigationRequest should have been generated. |
793 main_request = GetNavigationRequestForFrameTreeNode(node); | 795 main_request = GetNavigationRequestForFrameTreeNode(node); |
794 ASSERT_TRUE(main_request != NULL); | 796 ASSERT_TRUE(main_request != NULL); |
795 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE, | 797 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE, |
796 main_request->common_params().navigation_type); | 798 main_request->common_params().navigation_type); |
797 main_test_rfh()->PrepareForCommit(); | 799 main_test_rfh()->PrepareForCommit(); |
798 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 800 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
799 } | 801 } |
800 | 802 |
801 // PlzNavigate: Confirm that a speculative RenderFrameHost is used when | 803 // PlzNavigate: Confirm that a speculative RenderFrameHost is used when |
802 // navigating from one site to another. | 804 // navigating from one site to another. |
803 TEST_F(NavigatorTestWithBrowserSideNavigation, | 805 TEST_F(NavigatorTestWithBrowserSideNavigation, |
804 SpeculativeRendererWorksBaseCase) { | 806 SpeculativeRendererWorksBaseCase) { |
805 // Navigate to an initial site. | 807 // Navigate to an initial site. |
806 const GURL kUrlInit("http://wikipedia.org/"); | 808 const GURL kUrlInit("http://wikipedia.org/"); |
807 contents()->NavigateAndCommit(kUrlInit); | 809 contents()->NavigateAndCommit(kUrlInit); |
808 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 810 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
809 | 811 |
810 // Begin navigating to another site. | 812 // Begin navigating to another site. |
811 const GURL kUrl("http://google.com/"); | 813 const GURL kUrl("http://google.com/"); |
812 process()->sink().ClearMessages(); | 814 process()->sink().ClearMessages(); |
813 RequestNavigation(node, kUrl); | 815 int entry_id = RequestNavigation(node, kUrl); |
814 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 816 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
815 | 817 |
816 // Receive the beforeUnload ACK. | 818 // Receive the beforeUnload ACK. |
817 main_test_rfh()->SendBeforeUnloadACK(true); | 819 main_test_rfh()->SendBeforeUnloadACK(true); |
818 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 820 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
819 ASSERT_TRUE(speculative_rfh); | 821 ASSERT_TRUE(speculative_rfh); |
820 EXPECT_NE(speculative_rfh, main_test_rfh()); | 822 EXPECT_NE(speculative_rfh, main_test_rfh()); |
821 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), | 823 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), |
822 speculative_rfh->GetSiteInstance()->GetSiteURL()); | 824 speculative_rfh->GetSiteInstance()->GetSiteURL()); |
823 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 825 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
824 int32 site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); | 826 int32 site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); |
825 | 827 |
826 // Ask Navigator to commit the navigation by simulating a call to | 828 // Ask Navigator to commit the navigation by simulating a call to |
827 // OnResponseStarted. | 829 // OnResponseStarted. |
828 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 830 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
829 GetLoaderForNavigationRequest(GetNavigationRequestForFrameTreeNode(node)) | 831 GetLoaderForNavigationRequest(GetNavigationRequestForFrameTreeNode(node)) |
830 ->CallOnResponseStarted(response, MakeEmptyStream()); | 832 ->CallOnResponseStarted(response, MakeEmptyStream()); |
831 speculative_rfh = GetSpeculativeRenderFrameHost(node); | 833 speculative_rfh = GetSpeculativeRenderFrameHost(node); |
832 ASSERT_TRUE(speculative_rfh); | 834 ASSERT_TRUE(speculative_rfh); |
833 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 835 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
834 EXPECT_EQ(site_instance_id, speculative_rfh->GetSiteInstance()->GetId()); | 836 EXPECT_EQ(site_instance_id, speculative_rfh->GetSiteInstance()->GetId()); |
835 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 837 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
836 | 838 |
837 // Invoke OnDidCommitProvisionalLoad. | 839 // Invoke OnDidCommitProvisionalLoad. |
838 speculative_rfh->SendNavigate(0, kUrl); | 840 speculative_rfh->SendNavigate(0, entry_id, true, kUrl); |
839 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); | 841 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); |
840 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 842 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
841 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 843 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
842 } | 844 } |
843 | 845 |
844 // PlzNavigate: Confirm that a speculative RenderFrameHost is thrown away when | 846 // PlzNavigate: Confirm that a speculative RenderFrameHost is thrown away when |
845 // the final URL's site differs from the initial one due to redirects. | 847 // the final URL's site differs from the initial one due to redirects. |
846 TEST_F(NavigatorTestWithBrowserSideNavigation, | 848 TEST_F(NavigatorTestWithBrowserSideNavigation, |
847 SpeculativeRendererDiscardedAfterRedirectToAnotherSite) { | 849 SpeculativeRendererDiscardedAfterRedirectToAnotherSite) { |
848 // Navigate to an initial site. | 850 // Navigate to an initial site. |
849 const GURL kUrlInit("http://wikipedia.org/"); | 851 const GURL kUrlInit("http://wikipedia.org/"); |
850 contents()->NavigateAndCommit(kUrlInit); | 852 contents()->NavigateAndCommit(kUrlInit); |
851 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 853 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
852 int32 init_site_instance_id = main_test_rfh()->GetSiteInstance()->GetId(); | 854 int32 init_site_instance_id = main_test_rfh()->GetSiteInstance()->GetId(); |
853 | 855 |
854 // Begin navigating to another site. | 856 // Begin navigating to another site. |
855 const GURL kUrl("http://google.com/"); | 857 const GURL kUrl("http://google.com/"); |
856 process()->sink().ClearMessages(); | 858 process()->sink().ClearMessages(); |
857 RequestNavigation(node, kUrl); | 859 int entry_id = RequestNavigation(node, kUrl); |
858 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 860 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
859 | 861 |
860 // Receive the beforeUnload ACK. | 862 // Receive the beforeUnload ACK. |
861 main_test_rfh()->SendBeforeUnloadACK(true); | 863 main_test_rfh()->SendBeforeUnloadACK(true); |
862 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 864 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
863 int32 site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); | 865 int32 site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); |
864 EXPECT_NE(init_site_instance_id, site_instance_id); | 866 EXPECT_NE(init_site_instance_id, site_instance_id); |
865 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); | 867 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); |
866 ASSERT_TRUE(speculative_rfh); | 868 ASSERT_TRUE(speculative_rfh); |
867 EXPECT_NE(speculative_rfh, main_test_rfh()); | 869 EXPECT_NE(speculative_rfh, main_test_rfh()); |
(...skipping 28 matching lines...) Expand all Loading... | |
896 // Once commit happens the speculative RenderFrameHost is updated to match the | 898 // Once commit happens the speculative RenderFrameHost is updated to match the |
897 // known final SiteInstance. | 899 // known final SiteInstance. |
898 ASSERT_TRUE(speculative_rfh); | 900 ASSERT_TRUE(speculative_rfh); |
899 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrlRedirect), | 901 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrlRedirect), |
900 speculative_rfh->GetSiteInstance()->GetSiteURL()); | 902 speculative_rfh->GetSiteInstance()->GetSiteURL()); |
901 int32 redirect_site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); | 903 int32 redirect_site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); |
902 EXPECT_NE(init_site_instance_id, redirect_site_instance_id); | 904 EXPECT_NE(init_site_instance_id, redirect_site_instance_id); |
903 EXPECT_NE(site_instance_id, redirect_site_instance_id); | 905 EXPECT_NE(site_instance_id, redirect_site_instance_id); |
904 | 906 |
905 // Invoke OnDidCommitProvisionalLoad. | 907 // Invoke OnDidCommitProvisionalLoad. |
906 speculative_rfh->SendNavigate(0, kUrlRedirect); | 908 speculative_rfh->SendNavigate(0, entry_id, true, kUrlRedirect); |
907 | 909 |
908 // Check that the speculative RenderFrameHost was swapped in. | 910 // Check that the speculative RenderFrameHost was swapped in. |
909 EXPECT_EQ(redirect_site_instance_id, | 911 EXPECT_EQ(redirect_site_instance_id, |
910 main_test_rfh()->GetSiteInstance()->GetId()); | 912 main_test_rfh()->GetSiteInstance()->GetId()); |
911 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 913 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
912 } | 914 } |
913 | 915 |
914 // PlzNavigate: Verify that a previously swapped out RenderFrameHost is | 916 // PlzNavigate: Verify that a previously swapped out RenderFrameHost is |
915 // correctly reused when spawning a speculative RenderFrameHost in a navigation | 917 // correctly reused when spawning a speculative RenderFrameHost in a navigation |
916 // using the same SiteInstance. | 918 // using the same SiteInstance. |
(...skipping 17 matching lines...) Expand all Loading... | |
934 EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state()); | 936 EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state()); |
935 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); | 937 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); |
936 EXPECT_TRUE(rfhm->IsOnSwappedOutList(rfh1)); | 938 EXPECT_TRUE(rfhm->IsOnSwappedOutList(rfh1)); |
937 | 939 |
938 // Now go back to the initial site so that the swapped out RenderFrameHost | 940 // Now go back to the initial site so that the swapped out RenderFrameHost |
939 // should be reused. | 941 // should be reused. |
940 process()->sink().ClearMessages(); | 942 process()->sink().ClearMessages(); |
941 static_cast<MockRenderProcessHost*>(rfh1->GetProcess()) | 943 static_cast<MockRenderProcessHost*>(rfh1->GetProcess()) |
942 ->sink() | 944 ->sink() |
943 .ClearMessages(); | 945 .ClearMessages(); |
944 RequestNavigation(node, kUrl1); | 946 int entry_id = RequestNavigation(node, kUrl1); |
945 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 947 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
946 | 948 |
947 main_test_rfh()->SendBeforeUnloadACK(true); | 949 main_test_rfh()->SendBeforeUnloadACK(true); |
948 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); | 950 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); |
949 EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT, | 951 EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT, |
950 GetSpeculativeRenderFrameHost(node)->rfh_state()); | 952 GetSpeculativeRenderFrameHost(node)->rfh_state()); |
951 | 953 |
952 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 954 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
953 GetLoaderForNavigationRequest(GetNavigationRequestForFrameTreeNode(node)) | 955 GetLoaderForNavigationRequest(GetNavigationRequestForFrameTreeNode(node)) |
954 ->CallOnResponseStarted(response, MakeEmptyStream()); | 956 ->CallOnResponseStarted(response, MakeEmptyStream()); |
955 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); | 957 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); |
956 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, | 958 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, |
957 GetSpeculativeRenderFrameHost(node)->rfh_state()); | 959 GetSpeculativeRenderFrameHost(node)->rfh_state()); |
958 EXPECT_TRUE(DidRenderFrameHostRequestCommit(rfh1)); | 960 EXPECT_TRUE(DidRenderFrameHostRequestCommit(rfh1)); |
959 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 961 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
960 | 962 |
961 rfh1->SendNavigate(1, kUrl1); | 963 rfh1->SendNavigate(1, entry_id, true, kUrl1); |
962 EXPECT_EQ(rfh1, main_test_rfh()); | 964 EXPECT_EQ(rfh1, main_test_rfh()); |
963 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state()); | 965 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state()); |
964 EXPECT_FALSE(rfhm->IsOnSwappedOutList(rfh1)); | 966 EXPECT_FALSE(rfhm->IsOnSwappedOutList(rfh1)); |
965 } | 967 } |
966 | 968 |
967 // PlzNavigate: Verify that data urls are properly handled. | 969 // PlzNavigate: Verify that data urls are properly handled. |
968 TEST_F(NavigatorTestWithBrowserSideNavigation, DataUrls) { | 970 TEST_F(NavigatorTestWithBrowserSideNavigation, DataUrls) { |
969 const GURL kUrl1("http://wikipedia.org/"); | 971 const GURL kUrl1("http://wikipedia.org/"); |
970 const GURL kUrl2("data:text/html,test"); | 972 const GURL kUrl2("data:text/html,test"); |
971 | 973 |
972 // Navigate to an initial site. | 974 // Navigate to an initial site. |
973 contents()->NavigateAndCommit(kUrl1); | 975 contents()->NavigateAndCommit(kUrl1); |
974 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 976 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
975 | 977 |
976 // Navigate to a data url. | 978 // Navigate to a data url. |
977 RequestNavigation(node, kUrl2); | 979 int entry_id = RequestNavigation(node, kUrl2); |
978 NavigationRequest* navigation_request = | 980 NavigationRequest* navigation_request = |
979 GetNavigationRequestForFrameTreeNode(node); | 981 GetNavigationRequestForFrameTreeNode(node); |
980 ASSERT_TRUE(navigation_request); | 982 ASSERT_TRUE(navigation_request); |
981 EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE, | 983 EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE, |
982 navigation_request->state()); | 984 navigation_request->state()); |
983 main_test_rfh()->SendBeforeUnloadACK(true); | 985 main_test_rfh()->SendBeforeUnloadACK(true); |
984 | 986 |
985 // The request should not have been sent to the IO thread but committed | 987 // The request should not have been sent to the IO thread but committed |
986 // immediately. | 988 // immediately. |
987 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, | 989 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, |
988 navigation_request->state()); | 990 navigation_request->state()); |
989 EXPECT_FALSE(navigation_request->loader_for_testing()); | 991 EXPECT_FALSE(navigation_request->loader_for_testing()); |
990 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 992 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
991 ASSERT_TRUE(speculative_rfh); | 993 ASSERT_TRUE(speculative_rfh); |
992 speculative_rfh->SendNavigate(0, kUrl2); | 994 speculative_rfh->SendNavigate(0, entry_id, true, kUrl2); |
993 EXPECT_EQ(main_test_rfh(), speculative_rfh); | 995 EXPECT_EQ(main_test_rfh(), speculative_rfh); |
994 | 996 |
995 // Go back to the initial site. | 997 // Go back to the initial site. |
996 contents()->NavigateAndCommit(kUrl1); | 998 contents()->NavigateAndCommit(kUrl1); |
997 | 999 |
998 // Do a renderer-initiated navigation to a data url. The request should not be | 1000 // Do a renderer-initiated navigation to a data url. The request should not be |
999 // sent to the IO thread, nor committed. | 1001 // sent to the IO thread, nor committed. |
1000 TestRenderFrameHost* main_rfh = main_test_rfh(); | 1002 TestRenderFrameHost* main_rfh = main_test_rfh(); |
1001 main_rfh->SendRendererInitiatedNavigationRequest(kUrl2, true); | 1003 main_rfh->SendRendererInitiatedNavigationRequest(kUrl2, true); |
1002 navigation_request = GetNavigationRequestForFrameTreeNode(node); | 1004 navigation_request = GetNavigationRequestForFrameTreeNode(node); |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1130 | 1132 |
1131 SiteInstance* converted_instance_2 = | 1133 SiteInstance* converted_instance_2 = |
1132 ConvertToSiteInstance(rfhm, descriptor, unrelated_instance.get()); | 1134 ConvertToSiteInstance(rfhm, descriptor, unrelated_instance.get()); |
1133 // Should return |unrelated_instance| because its site matches and it is | 1135 // Should return |unrelated_instance| because its site matches and it is |
1134 // unrelated to the current SiteInstance. | 1136 // unrelated to the current SiteInstance. |
1135 EXPECT_EQ(unrelated_instance.get(), converted_instance_2); | 1137 EXPECT_EQ(unrelated_instance.get(), converted_instance_2); |
1136 } | 1138 } |
1137 } | 1139 } |
1138 | 1140 |
1139 } // namespace content | 1141 } // namespace content |
OLD | NEW |