summaryrefslogtreecommitdiffstats
path: root/content/browser/debugger
diff options
context:
space:
mode:
authorpfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-17 12:11:03 +0000
committerpfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-17 12:11:03 +0000
commitf3b93f6c0850c38cf9d827f6e9ed4a8b049e1ffc (patch)
tree96d60343d5da4f746950e34ad12d3346d82a6372 /content/browser/debugger
parent5178c4428af7b039f8456f46716097dd921e8056 (diff)
downloadchromium_src-f3b93f6c0850c38cf9d827f6e9ed4a8b049e1ffc.zip
chromium_src-f3b93f6c0850c38cf9d827f6e9ed4a8b049e1ffc.tar.gz
chromium_src-f3b93f6c0850c38cf9d827f6e9ed4a8b049e1ffc.tar.bz2
DevTools: [remote debugging] terminate web socket connection upon renderer disconnect.
BUG=154253 Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=162123 Review URL: https://chromiumcodereview.appspot.com/11141024 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@162355 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/debugger')
-rw-r--r--content/browser/debugger/devtools_http_handler_impl.cc31
-rw-r--r--content/browser/debugger/devtools_http_handler_impl.h9
2 files changed, 39 insertions, 1 deletions
diff --git a/content/browser/debugger/devtools_http_handler_impl.cc b/content/browser/debugger/devtools_http_handler_impl.cc
index 60378dd..9d55e02 100644
--- a/content/browser/debugger/devtools_http_handler_impl.cc
+++ b/content/browser/debugger/devtools_http_handler_impl.cc
@@ -28,6 +28,8 @@
#include "content/public/browser/devtools_manager.h"
#include "content/public/browser/favicon_status.h"
#include "content/public/browser/navigation_entry.h"
+#include "content/public/browser/notification_service.h"
+#include "content/public/browser/notification_types.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/render_widget_host.h"
@@ -93,12 +95,17 @@ class DevToolsClientHostImpl : public DevToolsClientHost {
int connection_id)
: message_loop_(message_loop),
server_(server),
- connection_id_(connection_id) {
+ connection_id_(connection_id),
+ is_closed_(false) {
}
+
~DevToolsClientHostImpl() {}
// DevToolsClientHost interface
virtual void InspectedContentsClosing() {
+ if (is_closed_)
+ return;
+ is_closed_ = true;
message_loop_->PostTask(
FROM_HERE,
base::Bind(&net::HttpServer::Close, server_, connection_id_));
@@ -121,6 +128,7 @@ class DevToolsClientHostImpl : public DevToolsClientHost {
MessageLoop* message_loop_;
net::HttpServer* server_;
int connection_id_;
+ bool is_closed_;
};
} // namespace
@@ -219,6 +227,23 @@ static std::string GetMimeType(const std::string& filename) {
return "text/plain";
}
+void DevToolsHttpHandlerImpl::Observe(int type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ RenderProcessHost* process = Source<RenderProcessHost>(source).ptr();
+ DevToolsManager* manager = DevToolsManager::GetInstance();
+ for (ConnectionToClientHostMap::iterator it =
+ connection_to_client_host_ui_.begin();
+ it != connection_to_client_host_ui_.end(); ++it) {
+ DevToolsAgentHost* agent = manager->GetDevToolsAgentHostFor(it->second);
+ if (!agent)
+ continue;
+ RenderViewHost* rvh = DevToolsAgentHostRegistry::GetRenderViewHost(agent);
+ if (rvh && rvh->GetProcess() == process)
+ it->second->InspectedContentsClosing();
+ }
+}
+
void DevToolsHttpHandlerImpl::OnHttpRequest(
int connection_id,
const net::HttpServerRequestInfo& info) {
@@ -560,6 +585,10 @@ DevToolsHttpHandlerImpl::DevToolsHttpHandlerImpl(
default_binding_.reset(new DevToolsDefaultBindingHandler);
binding_ = default_binding_.get();
+ registrar_.Add(this, NOTIFICATION_RENDERER_PROCESS_TERMINATED,
+ content::NotificationService::AllBrowserContextsAndSources());
+ registrar_.Add(this, NOTIFICATION_RENDERER_PROCESS_CLOSED,
+ content::NotificationService::AllBrowserContextsAndSources());
AddRef();
}
diff --git a/content/browser/debugger/devtools_http_handler_impl.h b/content/browser/debugger/devtools_http_handler_impl.h
index 641ec03..de259752 100644
--- a/content/browser/debugger/devtools_http_handler_impl.h
+++ b/content/browser/debugger/devtools_http_handler_impl.h
@@ -15,6 +15,8 @@
#include "content/common/content_export.h"
#include "content/public/browser/devtools_http_handler.h"
#include "content/public/browser/devtools_http_handler_delegate.h"
+#include "content/public/browser/notification_observer.h"
+#include "content/public/browser/notification_registrar.h"
#include "net/server/http_server.h"
namespace base {
@@ -35,6 +37,7 @@ class RenderViewHost;
class DevToolsHttpHandlerImpl
: public DevToolsHttpHandler,
+ public NotificationObserver,
public base::RefCountedThreadSafe<DevToolsHttpHandlerImpl>,
public net::HttpServer::Delegate {
private:
@@ -58,6 +61,11 @@ class DevToolsHttpHandlerImpl
RenderViewHostBinding* binding) OVERRIDE;
virtual GURL GetFrontendURL(RenderViewHost* render_view_host) OVERRIDE;
+ // NotificationObserver implementation.
+ virtual void Observe(int type,
+ const NotificationSource& source,
+ const NotificationDetails& details) OVERRIDE;
+
// net::HttpServer::Delegate implementation.
virtual void OnHttpRequest(int connection_id,
const net::HttpServerRequestInfo& info) OVERRIDE;
@@ -121,6 +129,7 @@ class DevToolsHttpHandlerImpl
scoped_ptr<DevToolsHttpHandlerDelegate> delegate_;
RenderViewHostBinding* binding_;
scoped_ptr<RenderViewHostBinding> default_binding_;
+ NotificationRegistrar registrar_;
DISALLOW_COPY_AND_ASSIGN(DevToolsHttpHandlerImpl);
};