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

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

Powered by Google App Engine
This is Rietveld 408576698