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

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

Issue 701953006: PlzNavigate: Speculatively spawns a renderer process for navigations. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Re-applied full CL changes, addressed comments, rebased, added tests and fixes. Created 6 years 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/macros.h" 5 #include "base/macros.h"
6 #include "base/time/time.h" 6 #include "base/time/time.h"
7 #include "content/browser/frame_host/navigation_controller_impl.h" 7 #include "content/browser/frame_host/navigation_controller_impl.h"
8 #include "content/browser/frame_host/navigation_entry_impl.h" 8 #include "content/browser/frame_host/navigation_entry_impl.h"
9 #include "content/browser/frame_host/navigation_request.h" 9 #include "content/browser/frame_host/navigation_request.h"
10 #include "content/browser/frame_host/navigation_request_info.h" 10 #include "content/browser/frame_host/navigation_request_info.h"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 controller().GetBrowserContext()))); 72 controller().GetBrowserContext())));
73 static_cast<NavigatorImpl*>(node->navigator())->RequestNavigation( 73 static_cast<NavigatorImpl*>(node->navigator())->RequestNavigation(
74 node, *entry, reload_type, base::TimeTicks::Now()); 74 node, *entry, reload_type, base::TimeTicks::Now());
75 } 75 }
76 76
77 NavigationRequest* GetNavigationRequestForFrameTreeNode( 77 NavigationRequest* GetNavigationRequestForFrameTreeNode(
78 FrameTreeNode* frame_tree_node) { 78 FrameTreeNode* frame_tree_node) {
79 return static_cast<NavigatorImpl*>(frame_tree_node->navigator()) 79 return static_cast<NavigatorImpl*>(frame_tree_node->navigator())
80 ->GetNavigationRequestForNodeForTesting(frame_tree_node); 80 ->GetNavigationRequestForNodeForTesting(frame_tree_node);
81 } 81 }
82
83 RenderFrameHost* GetSpeculativeRenderFrameHost(RenderFrameHostManager* rfhm) {
84 return rfhm->speculative_render_frame_host();
85 }
82 }; 86 };
83 87
84 // PlzNavigate: Test that a proper NavigationRequest is created by 88 // PlzNavigate: Test that a proper NavigationRequest is created by
85 // BeginNavigation. 89 // BeginNavigation.
86 // Note that all PlzNavigate methods on the browser side require the use of the 90 // Note that all PlzNavigate methods on the browser side require the use of the
87 // flag kEnableBrowserSideNavigation. 91 // flag kEnableBrowserSideNavigation.
88 TEST_F(NavigatorTestWithBrowserSideNavigation, BeginNavigation) { 92 TEST_F(NavigatorTestWithBrowserSideNavigation, BeginNavigation) {
89 const GURL kUrl1("http://www.google.com/"); 93 const GURL kUrl1("http://www.google.com/");
90 const GURL kUrl2("http://www.chromium.org/"); 94 const GURL kUrl2("http://www.chromium.org/");
91 const GURL kUrl3("http://www.gmail.com/"); 95 const GURL kUrl3("http://www.gmail.com/");
(...skipping 16 matching lines...) Expand all
108 GetNavigationRequestForFrameTreeNode(subframe_node); 112 GetNavigationRequestForFrameTreeNode(subframe_node);
109 TestNavigationURLLoader* subframe_loader = 113 TestNavigationURLLoader* subframe_loader =
110 GetLoaderForNavigationRequest(subframe_request); 114 GetLoaderForNavigationRequest(subframe_request);
111 ASSERT_TRUE(subframe_request); 115 ASSERT_TRUE(subframe_request);
112 EXPECT_EQ(kUrl2, subframe_request->common_params().url); 116 EXPECT_EQ(kUrl2, subframe_request->common_params().url);
113 EXPECT_EQ(kUrl2, subframe_loader->common_params().url); 117 EXPECT_EQ(kUrl2, subframe_loader->common_params().url);
114 // First party for cookies url should be that of the main frame. 118 // First party for cookies url should be that of the main frame.
115 EXPECT_EQ(kUrl1, subframe_loader->request_info()->first_party_for_cookies); 119 EXPECT_EQ(kUrl1, subframe_loader->request_info()->first_party_for_cookies);
116 EXPECT_FALSE(subframe_loader->request_info()->is_main_frame); 120 EXPECT_FALSE(subframe_loader->request_info()->is_main_frame);
117 EXPECT_TRUE(subframe_loader->request_info()->parent_is_main_frame); 121 EXPECT_TRUE(subframe_loader->request_info()->parent_is_main_frame);
118
carlosk 2014/11/28 13:08:17 I already re-added this line locally (and this is
119 SendRequestNavigation(root, kUrl3); 122 SendRequestNavigation(root, kUrl3);
120 // Simulate a BeginNavigation IPC on the main frame. 123 // Simulate a BeginNavigation IPC on the main frame.
121 contents()->GetMainFrame()->SendBeginNavigationWithURL(kUrl3); 124 contents()->GetMainFrame()->SendBeginNavigationWithURL(kUrl3);
122 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(root); 125 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(root);
123 TestNavigationURLLoader* main_loader = 126 TestNavigationURLLoader* main_loader =
124 GetLoaderForNavigationRequest(main_request); 127 GetLoaderForNavigationRequest(main_request);
125 ASSERT_TRUE(main_request); 128 ASSERT_TRUE(main_request);
126 EXPECT_EQ(kUrl3, main_request->common_params().url); 129 EXPECT_EQ(kUrl3, main_request->common_params().url);
127 EXPECT_EQ(kUrl3, main_loader->common_params().url); 130 EXPECT_EQ(kUrl3, main_loader->common_params().url);
128 EXPECT_EQ(kUrl3, main_loader->request_info()->first_party_for_cookies); 131 EXPECT_EQ(kUrl3, main_loader->request_info()->first_party_for_cookies);
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 224
222 // Navigate to a different site. 225 // Navigate to a different site.
223 SendRequestNavigation(node, kUrl2); 226 SendRequestNavigation(node, kUrl2);
224 main_test_rfh()->SendBeginNavigationWithURL(kUrl2); 227 main_test_rfh()->SendBeginNavigationWithURL(kUrl2);
225 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); 228 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node);
226 ASSERT_TRUE(main_request); 229 ASSERT_TRUE(main_request);
227 230
228 scoped_refptr<ResourceResponse> response(new ResourceResponse); 231 scoped_refptr<ResourceResponse> response(new ResourceResponse);
229 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( 232 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted(
230 response, MakeEmptyStream()); 233 response, MakeEmptyStream());
231 RenderFrameHostImpl* pending_rfh = 234 RenderFrameHostImpl* final_rfh = main_test_rfh();
232 node->render_manager()->pending_frame_host(); 235 ASSERT_TRUE(final_rfh);
233 ASSERT_TRUE(pending_rfh); 236 EXPECT_NE(final_rfh, rfh);
234 EXPECT_NE(pending_rfh, rfh); 237 EXPECT_TRUE(final_rfh->IsRenderFrameLive());
235 EXPECT_TRUE(pending_rfh->IsRenderFrameLive()); 238 EXPECT_TRUE(final_rfh->render_view_host()->IsRenderViewLive());
236 EXPECT_TRUE(pending_rfh->render_view_host()->IsRenderViewLive());
237 } 239 }
238 240
239 // PlzNavigate: Test that redirects are followed. 241 // PlzNavigate: Test that redirects are followed.
240 TEST_F(NavigatorTestWithBrowserSideNavigation, RedirectCrossSite) { 242 TEST_F(NavigatorTestWithBrowserSideNavigation, RedirectCrossSite) {
241 const GURL kUrl1("http://www.chromium.org/"); 243 const GURL kUrl1("http://www.chromium.org/");
242 const GURL kUrl2("http://www.google.com/"); 244 const GURL kUrl2("http://www.google.com/");
243 245
244 contents()->NavigateAndCommit(kUrl1); 246 contents()->NavigateAndCommit(kUrl1);
245 RenderFrameHostImpl* rfh = main_test_rfh(); 247 RenderFrameHostImpl* rfh = main_test_rfh();
246 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, rfh->rfh_state()); 248 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, rfh->rfh_state());
247 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 249 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
250 RenderFrameHostManager* rfhm = node->render_manager();
248 251
249 // Navigate to a URL on the same site. 252 // Navigate to a URL on the same site.
250 SendRequestNavigation(node, kUrl1); 253 SendRequestNavigation(node, kUrl1);
251 main_test_rfh()->SendBeginNavigationWithURL(kUrl1); 254 main_test_rfh()->SendBeginNavigationWithURL(kUrl1);
252 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); 255 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node);
253 ASSERT_TRUE(main_request); 256 ASSERT_TRUE(main_request);
257 EXPECT_FALSE(GetSpeculativeRenderFrameHost(rfhm));
254 258
255 // It then redirects to another site. 259 // It then redirects to another site.
256 net::RedirectInfo redirect_info; 260 net::RedirectInfo redirect_info;
257 redirect_info.status_code = 302; 261 redirect_info.status_code = 302;
258 redirect_info.new_method = "GET"; 262 redirect_info.new_method = "GET";
259 redirect_info.new_url = kUrl2; 263 redirect_info.new_url = kUrl2;
260 redirect_info.new_first_party_for_cookies = kUrl2; 264 redirect_info.new_first_party_for_cookies = kUrl2;
261 scoped_refptr<ResourceResponse> response(new ResourceResponse); 265 scoped_refptr<ResourceResponse> response(new ResourceResponse);
262 GetLoaderForNavigationRequest(main_request)->CallOnRequestRedirected( 266 GetLoaderForNavigationRequest(main_request)->CallOnRequestRedirected(
263 redirect_info, response); 267 redirect_info, response);
264 268
265 // The redirect should have been followed. 269 // The redirect should have been followed.
266 EXPECT_EQ(1, GetLoaderForNavigationRequest(main_request)->redirect_count()); 270 EXPECT_EQ(1, GetLoaderForNavigationRequest(main_request)->redirect_count());
271 EXPECT_FALSE(GetSpeculativeRenderFrameHost(rfhm));
267 272
268 // Then it commits. 273 // Then it commits.
269 response = new ResourceResponse; 274 response = new ResourceResponse;
270 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( 275 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted(
271 response, MakeEmptyStream()); 276 response, MakeEmptyStream());
272 RenderFrameHostImpl* pending_rfh = 277 RenderFrameHostImpl* final_rfh = main_test_rfh();
273 node->render_manager()->pending_frame_host(); 278 ASSERT_TRUE(final_rfh);
274 ASSERT_TRUE(pending_rfh); 279 EXPECT_NE(final_rfh, rfh);
275 EXPECT_NE(pending_rfh, rfh); 280 EXPECT_TRUE(final_rfh->IsRenderFrameLive());
276 EXPECT_TRUE(pending_rfh->IsRenderFrameLive()); 281 EXPECT_TRUE(final_rfh->render_view_host()->IsRenderViewLive());
277 EXPECT_TRUE(pending_rfh->render_view_host()->IsRenderViewLive()); 282 EXPECT_FALSE(GetSpeculativeRenderFrameHost(rfhm));
278 } 283 }
279 284
280 // PlzNavigate: Test that a navigation is cancelled if another request has been 285 // PlzNavigate: Test that a navigation is canceled if another request has been
281 // issued in the meantime. 286 // issued in the meantime.
282 TEST_F(NavigatorTestWithBrowserSideNavigation, ReplacePendingNavigation) { 287 TEST_F(NavigatorTestWithBrowserSideNavigation, ReplacePendingNavigation) {
283 const GURL kUrl0("http://www.wikipedia.org/"); 288 const GURL kUrl0("http://www.wikipedia.org/");
284 const GURL kUrl0_site = SiteInstance::GetSiteForURL(browser_context(), kUrl0); 289 const GURL kUrl0_site = SiteInstance::GetSiteForURL(browser_context(), kUrl0);
285 const GURL kUrl1("http://www.chromium.org/"); 290 const GURL kUrl1("http://www.chromium.org/");
286 const GURL kUrl2("http://www.google.com/"); 291 const GURL kUrl2("http://www.google.com/");
287 const GURL kUrl2_site = SiteInstance::GetSiteForURL(browser_context(), kUrl2); 292 const GURL kUrl2_site = SiteInstance::GetSiteForURL(browser_context(), kUrl2);
288 293
289 // Initialization. 294 // Initialization.
290 contents()->NavigateAndCommit(kUrl0); 295 contents()->NavigateAndCommit(kUrl0);
291 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 296 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
297 RenderFrameHostManager* rfhm = node->render_manager();
292 EXPECT_EQ(kUrl0_site, main_test_rfh()->GetSiteInstance()->GetSiteURL()); 298 EXPECT_EQ(kUrl0_site, main_test_rfh()->GetSiteInstance()->GetSiteURL());
293 299
294 // Request navigation to the 1st URL. 300 // Request navigation to the 1st URL.
295 SendRequestNavigation(node, kUrl1); 301 SendRequestNavigation(node, kUrl1);
296 main_test_rfh()->SendBeginNavigationWithURL(kUrl1); 302 main_test_rfh()->SendBeginNavigationWithURL(kUrl1);
297 NavigationRequest* request1 = GetNavigationRequestForFrameTreeNode(node); 303 NavigationRequest* request1 = GetNavigationRequestForFrameTreeNode(node);
298 ASSERT_TRUE(request1); 304 ASSERT_TRUE(request1);
299 EXPECT_EQ(kUrl1, request1->common_params().url); 305 EXPECT_EQ(kUrl1, request1->common_params().url);
300 base::WeakPtr<TestNavigationURLLoader> loader1 = 306 base::WeakPtr<TestNavigationURLLoader> loader1 =
301 GetLoaderForNavigationRequest(request1)->AsWeakPtr(); 307 GetLoaderForNavigationRequest(request1)->AsWeakPtr();
302 308
309 // Confirms a speculative RFH was created
310 RenderFrameHost* first_srfh = GetSpeculativeRenderFrameHost(rfhm);
311 EXPECT_TRUE(first_srfh);
312
303 // Request navigation to the 2nd URL; the NavigationRequest must have been 313 // Request navigation to the 2nd URL; the NavigationRequest must have been
304 // replaced by a new one with a different URL. 314 // replaced by a new one with a different URL.
305 SendRequestNavigation(node, kUrl2); 315 SendRequestNavigation(node, kUrl2);
306 main_test_rfh()->SendBeginNavigationWithURL(kUrl2); 316 main_test_rfh()->SendBeginNavigationWithURL(kUrl2);
307 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node); 317 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node);
308 ASSERT_TRUE(request2); 318 ASSERT_TRUE(request2);
309 EXPECT_EQ(kUrl2, request2->common_params().url); 319 EXPECT_EQ(kUrl2, request2->common_params().url);
310 320
311 // Confirm that the first loader got destroyed. 321 // Confirm that the first loader got destroyed.
312 EXPECT_FALSE(loader1); 322 EXPECT_FALSE(loader1);
313 323
324 // Confirms that a new speculative RFH was created
325 RenderFrameHost* second_srfh = GetSpeculativeRenderFrameHost(rfhm);
326 EXPECT_TRUE(second_srfh);
327 EXPECT_NE(first_srfh, second_srfh);
328
314 // Confirm that the commit corresponds to the new request. 329 // Confirm that the commit corresponds to the new request.
315 scoped_refptr<ResourceResponse> response(new ResourceResponse); 330 scoped_refptr<ResourceResponse> response(new ResourceResponse);
316 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( 331 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted(
317 response, MakeEmptyStream()); 332 response, MakeEmptyStream());
318 RenderFrameHostImpl* pending_rfh = 333 RenderFrameHostImpl* final_rfh = main_test_rfh();
319 node->render_manager()->pending_frame_host(); 334 ASSERT_TRUE(final_rfh);
320 ASSERT_TRUE(pending_rfh); 335 EXPECT_EQ(kUrl2_site, final_rfh->GetSiteInstance()->GetSiteURL());
321 EXPECT_EQ(kUrl2_site, pending_rfh->GetSiteInstance()->GetSiteURL()); 336
337 // Confirms that the committed RFH is the new speculative one
338 EXPECT_EQ(second_srfh, final_rfh);
322 } 339 }
323 340
324 // PlzNavigate: Test that a reload navigation is properly signaled to the 341 // PlzNavigate: Test that a reload navigation is properly signaled to the
325 // renderer when the navigation can commit. 342 // renderer when the navigation can commit.
326 TEST_F(NavigatorTestWithBrowserSideNavigation, Reload) { 343 TEST_F(NavigatorTestWithBrowserSideNavigation, Reload) {
327 const GURL kUrl("http://www.google.com/"); 344 const GURL kUrl("http://www.google.com/");
328 contents()->NavigateAndCommit(kUrl); 345 contents()->NavigateAndCommit(kUrl);
329 346
330 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 347 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
331 SendRequestNavigationWithParameters( 348 SendRequestNavigationWithParameters(
(...skipping 15 matching lines...) Expand all
347 node, kUrl, Referrer(), ui::PAGE_TRANSITION_LINK, 364 node, kUrl, Referrer(), ui::PAGE_TRANSITION_LINK,
348 NavigationController::RELOAD_IGNORING_CACHE); 365 NavigationController::RELOAD_IGNORING_CACHE);
349 contents()->GetMainFrame()->SendBeginNavigationWithURL(kUrl); 366 contents()->GetMainFrame()->SendBeginNavigationWithURL(kUrl);
350 // A NavigationRequest should have been generated. 367 // A NavigationRequest should have been generated.
351 main_request = GetNavigationRequestForFrameTreeNode(node); 368 main_request = GetNavigationRequestForFrameTreeNode(node);
352 ASSERT_TRUE(main_request != NULL); 369 ASSERT_TRUE(main_request != NULL);
353 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE, 370 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE,
354 main_request->common_params().navigation_type); 371 main_request->common_params().navigation_type);
355 } 372 }
356 373
374 // PlzNavigate: Confirms that a speculative RenderFrameHost is used when
375 // navigating from one site to the another.
376 TEST_F(NavigatorTestWithBrowserSideNavigation,
377 SpeculativeRendererWorksBaseCase) {
378 // Navigate to an initial site.
379 const GURL kUrlInit("http://wikipedia.org/");
380 contents()->NavigateAndCommit(kUrlInit);
381 TestRenderFrameHost* mrfh = main_test_rfh();
382 FrameTreeNode* node = mrfh->frame_tree_node();
383 RenderFrameHostManager* rfhm = node->render_manager();
384 RenderFrameHost* srfh = GetSpeculativeRenderFrameHost(rfhm);
385 ASSERT_FALSE(srfh);
386
387 // Begin navigating to another site.
388 const GURL kUrl("http://google.com/");
389 SendRequestNavigation(node, kUrl);
390 contents()->GetMainFrame()->SendBeginNavigationWithURL(kUrl);
391 srfh = GetSpeculativeRenderFrameHost(rfhm);
392 ASSERT_TRUE(srfh);
393 EXPECT_NE(srfh, mrfh);
394 EXPECT_TRUE(srfh->GetProcess()->HasConnection());
395
396 // Commit.
397 scoped_refptr<ResourceResponse> response(new ResourceResponse);
398 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node);
399 GetLoaderForNavigationRequest(main_request)
400 ->CallOnResponseStarted(response, MakeEmptyStream());
401 EXPECT_EQ(srfh, main_test_rfh());
402 EXPECT_FALSE(GetSpeculativeRenderFrameHost(rfhm));
403
404 // And just for completeness invoke OnDidCommitProvisionalLoad which
405 // shouldn't change anything in RFHM.
406 FrameHostMsg_DidCommitProvisionalLoad_Params params;
407 params.page_id = 1;
408 params.url = kUrl;
409 params.was_within_same_page = false;
410 params.is_post = false;
411 params.post_id = -1;
412 params.page_state = PageState::CreateForTesting(kUrl, false, 0, 0);
413 main_test_rfh()->SendNavigateWithParams(&params);
414 EXPECT_EQ(srfh, main_test_rfh());
415 EXPECT_FALSE(GetSpeculativeRenderFrameHost(rfhm));
416 }
417
418 // PlzNavigate: Confirms that a speculative RenderFrameHost is thrown away when
419 // the final URL's site differ from the initial one due to redirects.
420 TEST_F(NavigatorTestWithBrowserSideNavigation,
421 SpeculativeRendererDiscardedAfterRedirectToAnotherSite) {
422 // Navigate to an initial site.
423 const GURL kUrlInit("http://wikipedia.org/");
424 contents()->NavigateAndCommit(kUrlInit);
425 TestRenderFrameHost* mrfh = main_test_rfh();
426 FrameTreeNode* node = mrfh->frame_tree_node();
427 RenderFrameHostManager* rfhm = node->render_manager();
428 RenderFrameHost* srfh = GetSpeculativeRenderFrameHost(rfhm);
429 ASSERT_FALSE(srfh);
430
431 // Begin navigating to another site.
432 const GURL kUrl("http://google.com/");
433 SendRequestNavigation(node, kUrl);
434 contents()->GetMainFrame()->SendBeginNavigationWithURL(kUrl);
435 srfh = GetSpeculativeRenderFrameHost(rfhm);
436 ASSERT_TRUE(srfh);
437 EXPECT_NE(srfh, mrfh);
438 EXPECT_TRUE(srfh->GetProcess()->HasConnection());
439
440 // It then redirects to another site.
441 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node);
442 ASSERT_TRUE(main_request);
443 const GURL kUrlRedirect("https://www.google.com/");
444 net::RedirectInfo redirect_info;
445 redirect_info.status_code = 302;
446 redirect_info.new_method = "GET";
447 redirect_info.new_url = kUrlRedirect;
448 redirect_info.new_first_party_for_cookies = kUrlRedirect;
449 scoped_refptr<ResourceResponse> response(new ResourceResponse);
450 GetLoaderForNavigationRequest(main_request)->CallOnRequestRedirected(
451 redirect_info, response);
452 EXPECT_EQ(srfh, GetSpeculativeRenderFrameHost(rfhm));
453
454 // Commit.
455 response = new ResourceResponse;
456 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted(
457 response, MakeEmptyStream());
458 EXPECT_NE(srfh, main_test_rfh());
459 EXPECT_FALSE(GetSpeculativeRenderFrameHost(rfhm));
460 }
461
357 } // namespace content 462 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/navigator_impl.cc ('k') | content/browser/frame_host/render_frame_host_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698