Index: headless/lib/browser/headless_web_contents_impl.cc |
diff --git a/headless/lib/browser/headless_web_contents_impl.cc b/headless/lib/browser/headless_web_contents_impl.cc |
index f58dfe0671c2b627794fc9b2540eb9624d134809..94eae962f1a04aa81654068f6cac6a745da490f9 100644 |
--- a/headless/lib/browser/headless_web_contents_impl.cc |
+++ b/headless/lib/browser/headless_web_contents_impl.cc |
@@ -8,6 +8,7 @@ |
#include "base/memory/ptr_util.h" |
#include "base/memory/weak_ptr.h" |
#include "base/trace_event/trace_event.h" |
+#include "content/public/browser/devtools_agent_host.h" |
#include "content/public/browser/navigation_handle.h" |
#include "content/public/browser/render_frame_host.h" |
#include "content/public/browser/render_process_host.h" |
@@ -19,6 +20,7 @@ |
#include "content/public/common/bindings_policy.h" |
#include "content/public/common/service_registry.h" |
#include "content/public/renderer/render_frame.h" |
+#include "headless/lib/browser/headless_devtools_client_impl.h" |
#include "ui/aura/window.h" |
namespace headless { |
@@ -31,7 +33,10 @@ class WebContentsObserverAdapter : public content::WebContentsObserver { |
~WebContentsObserverAdapter() override {} |
- void RenderViewReady() override { observer_->WebContentsReady(); } |
+ void RenderViewReady() override { |
+ DCHECK(web_contents()->GetMainFrame()->IsRenderFrameLive()); |
+ observer_->DevToolsTargetReady(); |
+ } |
void DocumentOnLoadCompletedInMainFrame() override { |
observer_->DocumentOnLoadCompletedInMainFrame(); |
@@ -107,6 +112,21 @@ void HeadlessWebContentsImpl::RemoveObserver(Observer* observer) { |
observer_map_.erase(it); |
} |
+HeadlessDevToolsTarget* HeadlessWebContentsImpl::GetDevToolsTarget() { |
+ return web_contents()->GetMainFrame()->IsRenderFrameLive() ? this : nullptr; |
+} |
+ |
+void HeadlessWebContentsImpl::AttachClient(HeadlessDevToolsClient* client) { |
+ if (!agent_host_) |
+ agent_host_ = content::DevToolsAgentHost::GetOrCreateFor(web_contents()); |
+ HeadlessDevToolsClientImpl::From(client)->AttachToHost(agent_host_.get()); |
+} |
+ |
+void HeadlessWebContentsImpl::DetachClient(HeadlessDevToolsClient* client) { |
+ DCHECK(agent_host_); |
+ HeadlessDevToolsClientImpl::From(client)->DetachFromHost(agent_host_.get()); |
+} |
+ |
content::WebContents* HeadlessWebContentsImpl::web_contents() const { |
return web_contents_.get(); |
} |