| 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 c1fbc30751fa6b22f331fc66ac17e5ffbdd316de..63b4fff282a7a64ab69d79f2113eaa0bcfd1927f 100644
|
| --- a/content/browser/frame_host/render_frame_host_impl.cc
|
| +++ b/content/browser/frame_host/render_frame_host_impl.cc
|
| @@ -7,6 +7,7 @@
|
| #include "base/containers/hash_tables.h"
|
| #include "base/lazy_instance.h"
|
| #include "content/browser/frame_host/frame_tree.h"
|
| +#include "content/browser/frame_host/frame_tree_node.h"
|
| #include "content/browser/renderer_host/render_view_host_impl.h"
|
| #include "content/common/frame_messages.h"
|
| #include "content/public/browser/browser_thread.h"
|
| @@ -34,12 +35,18 @@ RenderFrameHostImpl* RenderFrameHostImpl::FromID(
|
| RenderFrameHostImpl::RenderFrameHostImpl(
|
| RenderViewHostImpl* render_view_host,
|
| FrameTree* frame_tree,
|
| + FrameTreeNode* frame_tree_node,
|
| int routing_id,
|
| bool is_swapped_out)
|
| : render_view_host_(render_view_host),
|
| frame_tree_(frame_tree),
|
| + frame_tree_node_(frame_tree_node),
|
| routing_id_(routing_id),
|
| is_swapped_out_(is_swapped_out) {
|
| + LOG(INFO) << "NEW RenderFrameHostImpl: process " << GetProcess()->GetID() <<
|
| + ", route " << routing_id_ << ", SID " <<
|
| + render_view_host_->GetSiteInstance()->GetId();
|
| + render_view_host_->RegisterRenderFrameHost(this);
|
| GetProcess()->AddRoute(routing_id_, this);
|
| g_routing_id_frame_map.Get().insert(std::make_pair(
|
| RenderFrameHostID(GetProcess()->GetID(), routing_id_),
|
| @@ -47,10 +54,21 @@ RenderFrameHostImpl::RenderFrameHostImpl(
|
| }
|
|
|
| RenderFrameHostImpl::~RenderFrameHostImpl() {
|
| + LOG(INFO) << "DELETE RenderFrameHostImpl: process " <<
|
| + GetProcess()->GetID() << ", route " << routing_id_ << ", SID " <<
|
| + render_view_host_->GetSiteInstance()->GetId();
|
| +
|
| GetProcess()->RemoveRoute(routing_id_);
|
| g_routing_id_frame_map.Get().erase(
|
| RenderFrameHostID(GetProcess()->GetID(), routing_id_));
|
|
|
| + // Decrement the refcount of the frame's RenderViewHost, allowing it to shut
|
| + // down if it is no longer needed.
|
| + render_view_host_->UnregisterRenderFrameHost(this);
|
| +}
|
| +
|
| +bool RenderFrameHostImpl::is_main_frame() const {
|
| + return frame_tree_node_ == frame_tree_->root();
|
| }
|
|
|
| bool RenderFrameHostImpl::Send(IPC::Message* message) {
|
| @@ -64,6 +82,7 @@ bool RenderFrameHostImpl::OnMessageReceived(const IPC::Message &msg) {
|
| IPC_MESSAGE_HANDLER(FrameHostMsg_Detach, OnDetach)
|
| IPC_MESSAGE_HANDLER(FrameHostMsg_DidStartProvisionalLoadForFrame,
|
| OnDidStartProvisionalLoadForFrame)
|
| + IPC_MESSAGE_HANDLER(FrameHostMsg_SwapOut_ACK, OnSwapOutACK)
|
| IPC_END_MESSAGE_MAP_EX()
|
|
|
| return handled;
|
| @@ -83,12 +102,14 @@ void RenderFrameHostImpl::OnCreateChildFrame(int new_frame_routing_id,
|
| int64 parent_frame_id,
|
| int64 frame_id,
|
| const std::string& frame_name) {
|
| - frame_tree_->AddFrame(new_frame_routing_id, parent_frame_id, frame_id,
|
| - frame_name);
|
| + frame_tree_->AddFrame(render_view_host(), new_frame_routing_id,
|
| + parent_frame_id, frame_id, frame_name);
|
| }
|
|
|
| void RenderFrameHostImpl::OnDetach(int64 parent_frame_id, int64 frame_id) {
|
| - frame_tree_->RemoveFrame(parent_frame_id, frame_id);
|
| + frame_tree_->RemoveFrame(
|
| + render_view_host()->GetFrameTreeNodeID(parent_frame_id),
|
| + render_view_host()->GetFrameTreeNodeID(frame_id));
|
| }
|
|
|
| void RenderFrameHostImpl::OnDidStartProvisionalLoadForFrame(
|
| @@ -100,4 +121,22 @@ void RenderFrameHostImpl::OnDidStartProvisionalLoadForFrame(
|
| frame_id, parent_frame_id, is_main_frame, url);
|
| }
|
|
|
| +void RenderFrameHostImpl::SwapOut() {
|
| + if (render_view_host_->IsRenderViewLive()) {
|
| + Send(new FrameMsg_SwapOut(routing_id()));
|
| + } else {
|
| + // Our RenderViewHost doesn't have a live renderer, so just skip the unload
|
| + // event.
|
| + OnSwappedOut(true);
|
| + }
|
| +}
|
| +
|
| +void RenderFrameHostImpl::OnSwapOutACK() {
|
| + OnSwappedOut(false);
|
| +}
|
| +
|
| +void RenderFrameHostImpl::OnSwappedOut(bool timed_out) {
|
| + frame_tree_node_->render_manager()->SwappedOutFrame(this);
|
| +}
|
| +
|
| } // namespace content
|
|
|