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

Unified Diff: content/browser/frame_host/render_frame_host_impl.cc

Issue 404613005: Start using RenderFrameProxyHost objects. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Bug fix + ncarter review comments addressed Created 6 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/frame_host/render_frame_host_impl.cc
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index 72dcc54196c110723416dacfaa8dc14141c6723a..6dc0975551ca02479dd2347fd38c778161224777 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -143,8 +143,8 @@ RenderFrameHost* RenderFrameHost::FromID(int render_process_id,
}
// static
-RenderFrameHostImpl* RenderFrameHostImpl::FromID(
- int process_id, int routing_id) {
+RenderFrameHostImpl* RenderFrameHostImpl::FromID(int process_id,
+ int routing_id) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
RoutingIDFrameMap* frames = g_routing_id_frame_map.Pointer();
RoutingIDFrameMap::iterator it = frames->find(
@@ -152,13 +152,12 @@ RenderFrameHostImpl* RenderFrameHostImpl::FromID(
return it == frames->end() ? NULL : it->second;
}
-RenderFrameHostImpl::RenderFrameHostImpl(
- RenderViewHostImpl* render_view_host,
- RenderFrameHostDelegate* delegate,
- FrameTree* frame_tree,
- FrameTreeNode* frame_tree_node,
- int routing_id,
- bool is_swapped_out)
+RenderFrameHostImpl::RenderFrameHostImpl(RenderViewHostImpl* render_view_host,
+ RenderFrameHostDelegate* delegate,
+ FrameTree* frame_tree,
+ FrameTreeNode* frame_tree_node,
+ int routing_id,
+ bool is_swapped_out)
: render_view_host_(render_view_host),
delegate_(delegate),
cross_process_frame_connector_(NULL),
@@ -167,6 +166,8 @@ RenderFrameHostImpl::RenderFrameHostImpl(
frame_tree_node_(frame_tree_node),
routing_id_(routing_id),
is_swapped_out_(is_swapped_out),
+ renderer_initialized_(false),
+ has_received_swap_out_ack_(false),
weak_ptr_factory_(this) {
frame_tree_->RegisterRenderFrameHost(this);
GetProcess()->AddRoute(routing_id_, this);
@@ -274,7 +275,10 @@ bool RenderFrameHostImpl::Send(IPC::Message* message) {
make_scoped_ptr(message));
}
- if (render_view_host_->IsSwappedOut()) {
+ // Route IPCs through the RenderFrameProxyHost when in swapped out state.
+ // Note: For subframes in --site-per-process mode, we don't use swapped out
+ // RenderFrameHosts.
+ if (frame_tree_node_->IsMainFrame() && render_view_host_->IsSwappedOut()) {
DCHECK(render_frame_proxy_host_);
return render_frame_proxy_host_->Send(message);
}
@@ -428,6 +432,29 @@ void RenderFrameHostImpl::AccessibilityFatalError() {
browser_accessibility_manager_.reset(NULL);
}
+bool RenderFrameHostImpl::CreateRenderFrame(int parent_routing_id) {
+ TRACE_EVENT0("frame_host", "RenderFrameHostImpl::CreateRenderFrame");
+ DCHECK(!IsRenderFrameLive()) << "Creating frame twice";
+
+ // The process may (if we're sharing a process with another host that already
+ // initialized it) or may not (we have our own process or the old process
+ // crashed) have been initialized. Calling Init multiple times will be
+ // ignored, so this is safe.
+ if (!GetProcess()->Init())
+ return false;
+
+ DCHECK(GetProcess()->HasConnection());
+
+ renderer_initialized_ = true;
+ Send(new FrameMsg_NewFrame(routing_id_, parent_routing_id));
+
+ return true;
+}
+
+bool RenderFrameHostImpl::IsRenderFrameLive() {
+ return GetProcess()->HasConnection() && renderer_initialized_;
+}
+
void RenderFrameHostImpl::Init() {
GetProcess()->ResumeRequestsForView(routing_id_);
}
@@ -639,8 +666,10 @@ void RenderFrameHostImpl::SwapOut(RenderFrameProxyHost* proxy) {
set_render_frame_proxy_host(proxy);
- if (render_view_host_->IsRenderViewLive())
+ if (render_view_host_->IsRenderViewLive()) {
+ has_received_swap_out_ack_ = false;
Send(new FrameMsg_SwapOut(routing_id_, proxy->GetRoutingID()));
+ }
if (!GetParent())
delegate_->SwappedOut(this);
@@ -707,6 +736,7 @@ void RenderFrameHostImpl::OnBeforeUnloadACK(
}
void RenderFrameHostImpl::OnSwapOutACK() {
+ has_received_swap_out_ack_ = true;
OnSwappedOut(false);
}
@@ -849,7 +879,6 @@ void RenderFrameHostImpl::OnUpdateEncoding(const std::string& encoding_name) {
delegate_->UpdateEncoding(this, encoding_name);
}
-
void RenderFrameHostImpl::OnBeginNavigation(
const FrameHostMsg_BeginNavigation_Params& params) {
#if defined(USE_BROWSER_SIDE_NAVIGATION)

Powered by Google App Engine
This is Rietveld 408576698