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