Index: content/browser/frame_host/render_frame_host_manager.cc |
diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc |
index bf4312e12121da4a94101c8ee0e2846a435ef8ec..df9f0a0aefc0b151867af93de8aab2e39a25acfc 100644 |
--- a/content/browser/frame_host/render_frame_host_manager.cc |
+++ b/content/browser/frame_host/render_frame_host_manager.cc |
@@ -21,6 +21,7 @@ |
#include "content/browser/frame_host/render_frame_host_factory.h" |
#include "content/browser/frame_host/render_frame_host_impl.h" |
#include "content/browser/frame_host/render_frame_proxy_host.h" |
+#include "content/browser/frame_host/render_widget_host_view_child_frame.h" |
#include "content/browser/renderer_host/render_process_host_impl.h" |
#include "content/browser/renderer_host/render_view_host_factory.h" |
#include "content/browser/renderer_host/render_view_host_impl.h" |
@@ -33,6 +34,7 @@ |
#include "content/public/browser/notification_service.h" |
#include "content/public/browser/notification_types.h" |
#include "content/public/browser/render_widget_host_iterator.h" |
+#include "content/public/browser/render_widget_host_view.h" |
#include "content/public/browser/user_metrics.h" |
#include "content/public/browser/web_ui_controller.h" |
#include "content/public/common/content_switches.h" |
@@ -178,7 +180,7 @@ RenderFrameHostImpl* RenderFrameHostManager::Navigate( |
// Note: we don't call InitRenderView here because we are navigating away |
// soon anyway, and we don't have the NavigationEntry for this host. |
delegate_->CreateRenderViewForRenderManager( |
- render_frame_host_->render_view_host(), MSG_ROUTING_NONE, NULL); |
+ render_frame_host_->render_view_host(), MSG_ROUTING_NONE, false); |
} |
// If the renderer crashed, then try to create a new one to satisfy this |
@@ -188,7 +190,7 @@ RenderFrameHostImpl* RenderFrameHostManager::Navigate( |
int opener_route_id = delegate_->CreateOpenerRenderViewsForRenderManager( |
dest_render_frame_host->GetSiteInstance()); |
if (!InitRenderView(dest_render_frame_host->render_view_host(), |
- opener_route_id)) |
+ opener_route_id, false)) |
return NULL; |
// Now that we've created a new renderer, be sure to hide it if it isn't |
@@ -480,6 +482,7 @@ void RenderFrameHostManager::RendererProcessClosing( |
} |
void RenderFrameHostManager::SwapOutOldPage() { |
+ LOG(ERROR) << "RFHM::SwapOutOldPage[" << this << "]"; |
// Should only see this while we have a pending renderer or transfer. |
CHECK(cross_navigation_pending_ || pending_nav_params_.get()); |
@@ -494,21 +497,6 @@ void RenderFrameHostManager::SwapOutOldPage() { |
// no longer on the stack when we send the SwapOut message. |
delegate_->CancelModalDialogsForRenderManager(); |
- if (!frame_tree_node_->IsMainFrame()) { |
- // The RenderFrameHost being swapped out becomes the proxy for this |
- // frame in its parent's process. CrossProcessFrameConnector |
- // initialization only needs to happen on an initial cross-process |
- // navigation, when the RenderFrame leaves the same process as its parent. |
- // The same CrossProcessFrameConnector is used for subsequent cross- |
- // process navigations, but it will be destroyed if the Frame is |
- // navigated back to the same site instance as its parent. |
- // TODO(kenrb): This will change when RenderFrameProxyHost is created. |
- if (!cross_process_frame_connector_) { |
- cross_process_frame_connector_ = |
- new CrossProcessFrameConnector(render_frame_host_.get()); |
- } |
- } |
- |
// Tell the old frame it is being swapped out. This will fire the unload |
// handler in the background (without firing the beforeunload handler a second |
// time). When the navigation completes, we will send a message to the |
@@ -935,7 +923,8 @@ int RenderFrameHostManager::CreateRenderFrame( |
new_render_frame_host.Pass()); |
} |
- bool success = InitRenderView(render_view_host, opener_route_id); |
+ bool success = InitRenderView( |
+ render_view_host, opener_route_id, frame_tree_node_->IsMainFrame()); |
if (success && frame_tree_node_->IsMainFrame()) { |
// Don't show the main frame's view until we get a DidNavigate from it. |
render_view_host->GetView()->Hide(); |
@@ -953,7 +942,10 @@ int RenderFrameHostManager::CreateRenderFrame( |
} |
bool RenderFrameHostManager::InitRenderView(RenderViewHost* render_view_host, |
- int opener_route_id) { |
+ int opener_route_id, |
+ bool for_subframe) { |
+ LOG(ERROR) << "RFHM::InitRenderView[" << this << "]: for_subframe:" |
+ << for_subframe; |
// We may have initialized this RenderViewHost for another RenderFrameHost. |
if (render_view_host->IsRenderViewLive()) |
return true; |
@@ -975,10 +967,11 @@ bool RenderFrameHostManager::InitRenderView(RenderViewHost* render_view_host, |
} |
return delegate_->CreateRenderViewForRenderManager( |
- render_view_host, opener_route_id, cross_process_frame_connector_); |
+ render_view_host, opener_route_id, for_subframe); |
} |
void RenderFrameHostManager::CommitPending() { |
+ LOG(ERROR) << "RFHM::CommitPending[" << this << "]"; |
// First check whether we're going to want to focus the location bar after |
// this commit. We do this now because the navigation hasn't formally |
// committed yet, so if we've already cleared |pending_web_ui_| the call chain |
@@ -1132,6 +1125,23 @@ void RenderFrameHostManager::CommitPending() { |
old_render_frame_host.reset(); |
ShutdownRenderFrameHostsInSiteInstance(old_site_instance_id); |
} else { |
+ // The RenderFrameHost being swapped out becomes the proxy for this |
+ // frame in its parent's process. CrossProcessFrameConnector |
+ // initialization only needs to happen on an initial cross-process |
+ // navigation, when the RenderFrame leaves the same process as its parent. |
+ // The same CrossProcessFrameConnector is used for subsequent cross- |
+ // process navigations, but it will be destroyed if the Frame is |
+ // navigated back to the same site instance as its parent. |
+ // TODO(kenrb): This will change when RenderFrameProxyHost is created. |
+ if (!cross_process_frame_connector_) { |
+ cross_process_frame_connector_ = |
+ new CrossProcessFrameConnector(old_render_frame_host.get()); |
+ RenderWidgetHostView* rwhv = |
+ old_render_frame_host->render_view_host()->GetView(); |
kenrb
2014/05/08 19:56:14
Which RenderViewHost does old_render_frame_host->r
|
+ cross_process_frame_connector_->set_view( |
+ static_cast<RenderWidgetHostViewChildFrame*>(rwhv)); |
+ } |
+ |
proxy_hosts_[old_site_instance_id] = new RenderFrameProxyHost( |
old_render_frame_host.Pass()); |
} |
@@ -1170,6 +1180,7 @@ RenderFrameHostImpl* RenderFrameHostManager::UpdateStateForNavigate( |
const NavigationEntryImpl& entry) { |
// If we are currently navigating cross-process, we want to get back to normal |
// and then navigate as usual. |
+ LOG(ERROR) << "RFHM::UpdateStateForNavigate[" << this << "]"; |
if (cross_navigation_pending_) { |
if (pending_render_frame_host_) |
CancelPending(); |