Index: content/renderer/render_frame_impl.cc |
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
index be10cdabedb523475f8ceb2fa2712d21fb2cadc2..5347e4df3f9c1b7cf3b3d07d283500f5d8ea7c25 100644 |
--- a/content/renderer/render_frame_impl.cc |
+++ b/content/renderer/render_frame_impl.cc |
@@ -666,6 +666,7 @@ RenderFrameImpl::RenderFrameImpl(RenderViewImpl* render_view, int routing_id) |
#if defined(VIDEO_HOLE) |
contains_media_player_(false), |
#endif |
+ devtools_agent_(nullptr), |
geolocation_dispatcher_(NULL), |
push_messaging_dispatcher_(NULL), |
presentation_dispatcher_(NULL), |
@@ -731,6 +732,12 @@ void RenderFrameImpl::Initialize() { |
if (!frame_->parent()) |
new ImageLoadingHelper(this); |
+ if (IsLocalRoot()) { |
+ // DevToolsAgent is a RenderFrameObserver, and will destruct itself |
+ // when |this| is deleted. |
+ devtools_agent_ = new DevToolsAgent(this); |
+ } |
+ |
// We delay calling this until we have the WebFrame so that any observer or |
// embedder can call GetWebFrame on any RenderFrame. |
GetContentClient()->renderer()->RenderFrameCreated(this); |
@@ -3219,10 +3226,9 @@ void RenderFrameImpl::didFinishResourceLoad(blink::WebLocalFrame* frame, |
return; |
// Do not show error page when DevTools is attached. |
- if (render_view_->devtools_agent_ && |
- render_view_->devtools_agent_->IsAttached()) { |
+ // TODO(dgozman): we should check DevToolsAgent of the local frame root. |
+ if (devtools_agent_ && devtools_agent_->IsAttached()) |
return; |
- } |
// Display error page, if appropriate. |
std::string error_domain = "http"; |
@@ -3651,6 +3657,13 @@ void RenderFrameImpl::RemoveObserver(RenderFrameObserver* observer) { |
observers_.RemoveObserver(observer); |
} |
+bool RenderFrameImpl::IsLocalRoot() { |
+ DCHECK(frame_); |
+ if (!frame_->parent()) |
+ return true; |
+ return frame_->parent()->isWebRemoteFrame(); |
+} |
+ |
void RenderFrameImpl::OnStop() { |
DCHECK(frame_); |
frame_->stopLoading(); |