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 f6c53011b8cb51f2b54b1e36c01029f7a033e3b6..ebf711133d6cf875f8fc8a8fc5f4a7b152f2f387 100644 |
--- a/content/browser/devtools/render_frame_devtools_agent_host.cc |
+++ b/content/browser/devtools/render_frame_devtools_agent_host.cc |
@@ -569,6 +569,9 @@ RenderFrameDevToolsAgentHost::~RenderFrameDevToolsAgentHost() { |
void RenderFrameDevToolsAgentHost::ReadyToCommitNavigation( |
NavigationHandle* navigation_handle) { |
+ // CommitPending may destruct |this|. |
+ scoped_refptr<RenderFrameDevToolsAgentHost> protect(this); |
+ |
// TODO(clamy): Switch RenderFrameDevToolsAgentHost to always buffer messages |
// until ReadyToCommitNavigation is called, now that it is also called in |
// non-PlzNavigate mode. |
@@ -597,6 +600,9 @@ void RenderFrameDevToolsAgentHost::ReadyToCommitNavigation( |
void RenderFrameDevToolsAgentHost::DidFinishNavigation( |
NavigationHandle* navigation_handle) { |
+ // CommitPending may destruct |this|. |
+ scoped_refptr<RenderFrameDevToolsAgentHost> protect(this); |
+ |
if (!IsBrowserSideNavigationEnabled()) |
return; |
@@ -629,6 +635,9 @@ void RenderFrameDevToolsAgentHost::DidFinishNavigation( |
void RenderFrameDevToolsAgentHost::AboutToNavigateRenderFrame( |
RenderFrameHost* old_host, |
RenderFrameHost* new_host) { |
+ // CommitPending may destruct |this|. |
+ scoped_refptr<RenderFrameDevToolsAgentHost> protect(this); |
+ |
if (IsBrowserSideNavigationEnabled()) |
return; |
@@ -662,6 +671,9 @@ void RenderFrameDevToolsAgentHost::AboutToNavigate( |
void RenderFrameDevToolsAgentHost::RenderFrameHostChanged( |
RenderFrameHost* old_host, |
RenderFrameHost* new_host) { |
+ // CommitPending may destruct |this|. |
+ scoped_refptr<RenderFrameDevToolsAgentHost> protect(this); |
+ |
target_handler_->UpdateFrames(); |
if (IsBrowserSideNavigationEnabled()) |
@@ -819,6 +831,9 @@ void RenderFrameDevToolsAgentHost::DidCommitProvisionalLoadForFrame( |
RenderFrameHost* render_frame_host, |
const GURL& url, |
ui::PageTransition transition_type) { |
+ // CommitPending may destruct |this|. |
+ scoped_refptr<RenderFrameDevToolsAgentHost> protect(this); |
+ |
if (IsBrowserSideNavigationEnabled()) |
return; |
if (pending_ && pending_->host() == render_frame_host) |
@@ -898,6 +913,9 @@ void RenderFrameDevToolsAgentHost::DisconnectWebContents() { |
} |
void RenderFrameDevToolsAgentHost::ConnectWebContents(WebContents* wc) { |
+ // CommitPending may destruct |this|. |
+ scoped_refptr<RenderFrameDevToolsAgentHost> protect(this); |
+ |
DCHECK(!current_); |
DCHECK(!pending_); |
RenderFrameHostImpl* host = |
@@ -930,8 +948,11 @@ std::string RenderFrameDevToolsAgentHost::GetParentId() { |
std::string RenderFrameDevToolsAgentHost::GetType() { |
DevToolsManager* manager = DevToolsManager::GetInstance(); |
- if (manager->delegate()) |
- return manager->delegate()->GetTargetType(current_->host()); |
+ if (manager->delegate() && current_) { |
+ std::string result = manager->delegate()->GetTargetType(current_->host()); |
+ if (!result.empty()) |
+ return result; |
+ } |
if (IsChildFrame()) |
return kTypeFrame; |
return kTypePage; |
@@ -939,20 +960,20 @@ std::string RenderFrameDevToolsAgentHost::GetType() { |
std::string RenderFrameDevToolsAgentHost::GetTitle() { |
DevToolsManager* manager = DevToolsManager::GetInstance(); |
- std::string result; |
- if (manager->delegate()) |
- result = manager->delegate()->GetTargetTitle(current_->host()); |
- if (!result.empty()) |
- return result; |
+ if (manager->delegate() && current_) { |
+ std::string result = manager->delegate()->GetTargetTitle(current_->host()); |
+ if (!result.empty()) |
+ return result; |
+ } |
content::WebContents* web_contents = GetWebContents(); |
if (web_contents) |
- result = base::UTF16ToUTF8(web_contents->GetTitle()); |
+ return base::UTF16ToUTF8(web_contents->GetTitle()); |
return GetURL().spec(); |
} |
std::string RenderFrameDevToolsAgentHost::GetDescription() { |
DevToolsManager* manager = DevToolsManager::GetInstance(); |
- if (manager->delegate()) |
+ if (manager->delegate() && current_) |
return manager->delegate()->GetTargetDescription(current_->host()); |
return ""; |
} |