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 0c219d17c2a91b7374701dea0798986ece652e96..fc36df203e87d788ca13c13daa32b19010f9f31a 100644 |
--- a/content/browser/frame_host/render_frame_host_manager.cc |
+++ b/content/browser/frame_host/render_frame_host_manager.cc |
@@ -12,7 +12,6 @@ |
#include "base/stl_util.h" |
#include "content/browser/child_process_security_policy_impl.h" |
#include "content/browser/devtools/render_view_devtools_agent_host.h" |
-#include "content/browser/frame_host/cross_process_frame_connector.h" |
#include "content/browser/frame_host/cross_site_transferring_request.h" |
#include "content/browser/frame_host/debug_urls.h" |
#include "content/browser/frame_host/interstitial_page_impl.h" |
@@ -22,11 +21,9 @@ |
#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" |
-#include "content/browser/renderer_host/render_widget_host_view_base.h" |
#include "content/browser/site_instance_impl.h" |
#include "content/browser/webui/web_ui_controller_factory_registry.h" |
#include "content/browser/webui/web_ui_impl.h" |
@@ -80,7 +77,6 @@ RenderFrameHostManager::RenderFrameHostManager( |
render_view_delegate_(render_view_delegate), |
render_widget_delegate_(render_widget_delegate), |
interstitial_page_(NULL), |
- cross_process_frame_connector_(NULL), |
weak_factory_(this) { |
DCHECK(frame_tree_node_); |
} |
@@ -89,9 +85,6 @@ RenderFrameHostManager::~RenderFrameHostManager() { |
if (pending_render_frame_host_) |
CancelPending(); |
- if (cross_process_frame_connector_) |
- delete cross_process_frame_connector_; |
- |
// We should always have a current RenderFrameHost except in some tests. |
SetRenderFrameHost(scoped_ptr<RenderFrameHostImpl>()); |
@@ -143,6 +136,22 @@ RenderWidgetHostView* RenderFrameHostManager::GetRenderWidgetHostView() const { |
return render_frame_host_->render_view_host()->GetView(); |
} |
+RenderFrameProxyHost* RenderFrameHostManager::GetProxyToParent() { |
+ if (frame_tree_node_->IsMainFrame()) |
+ return NULL; |
+ |
+ RenderFrameProxyHostMap::iterator iter = |
+ proxy_hosts_.find(frame_tree_node_->parent() |
+ ->render_manager() |
+ ->current_frame_host() |
+ ->GetSiteInstance() |
+ ->GetId()); |
+ if (iter == proxy_hosts_.end()) |
+ return NULL; |
+ |
+ return iter->second; |
+} |
+ |
void RenderFrameHostManager::SetPendingWebUI(const NavigationEntryImpl& entry) { |
pending_web_ui_.reset( |
delegate_->CreateWebUIForRenderManager(entry.GetURL())); |
@@ -496,24 +505,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. |
- // TODO(nasko): Move CrossProcessFrameConnector to be owned by |
- // RenderFrameProxyHost instead of RenderFrameHostManager once proxy |
- // support lands. |
- if (!cross_process_frame_connector_) { |
- cross_process_frame_connector_ = |
- new CrossProcessFrameConnector(render_frame_host_.get()); |
- } |
- } |
- |
// Create the RenderFrameProxyHost that will replace the |
// RenderFrameHost which is swapping out. If one exists, ensure it is deleted |
// from the map and not leaked. |
@@ -921,8 +912,6 @@ int RenderFrameHostManager::CreateRenderFrame( |
// remove it from the list of swapped out hosts if it commits. |
RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance); |
- FrameTreeNode* parent_node = frame_tree_node_->parent(); |
- |
if (proxy) { |
routing_id = proxy->GetRenderViewHost()->GetRoutingID(); |
// Delete the existing RenderFrameProxyHost, but reuse the RenderFrameHost. |
@@ -947,15 +936,6 @@ int RenderFrameHostManager::CreateRenderFrame( |
rvh->AllowBindings(required_bindings); |
} |
} |
- } else { |
- // Detect if this is a cross-process child frame that is navigating |
- // back to the same SiteInstance as its parent. |
- if (parent_node && cross_process_frame_connector_ && |
- render_frame_host_->GetSiteInstance() == parent_node-> |
- render_manager()->current_frame_host()->GetSiteInstance()) { |
- delete cross_process_frame_connector_; |
- cross_process_frame_connector_ = NULL; |
- } |
} |
} else { |
// Create a new RenderFrameHost if we don't find an existing one. |
@@ -1190,11 +1170,11 @@ void RenderFrameHostManager::CommitPending() { |
// created already and we just need to link it to the proper view in the |
// new process. |
if (!is_main_frame) { |
- RenderWidgetHostView* rwhv = |
- render_frame_host_->render_view_host()->GetView(); |
- RenderWidgetHostViewChildFrame* rwhv_child = |
- static_cast<RenderWidgetHostViewChildFrame*>(rwhv); |
- cross_process_frame_connector_->set_view(rwhv_child); |
+ RenderFrameProxyHost* proxy = GetProxyToParent(); |
+ if (proxy) { |
+ proxy->SetChildRWHView( |
+ render_frame_host_->render_view_host()->GetView()); |
+ } |
} |
} |
} |