| 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(
|
|
|