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

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

Issue 297973002: Navigation transitions: Block first response until after transitions have run. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "content/browser/frame_host/render_frame_host_manager.h" 5 #include "content/browser/frame_host/render_frame_host_manager.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 cross_site_transferring_request(cross_site_transferring_request.Pass()), 55 cross_site_transferring_request(cross_site_transferring_request.Pass()),
56 transfer_url_chain(transfer_url_chain), 56 transfer_url_chain(transfer_url_chain),
57 referrer(referrer), 57 referrer(referrer),
58 page_transition(page_transition), 58 page_transition(page_transition),
59 render_frame_id(render_frame_id), 59 render_frame_id(render_frame_id),
60 should_replace_current_entry(should_replace_current_entry) { 60 should_replace_current_entry(should_replace_current_entry) {
61 } 61 }
62 62
63 RenderFrameHostManager::PendingNavigationParams::~PendingNavigationParams() {} 63 RenderFrameHostManager::PendingNavigationParams::~PendingNavigationParams() {}
64 64
65 RenderFrameHostManager::ResponseStartedParams::ResponseStartedParams(
66 const GlobalRequestID& global_request_id)
67 : global_request_id(global_request_id) {
68 }
69
70 RenderFrameHostManager::ResponseStartedParams::~ResponseStartedParams() {}
71
65 bool RenderFrameHostManager::ClearRFHsPendingShutdown(FrameTreeNode* node) { 72 bool RenderFrameHostManager::ClearRFHsPendingShutdown(FrameTreeNode* node) {
66 node->render_manager()->pending_delete_hosts_.clear(); 73 node->render_manager()->pending_delete_hosts_.clear();
67 return true; 74 return true;
68 } 75 }
69 76
70 RenderFrameHostManager::RenderFrameHostManager( 77 RenderFrameHostManager::RenderFrameHostManager(
71 FrameTreeNode* frame_tree_node, 78 FrameTreeNode* frame_tree_node,
72 RenderFrameHostDelegate* render_frame_delegate, 79 RenderFrameHostDelegate* render_frame_delegate,
73 RenderViewHostDelegate* render_view_delegate, 80 RenderViewHostDelegate* render_view_delegate,
74 RenderWidgetHostDelegate* render_widget_delegate, 81 RenderWidgetHostDelegate* render_widget_delegate,
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 pending_nav_params_.reset(new PendingNavigationParams( 348 pending_nav_params_.reset(new PendingNavigationParams(
342 global_request_id, cross_site_transferring_request.Pass(), 349 global_request_id, cross_site_transferring_request.Pass(),
343 transfer_url_chain, referrer, page_transition, 350 transfer_url_chain, referrer, page_transition,
344 pending_render_frame_host->GetRoutingID(), 351 pending_render_frame_host->GetRoutingID(),
345 should_replace_current_entry)); 352 should_replace_current_entry));
346 353
347 // Run the unload handler of the current page. 354 // Run the unload handler of the current page.
348 SwapOutOldPage(); 355 SwapOutOldPage();
349 } 356 }
350 357
358 void RenderFrameHostManager::OnDeferredAfterResponseStarted(
359 const GlobalRequestID& global_request_id,
360 RenderFrameHostImpl* pending_render_frame_host) {
361 DCHECK(!response_started_params_.get());
362
363 response_started_params_.reset(new ResponseStartedParams(
364 global_request_id));
365 }
366
367 void RenderFrameHostManager::SetHasPendingTransitionRequest(
368 bool has_pending_transition) {
369 render_frame_host_->render_view_host()->SetHasPendingTransitionRequest(
370 has_pending_transition);
371 }
372
373 void RenderFrameHostManager::ResumeResponseDeferredAtStart() {
374 DCHECK(response_started_params_.get());
375
376 RenderProcessHostImpl* process =
377 static_cast<RenderProcessHostImpl*>(
378 render_frame_host_->GetProcess());
379 process->ResumeResponseDeferredAtStart(
380 response_started_params_->global_request_id);
381
382 render_frame_host_->render_view_host()->SetHasPendingTransitionRequest(false);
383
384 response_started_params_.reset();
385 }
386
351 void RenderFrameHostManager::SwappedOut( 387 void RenderFrameHostManager::SwappedOut(
352 RenderFrameHostImpl* render_frame_host) { 388 RenderFrameHostImpl* render_frame_host) {
353 // Make sure this is from our current RFH, and that we have a pending 389 // Make sure this is from our current RFH, and that we have a pending
354 // navigation from OnCrossSiteResponse. (There may be no pending navigation 390 // navigation from OnCrossSiteResponse. (There may be no pending navigation
355 // for data URLs that don't make network requests, for example.) If not, 391 // for data URLs that don't make network requests, for example.) If not,
356 // just return early and ignore. 392 // just return early and ignore.
357 if (render_frame_host != render_frame_host_ || !pending_nav_params_.get()) { 393 if (render_frame_host != render_frame_host_ || !pending_nav_params_.get()) {
358 pending_nav_params_.reset(); 394 pending_nav_params_.reset();
359 return; 395 return;
360 } 396 }
(...skipping 1109 matching lines...) Expand 10 before | Expand all | Expand 10 after
1470 SiteInstance* instance) const { 1506 SiteInstance* instance) const {
1471 RenderFrameProxyHostMap::const_iterator iter = 1507 RenderFrameProxyHostMap::const_iterator iter =
1472 proxy_hosts_.find(instance->GetId()); 1508 proxy_hosts_.find(instance->GetId());
1473 if (iter != proxy_hosts_.end()) 1509 if (iter != proxy_hosts_.end())
1474 return iter->second; 1510 return iter->second;
1475 1511
1476 return NULL; 1512 return NULL;
1477 } 1513 }
1478 1514
1479 } // namespace content 1515 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698