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

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

Issue 976313003: [DevTools] Expose DevToolsAgentHost for OOPIF, display it in chrome://inspect. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: DevToolsAgentHost::List Created 5 years, 9 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 f30286da0e66eaee9a7a9f14f9853b3b9adf0606..4a3fff9c69bc17d47cc9a0080e589ea810d4ec44 100644
--- a/content/browser/devtools/render_frame_devtools_agent_host.cc
+++ b/content/browser/devtools/render_frame_devtools_agent_host.cc
@@ -81,6 +81,25 @@ 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(
+ DevToolsAgentHost::List* result, RenderFrameHost* host) {
Charlie Reis 2015/03/06 21:33:50 Style nit: Each parameter on its own line if the m
dgozman 2015/03/07 14:13:01 Done.
+ RenderFrameHostImpl* rfh = static_cast<RenderFrameHostImpl*>(host);
+ if (!rfh->IsRenderFrameLive())
+ return;
+ if (rfh->IsCrossProcessSubframe() || !rfh->GetParent())
+ result->push_back(RenderFrameDevToolsAgentHost::GetOrCreateFor(rfh));
+}
+
+// static
bool DevToolsAgentHost::HasFor(WebContents* web_contents) {
return FindAgentHost(web_contents) != NULL;
}
@@ -92,25 +111,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(
+ DevToolsAgentHost::List* result) {
+ base::Callback<void(RenderFrameHost*)> callback = base::Bind(
+ RenderFrameDevToolsAgentHost::AppendAgentHostForFrameIfApplicable,
+ base::Unretained(result));
+ for (const auto& wc : WebContentsImpl::GetAllWebContents())
+ wc->ForEachFrame(callback);
}
// static
@@ -409,6 +416,9 @@ void RenderFrameDevToolsAgentHost::Observe(int type,
void RenderFrameDevToolsAgentHost::SetRenderFrameHost(RenderFrameHost* rfh) {
DCHECK(!render_frame_host_);
render_frame_host_ = static_cast<RenderFrameHostImpl*>(rfh);
+ // TODO(dgozman): here we should DCHECK that frame host is either root or
+ // cross process subframe, but this requires handling cross-process
+ // navigation.
Charlie Reis 2015/03/06 21:33:50 Is there a bug number we can cite here?
dgozman 2015/03/07 14:13:01 Done.
WebContentsObserver::Observe(WebContents::FromRenderFrameHost(rfh));
RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
@@ -448,18 +458,18 @@ 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 (WebContents* web_contents = GetWebContents())
- return web_contents->GetVisibleURL();
return render_frame_host_ ?
render_frame_host_->GetLastCommittedURL() : GURL();
}
@@ -534,4 +544,8 @@ void RenderFrameDevToolsAgentHost::DispatchOnInspectorFrontend(
SendMessageToClient(message);
}
+bool RenderFrameDevToolsAgentHost::IsChildFrame() {
+ return render_frame_host_ && render_frame_host_->GetParent();
+}
+
} // namespace content
« no previous file with comments | « content/browser/devtools/render_frame_devtools_agent_host.h ('k') | content/browser/devtools/worker_devtools_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698