Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(392)

Side by Side Diff: content/browser/frame_host/navigator_impl_unittest.cc

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

Powered by Google App Engine
This is Rietveld 408576698