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

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

Powered by Google App Engine
This is Rietveld 408576698