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

Unified Diff: content/browser/frame_host/render_frame_proxy_host.h

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 side-by-side diff with in-line comments
Download patch
Index: content/browser/frame_host/render_frame_proxy_host.h
diff --git a/content/browser/frame_host/render_frame_proxy_host.h b/content/browser/frame_host/render_frame_proxy_host.h
index 514f0b22c41d1c3edb13d914aa117f96a529069f..3a8b487a32b528d05fa804d11af196c3d5cc46f7 100644
--- a/content/browser/frame_host/render_frame_proxy_host.h
+++ b/content/browser/frame_host/render_frame_proxy_host.h
@@ -8,7 +8,10 @@
#include "base/memory/scoped_ptr.h"
#include "content/browser/frame_host/render_frame_host_impl.h"
#include "content/browser/site_instance_impl.h"
+#include "ipc/ipc_listener.h"
+#include "ipc/ipc_sender.h"
+class FrameTreeNode;
class RenderProcessHost;
class RenderFrameHostImpl;
class RenderViewHostImpl;
@@ -47,35 +50,67 @@ namespace content {
// forward. It also instructs the RenderFrameHost to run the unload event
// handler and is kept alive for the duration. Once the event handling is
// complete, the RenderFrameHost is deleted.
-class RenderFrameProxyHost {
+class RenderFrameProxyHost
+ : public IPC::Listener,
+ public IPC::Sender {
public:
- explicit RenderFrameProxyHost(
- scoped_ptr<RenderFrameHostImpl> render_frame_host);
- ~RenderFrameProxyHost();
+ RenderFrameProxyHost(SiteInstance* site_instance,
+ FrameTreeNode* frame_tree_node);
+ virtual ~RenderFrameProxyHost();
RenderProcessHost* GetProcess() {
- return render_frame_host_->GetProcess();
+ return site_instance_->GetProcess();
+ }
+
+ int GetRoutingID() {
+ return routing_id_;
}
SiteInstance* GetSiteInstance() {
return site_instance_.get();
}
+ // This method deletes the RenderFrameProxy object in the renderer process,
Charlie Reis 2014/05/15 00:32:50 nit: Remove comma
nasko 2014/05/15 18:47:13 Done.
+ // which corresponds to this RenderFrameProxyHost. Must be called before
Charlie Reis 2014/05/15 00:32:50 I'm a bit concerned about missing cases where the
nasko 2014/05/15 18:47:13 In the case of a renderer process crashing, we del
+ // deleting the RenderFrameProxyHost if the renderer process exists and is
+ // responsive.
+ void DeleteRendererProxy();
Charlie Reis 2014/05/15 00:32:50 nit: DeleteRenderFrameProxy()
nasko 2014/05/15 18:47:13 Done.
+
// TODO(nasko): The following methods should be removed when swapping out
// of RenderFrameHosts is no longer used.
RenderFrameHostImpl* render_frame_host() {
return render_frame_host_.get();
}
RenderViewHostImpl* render_view_host() {
Charlie Reis 2014/05/15 00:32:50 This isn't a one liner anymore, so it should be in
nasko 2014/05/15 18:47:13 This is no longer needed.
- return render_frame_host_->render_view_host();
+ if (render_frame_host_.get())
+ return render_frame_host_->render_view_host();
+ return NULL;
+ }
+ void TakeFrameHostOwnership(
+ scoped_ptr<RenderFrameHostImpl> render_frame_host) {
+ render_frame_host_ = render_frame_host.Pass();
}
- scoped_ptr<RenderFrameHostImpl> PassFrameHost() {
+ scoped_ptr<RenderFrameHostImpl> PassFrameHostOwnership() {
Charlie Reis 2014/05/15 00:32:50 nit: Move implementation to .cc file.
nasko 2014/05/15 18:47:13 Done.
+ DeleteRendererProxy();
return render_frame_host_.Pass();
}
+ // IPC::Sender
+ virtual bool Send(IPC::Message* msg) OVERRIDE;
+
private:
+ // IPC::Listener
+ virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
+
+ // This RenderFrameProxyHost's routing id.
+ int routing_id_;
+
+ // The SiteInstance this proxy is associated with.
scoped_refptr<SiteInstance> site_instance_;
+ // The node in the frame tree where this proxy is located.
+ FrameTreeNode* frame_tree_node_;
+
// TODO(nasko): For now, hide the RenderFrameHost inside the proxy, but remove
// it once we have all the code support for proper proxy objects.
scoped_ptr<RenderFrameHostImpl> render_frame_host_;

Powered by Google App Engine
This is Rietveld 408576698