| 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 "";
|
| }
|
|
|