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 641793ea6e1c8ad720f71c07612c5f853d77365b..91bc9223fe7f8e65c6db55a06b47094106a50969 100644 |
--- a/content/browser/frame_host/render_frame_host_impl.cc |
+++ b/content/browser/frame_host/render_frame_host_impl.cc |
@@ -155,6 +155,11 @@ RenderFrameHostImpl::RenderFrameHostImpl(SiteInstance* site_instance, |
weak_ptr_factory_(this) { |
bool is_swapped_out = !!(flags & CREATE_RF_SWAPPED_OUT); |
bool hidden = !!(flags & CREATE_RF_HIDDEN); |
+ |
+ LOG(ERROR) << "RFH[" << this << "]::RFH: " |
+ << "(" << GetProcess()->GetID() << ", " << GetRoutingID() << ")" |
+ << " swapped_out:" << is_swapped_out; |
+ |
frame_tree_->RegisterRenderFrameHost(this); |
GetProcess()->AddRoute(routing_id_, this); |
g_routing_id_frame_map.Get().insert(std::make_pair( |
@@ -184,7 +189,11 @@ RenderFrameHostImpl::~RenderFrameHostImpl() { |
g_routing_id_frame_map.Get().erase( |
RenderFrameHostID(GetProcess()->GetID(), routing_id_)); |
- if (delegate_) |
+ // Notify the FrameTree that this RFH is going away, allowing it to shut down |
+ // the corresponding RenderViewHost if it is no longer needed. |
+ frame_tree_->UnregisterRenderFrameHost(this); |
+ |
+ if (delegate_ && render_frame_created_) |
delegate_->RenderFrameDeleted(this); |
FrameAccessibility::GetInstance()->OnRenderFrameHostDestroyed(this); |
@@ -194,10 +203,6 @@ RenderFrameHostImpl::~RenderFrameHostImpl() { |
if (IsRFHStateActive(rfh_state_)) |
GetSiteInstance()->decrement_active_frame_count(); |
- // Notify the FrameTree that this RFH is going away, allowing it to shut down |
- // the corresponding RenderViewHost if it is no longer needed. |
- frame_tree_->UnregisterRenderFrameHost(this); |
- |
// NULL out the swapout timer; in crash dumps this member will be null only if |
// the dtor has run. |
swapout_event_monitor_timeout_.reset(); |
@@ -208,6 +213,8 @@ RenderFrameHostImpl::~RenderFrameHostImpl() { |
if (render_widget_host_) |
render_widget_host_->Cleanup(); |
+ |
+ LOG(ERROR) << "RFH[" << this << "]::~RFH: "; |
} |
int RenderFrameHostImpl::GetRoutingID() { |
@@ -324,6 +331,7 @@ bool RenderFrameHostImpl::OnMessageReceived(const IPC::Message &msg) { |
} |
} |
+ |
if (delegate_->OnMessageReceived(this, msg)) |
return true; |
@@ -575,6 +583,9 @@ bool RenderFrameHostImpl::CreateRenderFrame(int parent_routing_id, |
widget_params.hidden = true; |
} |
+ LOG(ERROR) << "RFH[" << this << "]::CreateRenderFrame:" |
+ << " sending IPC to create RenderFrame"; |
+ |
Send(new FrameMsg_NewFrame(routing_id_, parent_routing_id, proxy_routing_id, |
frame_tree_node()->current_replication_state(), |
widget_params)); |
@@ -619,6 +630,19 @@ bool RenderFrameHostImpl::IsRenderFrameLive() { |
} |
void RenderFrameHostImpl::SetRenderFrameCreated(bool created) { |
+ // If the current status is different than the new status, the delegate |
+ // needs to be notified. |
+ LOG(ERROR) << "RFH[" << this << "]::SetRenderFrameCreated: " |
+ << " render_frame_created_:" << render_frame_created_ |
+ << " created:" << created; |
+ |
+ if (delegate_ && created ^ render_frame_created_) { |
+ if (created) |
+ delegate_->RenderFrameCreated(this); |
+ else |
+ delegate_->RenderFrameDeleted(this); |
+ } |
+ |
render_frame_created_ = created; |
if (created && render_widget_host_) |
render_widget_host_->InitForFrame(); |
@@ -658,19 +682,21 @@ void RenderFrameHostImpl::OnCreateChildFrame(int new_routing_id, |
if (rfh_state_ != RenderFrameHostImpl::STATE_DEFAULT) |
return; |
+ LOG(ERROR) << "RFH[" << this << "]::OnCreateChildFrame: " |
+ << " new frame: (" |
+ << GetProcess()->GetID() << ", " << new_routing_id |
+ << ")"; |
+ |
RenderFrameHostImpl* new_frame = frame_tree_->AddFrame( |
frame_tree_node_, GetProcess()->GetID(), new_routing_id, frame_name); |
if (!new_frame) |
return; |
+ new_frame->frame_tree_node()->set_sandbox_flags(sandbox_flags); |
+ |
// We know that the RenderFrame has been created in this case, immediately |
// after the CreateChildFrame IPC was sent. |
new_frame->SetRenderFrameCreated(true); |
- |
- new_frame->frame_tree_node()->set_sandbox_flags(sandbox_flags); |
- |
- if (delegate_) |
- delegate_->RenderFrameCreated(new_frame); |
} |
void RenderFrameHostImpl::OnDetach() { |
@@ -1036,6 +1062,10 @@ void RenderFrameHostImpl::OnSwapOutACK() { |
} |
void RenderFrameHostImpl::OnRenderProcessGone(int status, int exit_code) { |
+ LOG(ERROR) << "RFH[" << this << "]::OnRenderProcessGone: " |
+ << " main_frame:" << frame_tree_node_->IsMainFrame() |
+ << " created:" << render_frame_created_; |
+ |
if (frame_tree_node_->IsMainFrame()) { |
// Keep the termination status so we can get at it later when we |
// need to know why it died. |
@@ -1043,9 +1073,6 @@ void RenderFrameHostImpl::OnRenderProcessGone(int status, int exit_code) { |
static_cast<base::TerminationStatus>(status); |
} |
- SetRenderFrameCreated(false); |
- InvalidateMojoConnection(); |
- |
// Reset frame tree state associated with this process. This must happen |
// before RenderViewTerminated because observers expect the subframes of any |
// affected frames to be cleared first. |
@@ -1055,6 +1082,9 @@ void RenderFrameHostImpl::OnRenderProcessGone(int status, int exit_code) { |
if (!is_swapped_out()) |
frame_tree_node_->ResetForNewProcess(); |
+ SetRenderFrameCreated(false); |
+ InvalidateMojoConnection(); |
+ |
if (frame_tree_node_->IsMainFrame()) { |
// RenderViewHost/RenderWidgetHost needs to reset some stuff. |
render_view_host_->RendererExited( |