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

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

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