Chromium Code Reviews| Index: content/browser/devtools/render_frame_devtools_agent_host.cc |
| diff --git a/content/browser/devtools/render_frame_devtools_agent_host.cc b/content/browser/devtools/render_frame_devtools_agent_host.cc |
| index ceba15516fcc711135178acc80171ecac6d040be..152ce7787b73bef26f4f8a080f50431d70a403e1 100644 |
| --- a/content/browser/devtools/render_frame_devtools_agent_host.cc |
| +++ b/content/browser/devtools/render_frame_devtools_agent_host.cc |
| @@ -306,7 +306,8 @@ RenderFrameDevToolsAgentHost::RenderFrameDevToolsAgentHost( |
| protocol_handler_(new DevToolsProtocolHandler( |
| this, |
| base::Bind(&RenderFrameDevToolsAgentHost::SendMessageToClient, |
| - base::Unretained(this)))) { |
| + base::Unretained(this)))), |
| + current_frame_crashed_(false) { |
| DevToolsProtocolDispatcher* dispatcher = protocol_handler_->dispatcher(); |
| dispatcher->SetDOMHandler(dom_handler_.get()); |
| dispatcher->SetInputHandler(input_handler_.get()); |
| @@ -336,6 +337,7 @@ RenderFrameDevToolsAgentHost::RenderFrameDevToolsAgentHost( |
| void RenderFrameDevToolsAgentHost::SetPending(RenderFrameHostImpl* host) { |
| DCHECK(!pending_); |
| + current_frame_crashed_ = false; |
| pending_.reset(new FrameHostHolder(this, host)); |
| if (IsAttached()) |
| pending_->Reattach(current_.get()); |
| @@ -350,6 +352,7 @@ void RenderFrameDevToolsAgentHost::SetPending(RenderFrameHostImpl* host) { |
| void RenderFrameDevToolsAgentHost::CommitPending() { |
| DCHECK(pending_); |
| + current_frame_crashed_ = false; |
| if (!ShouldCreateDevToolsFor(pending_->host())) { |
| DestroyOnRenderFrameGone(); |
| @@ -467,7 +470,7 @@ void RenderFrameDevToolsAgentHost::AboutToNavigateRenderFrame( |
| DCHECK(!pending_ || pending_->host() != old_host); |
| if (!current_ || current_->host() != old_host) |
| return; |
| - if (old_host == new_host) |
| + if (old_host == new_host && !current_frame_crashed_) |
|
nasko
2015/06/15 22:25:49
Will it really make a difference whether the curre
dgozman
2015/06/16 13:30:36
Yes, because if the current frame has crashed, ren
|
| return; |
| DCHECK(!pending_); |
| SetPending(static_cast<RenderFrameHostImpl*>(new_host)); |
| @@ -499,7 +502,8 @@ void RenderFrameDevToolsAgentHost::FrameDeleted(RenderFrameHost* rfh) { |
| } |
| void RenderFrameDevToolsAgentHost::RenderFrameDeleted(RenderFrameHost* rfh) { |
| - FrameDeleted(rfh); |
| + if (!current_frame_crashed_) |
| + FrameDeleted(rfh); |
| } |
| void RenderFrameDevToolsAgentHost::DestroyOnRenderFrameGone() { |
| @@ -526,6 +530,7 @@ void RenderFrameDevToolsAgentHost::RenderProcessGone( |
| case base::TERMINATION_STATUS_OOM_PROTECTED: |
| #endif |
| inspector_handler_->TargetCrashed(); |
| + current_frame_crashed_ = true; |
| break; |
| default: |
| break; |
| @@ -585,6 +590,8 @@ void RenderFrameDevToolsAgentHost::DidCommitProvisionalLoadForFrame( |
| RenderFrameHost* render_frame_host, |
| const GURL& url, |
| ui::PageTransition transition_type) { |
| + if (pending_ && pending_->host() == render_frame_host) |
| + CommitPending(); |
| service_worker_handler_->UpdateHosts(); |
| } |