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 e5e7ce7a2ede15d91b7af435ee81215f7ccc8ee0..1a4cbd9bccdec4a13a851de30a5b3484a251df9f 100644 |
| --- a/content/browser/devtools/render_frame_devtools_agent_host.cc |
| +++ b/content/browser/devtools/render_frame_devtools_agent_host.cc |
| @@ -80,6 +80,24 @@ DevToolsAgentHost::GetOrCreateFor(WebContents* web_contents) { |
| } |
| // static |
| +scoped_refptr<DevToolsAgentHost> RenderFrameDevToolsAgentHost::GetOrCreateFor( |
| + RenderFrameHost* host) { |
| + RenderFrameDevToolsAgentHost* result = FindAgentHost(host); |
| + if (!result) |
| + result = new RenderFrameDevToolsAgentHost(host); |
| + return result; |
| +} |
| + |
| +// static |
| +void RenderFrameDevToolsAgentHost::AppendAgentHostForFrameIfApplicable( |
| + std::vector<scoped_refptr<DevToolsAgentHost>>* result, |
| + RenderFrameHost* host) { |
| + RenderFrameHostImpl* rfh = static_cast<RenderFrameHostImpl*>(host); |
| + if (rfh->IsRenderFrameLive() && rfh->IsFrameGroupRoot()) |
| + result->push_back(RenderFrameDevToolsAgentHost::GetOrCreateFor(rfh)); |
| +} |
| + |
| +// static |
| bool DevToolsAgentHost::HasFor(WebContents* web_contents) { |
| return FindAgentHost(web_contents) != NULL; |
| } |
| @@ -91,25 +109,13 @@ bool DevToolsAgentHost::IsDebuggerAttached(WebContents* web_contents) { |
| } |
| //static |
| -std::vector<WebContents*> DevToolsAgentHostImpl::GetInspectableWebContents() { |
| - std::set<WebContents*> set; |
| - scoped_ptr<RenderWidgetHostIterator> widgets( |
| - RenderWidgetHost::GetRenderWidgetHosts()); |
| - while (RenderWidgetHost* widget = widgets->GetNextHost()) { |
| - // Ignore processes that don't have a connection, such as crashed contents. |
| - if (!widget->GetProcess()->HasConnection()) |
| - continue; |
| - if (!widget->IsRenderView()) |
| - continue; |
| - |
| - RenderViewHost* rvh = RenderViewHost::From(widget); |
| - WebContents* web_contents = WebContents::FromRenderViewHost(rvh); |
| - if (web_contents) |
| - set.insert(web_contents); |
| - } |
| - std::vector<WebContents*> result(set.size()); |
| - std::copy(set.begin(), set.end(), result.begin()); |
| - return result; |
| +void RenderFrameDevToolsAgentHost::AddAllAgentHosts( |
| + std::vector<scoped_refptr<DevToolsAgentHost>>* result) { |
| + base::Callback<void(RenderFrameHost*)> callback = base::Bind( |
| + RenderFrameDevToolsAgentHost::AppendAgentHostForFrameIfApplicable, |
| + base::Unretained(result)); |
| + for (const auto& wc : WebContentsImpl::GetAllWebContents()) |
| + wc->ForEachFrame(callback); |
| } |
| // static |
| @@ -443,16 +449,20 @@ void RenderFrameDevToolsAgentHost::ConnectWebContents(WebContents* wc) { |
| } |
| DevToolsAgentHost::Type RenderFrameDevToolsAgentHost::GetType() { |
| - return TYPE_WEB_CONTENTS; |
| + return IsChildFrame() ? TYPE_FRAME : TYPE_WEB_CONTENTS; |
| } |
| std::string RenderFrameDevToolsAgentHost::GetTitle() { |
| + if (IsChildFrame()) |
| + return GetURL().spec(); |
| if (WebContents* web_contents = GetWebContents()) |
| return base::UTF16ToUTF8(web_contents->GetTitle()); |
| return ""; |
| } |
| GURL RenderFrameDevToolsAgentHost::GetURL() { |
| + if (IsChildFrame()) |
| + return render_frame_host_->GetLastCommittedURL(); |
|
nasko
2015/03/05 15:20:48
Why not return this in all cases?
dgozman
2015/03/06 16:14:14
Done.
|
| if (WebContents* web_contents = GetWebContents()) |
| return web_contents->GetVisibleURL(); |
|
nasko
2015/03/05 15:20:48
This is a bit orthogonal, but why do you need the
dgozman
2015/03/06 16:14:14
You are right, using last committed url.
|
| return render_frame_host_ ? |
| @@ -529,4 +539,8 @@ void RenderFrameDevToolsAgentHost::DispatchOnInspectorFrontend( |
| SendMessageToClient(message); |
| } |
| +bool RenderFrameDevToolsAgentHost::IsChildFrame() { |
| + return render_frame_host_ && render_frame_host_->GetParent(); |
| +} |
| + |
| } // namespace content |