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

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

Issue 281663002: Create RenderFrameProxyHost at time of swap-out instead of commit. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Ready for review 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 | Annotate | Revision Log
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_impl.h" 5 #include "content/browser/frame_host/render_frame_host_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/containers/hash_tables.h" 8 #include "base/containers/hash_tables.h"
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "base/metrics/user_metrics_action.h" 10 #include "base/metrics/user_metrics_action.h"
11 #include "content/browser/child_process_security_policy_impl.h" 11 #include "content/browser/child_process_security_policy_impl.h"
12 #include "content/browser/frame_host/cross_process_frame_connector.h" 12 #include "content/browser/frame_host/cross_process_frame_connector.h"
13 #include "content/browser/frame_host/cross_site_transferring_request.h" 13 #include "content/browser/frame_host/cross_site_transferring_request.h"
14 #include "content/browser/frame_host/frame_tree.h" 14 #include "content/browser/frame_host/frame_tree.h"
15 #include "content/browser/frame_host/frame_tree_node.h" 15 #include "content/browser/frame_host/frame_tree_node.h"
16 #include "content/browser/frame_host/navigator.h" 16 #include "content/browser/frame_host/navigator.h"
17 #include "content/browser/frame_host/render_frame_host_delegate.h" 17 #include "content/browser/frame_host/render_frame_host_delegate.h"
18 #include "content/browser/frame_host/render_frame_proxy_host.h"
18 #include "content/browser/renderer_host/input/input_router.h" 19 #include "content/browser/renderer_host/input/input_router.h"
19 #include "content/browser/renderer_host/input/timeout_monitor.h" 20 #include "content/browser/renderer_host/input/timeout_monitor.h"
20 #include "content/browser/renderer_host/render_view_host_impl.h" 21 #include "content/browser/renderer_host/render_view_host_impl.h"
21 #include "content/common/desktop_notification_messages.h" 22 #include "content/common/desktop_notification_messages.h"
22 #include "content/common/frame_messages.h" 23 #include "content/common/frame_messages.h"
23 #include "content/common/input_messages.h" 24 #include "content/common/input_messages.h"
24 #include "content/common/inter_process_time_ticks_converter.h" 25 #include "content/common/inter_process_time_ticks_converter.h"
25 #include "content/common/swapped_out_messages.h" 26 #include "content/common/swapped_out_messages.h"
26 #include "content/public/browser/browser_thread.h" 27 #include "content/public/browser/browser_thread.h"
27 #include "content/public/browser/content_browser_client.h" 28 #include "content/public/browser/content_browser_client.h"
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 FrameTreeNode* frame_tree_node, 146 FrameTreeNode* frame_tree_node,
146 int routing_id, 147 int routing_id,
147 bool is_swapped_out) 148 bool is_swapped_out)
148 : render_view_host_(render_view_host), 149 : render_view_host_(render_view_host),
149 delegate_(delegate), 150 delegate_(delegate),
150 cross_process_frame_connector_(NULL), 151 cross_process_frame_connector_(NULL),
151 frame_tree_(frame_tree), 152 frame_tree_(frame_tree),
152 frame_tree_node_(frame_tree_node), 153 frame_tree_node_(frame_tree_node),
153 routing_id_(routing_id), 154 routing_id_(routing_id),
154 is_swapped_out_(is_swapped_out), 155 is_swapped_out_(is_swapped_out),
155 weak_ptr_factory_(this) { 156 weak_ptr_factory_(this) {
ncarter (slow) 2014/05/15 00:42:23 Give that |render_frame_proxy_| an initializer. Po
nasko 2014/05/15 18:47:13 Done.
156 frame_tree_->RegisterRenderFrameHost(this); 157 frame_tree_->RegisterRenderFrameHost(this);
157 GetProcess()->AddRoute(routing_id_, this); 158 GetProcess()->AddRoute(routing_id_, this);
158 g_routing_id_frame_map.Get().insert(std::make_pair( 159 g_routing_id_frame_map.Get().insert(std::make_pair(
159 RenderFrameHostID(GetProcess()->GetID(), routing_id_), 160 RenderFrameHostID(GetProcess()->GetID(), routing_id_),
160 this)); 161 this));
161 } 162 }
162 163
163 RenderFrameHostImpl::~RenderFrameHostImpl() { 164 RenderFrameHostImpl::~RenderFrameHostImpl() {
164 GetProcess()->RemoveRoute(routing_id_); 165 GetProcess()->RemoveRoute(routing_id_);
165 g_routing_id_frame_map.Get().erase( 166 g_routing_id_frame_map.Get().erase(
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 RenderViewHost* RenderFrameHostImpl::GetRenderViewHost() { 238 RenderViewHost* RenderFrameHostImpl::GetRenderViewHost() {
238 return render_view_host_; 239 return render_view_host_;
239 } 240 }
240 241
241 bool RenderFrameHostImpl::Send(IPC::Message* message) { 242 bool RenderFrameHostImpl::Send(IPC::Message* message) {
242 if (IPC_MESSAGE_ID_CLASS(message->type()) == InputMsgStart) { 243 if (IPC_MESSAGE_ID_CLASS(message->type()) == InputMsgStart) {
243 return render_view_host_->input_router()->SendInput( 244 return render_view_host_->input_router()->SendInput(
244 make_scoped_ptr(message)); 245 make_scoped_ptr(message));
245 } 246 }
246 247
248 if (render_view_host_->IsSwappedOut()) {
249 DCHECK(render_frame_proxy_);
250 return render_frame_proxy_->Send(message);
251 }
252
247 return GetProcess()->Send(message); 253 return GetProcess()->Send(message);
248 } 254 }
249 255
250 bool RenderFrameHostImpl::OnMessageReceived(const IPC::Message &msg) { 256 bool RenderFrameHostImpl::OnMessageReceived(const IPC::Message &msg) {
251 // Filter out most IPC messages if this renderer is swapped out. 257 // Filter out most IPC messages if this renderer is swapped out.
252 // We still want to handle certain ACKs to keep our state consistent. 258 // We still want to handle certain ACKs to keep our state consistent.
253 // TODO(nasko): Only check RenderViewHost state, as this object's own state 259 // TODO(nasko): Only check RenderViewHost state, as this object's own state
254 // isn't yet properly updated. Transition this check once the swapped out 260 // isn't yet properly updated. Transition this check once the swapped out
255 // state is correct in RenderFrameHost itself. 261 // state is correct in RenderFrameHost itself.
256 if (render_view_host_->IsSwappedOut()) { 262 if (render_view_host_->IsSwappedOut()) {
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 const std::vector<GURL>& transfer_url_chain, 507 const std::vector<GURL>& transfer_url_chain,
502 const Referrer& referrer, 508 const Referrer& referrer,
503 PageTransition page_transition, 509 PageTransition page_transition,
504 bool should_replace_current_entry) { 510 bool should_replace_current_entry) {
505 frame_tree_node_->render_manager()->OnCrossSiteResponse( 511 frame_tree_node_->render_manager()->OnCrossSiteResponse(
506 this, global_request_id, cross_site_transferring_request.Pass(), 512 this, global_request_id, cross_site_transferring_request.Pass(),
507 transfer_url_chain, referrer, page_transition, 513 transfer_url_chain, referrer, page_transition,
508 should_replace_current_entry); 514 should_replace_current_entry);
509 } 515 }
510 516
511 void RenderFrameHostImpl::SwapOut() { 517 void RenderFrameHostImpl::SwapOut(RenderFrameProxyHost* proxy) {
512 // TODO(creis): Move swapped out state to RFH. Until then, only update it 518 // TODO(creis): Move swapped out state to RFH. Until then, only update it
513 // when swapping out the main frame. 519 // when swapping out the main frame.
514 if (!GetParent()) { 520 if (!GetParent()) {
515 // If this RenderViewHost is not in the default state, it must have already 521 // If this RenderViewHost is not in the default state, it must have already
516 // gone through this, therefore just return. 522 // gone through this, therefore just return.
517 if (render_view_host_->rvh_state_ != RenderViewHostImpl::STATE_DEFAULT) 523 if (render_view_host_->rvh_state_ != RenderViewHostImpl::STATE_DEFAULT)
518 return; 524 return;
519 525
520 render_view_host_->SetState( 526 render_view_host_->SetState(
521 RenderViewHostImpl::STATE_WAITING_FOR_UNLOAD_ACK); 527 RenderViewHostImpl::STATE_WAITING_FOR_UNLOAD_ACK);
522 render_view_host_->unload_event_monitor_timeout_->Start( 528 render_view_host_->unload_event_monitor_timeout_->Start(
523 base::TimeDelta::FromMilliseconds( 529 base::TimeDelta::FromMilliseconds(
524 RenderViewHostImpl::kUnloadTimeoutMS)); 530 RenderViewHostImpl::kUnloadTimeoutMS));
525 } 531 }
526 532
533 set_render_frame_proxy(proxy);
534
527 if (render_view_host_->IsRenderViewLive()) 535 if (render_view_host_->IsRenderViewLive())
528 Send(new FrameMsg_SwapOut(routing_id_)); 536 Send(new FrameMsg_SwapOut(routing_id_, proxy->GetRoutingID()));
529 537
530 if (!GetParent()) 538 if (!GetParent())
531 delegate_->SwappedOut(this); 539 delegate_->SwappedOut(this);
532 540
533 // Allow the navigation to proceed. 541 // Allow the navigation to proceed.
534 frame_tree_node_->render_manager()->SwappedOut(this); 542 frame_tree_node_->render_manager()->SwappedOut(this);
535 } 543 }
536 544
537 void RenderFrameHostImpl::OnDidStartLoading(bool to_different_document) { 545 void RenderFrameHostImpl::OnDidStartLoading(bool to_different_document) {
538 delegate_->DidStartLoading(this, to_different_document); 546 delegate_->DidStartLoading(this, to_different_document);
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
894 cancel_notification_callbacks_.erase(notification_id); 902 cancel_notification_callbacks_.erase(notification_id);
895 } 903 }
896 904
897 void RenderFrameHostImpl::DesktopNotificationPermissionRequestDone( 905 void RenderFrameHostImpl::DesktopNotificationPermissionRequestDone(
898 int callback_context) { 906 int callback_context) {
899 Send(new DesktopNotificationMsg_PermissionRequestDone( 907 Send(new DesktopNotificationMsg_PermissionRequestDone(
900 routing_id_, callback_context)); 908 routing_id_, callback_context));
901 } 909 }
902 910
903 } // namespace content 911 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698