Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Unified Diff: content/browser/devtools/render_frame_devtools_agent_host.cc

Issue 2397713003: [DevTools] Fix a couple of issues for cross-site RFDTAH, add a test. (Closed)
Patch Set: test fix Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 "";
}

Powered by Google App Engine
This is Rietveld 408576698