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