| Index: content/browser/devtools/render_view_devtools_agent_host.cc
|
| diff --git a/content/browser/devtools/render_view_devtools_agent_host.cc b/content/browser/devtools/render_view_devtools_agent_host.cc
|
| index 1005101b27611379063734736198f196ff726df1..a120714766d125d2f7f856c751fb75710908f071 100644
|
| --- a/content/browser/devtools/render_view_devtools_agent_host.cc
|
| +++ b/content/browser/devtools/render_view_devtools_agent_host.cc
|
| @@ -20,6 +20,7 @@
|
| #include "content/public/browser/notification_service.h"
|
| #include "content/public/browser/notification_types.h"
|
| #include "content/public/browser/render_widget_host_view.h"
|
| +#include "content/public/browser/web_contents_observer.h"
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebDevToolsAgent.h"
|
| #include "ui/gfx/image/image_skia.h"
|
| #include "ui/gfx/native_widget_types.h"
|
| @@ -69,6 +70,33 @@ class DevToolsAgentHostRvhObserver : public RenderViewHostObserver {
|
| DISALLOW_COPY_AND_ASSIGN(DevToolsAgentHostRvhObserver);
|
| };
|
|
|
| +class DevToolsAgentHostWebContentsObserver : public WebContentsObserver {
|
| + public:
|
| + DevToolsAgentHostWebContentsObserver(
|
| + WebContents* web_contents,
|
| + RenderViewDevToolsAgentHost* agent_host)
|
| + : WebContentsObserver(web_contents),
|
| + agent_host_(agent_host) {
|
| + }
|
| + virtual ~DevToolsAgentHostWebContentsObserver() {}
|
| +
|
| + // WebContentsObserver overrides.
|
| + virtual void RenderViewGone(base::TerminationStatus status) OVERRIDE {
|
| + switch(status) {
|
| + case base::TERMINATION_STATUS_ABNORMAL_TERMINATION:
|
| + case base::TERMINATION_STATUS_PROCESS_WAS_KILLED:
|
| + case base::TERMINATION_STATUS_PROCESS_CRASHED:
|
| + agent_host_->RenderViewCrashed();
|
| + break;
|
| + default:
|
| + break;
|
| + }
|
| + }
|
| + private:
|
| + RenderViewDevToolsAgentHost* agent_host_;
|
| + DISALLOW_COPY_AND_ASSIGN(DevToolsAgentHostWebContentsObserver);
|
| +};
|
| +
|
| // static
|
| scoped_refptr<DevToolsAgentHost>
|
| DevToolsAgentHost::GetOrCreateFor(RenderViewHost* rvh) {
|
| @@ -275,6 +303,8 @@ void RenderViewDevToolsAgentHost::ConnectRenderViewHost(RenderViewHost* rvh,
|
| bool reattach) {
|
| render_view_host_ = rvh;
|
| rvh_observer_.reset(new DevToolsAgentHostRvhObserver(rvh, this));
|
| + web_contents_observer_.reset(new DevToolsAgentHostWebContentsObserver(
|
| + WebContents::FromRenderViewHost(rvh), this));
|
| if (reattach)
|
| Reattach(state_);
|
| }
|
| @@ -282,6 +312,7 @@ void RenderViewDevToolsAgentHost::ConnectRenderViewHost(RenderViewHost* rvh,
|
| void RenderViewDevToolsAgentHost::DisconnectRenderViewHost() {
|
| NotifyClientDetaching();
|
| rvh_observer_.reset();
|
| + web_contents_observer_.reset();
|
| render_view_host_ = NULL;
|
| }
|
|
|
| @@ -294,6 +325,12 @@ void RenderViewDevToolsAgentHost::RenderViewHostDestroyed(
|
| Release();
|
| }
|
|
|
| +void RenderViewDevToolsAgentHost::RenderViewCrashed() {
|
| + DevToolsManagerImpl::GetInstance()->DispatchOnInspectorFrontend(
|
| + this,
|
| + WebDevToolsAgent::inspectorTargetCrashedEvent().utf8());
|
| +}
|
| +
|
| bool RenderViewDevToolsAgentHost::OnRvhMessageReceived(
|
| const IPC::Message& message) {
|
| bool handled = true;
|
|
|