diff options
author | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-17 12:11:03 +0000 |
---|---|---|
committer | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-17 12:11:03 +0000 |
commit | f3b93f6c0850c38cf9d827f6e9ed4a8b049e1ffc (patch) | |
tree | 96d60343d5da4f746950e34ad12d3346d82a6372 /content/browser/debugger | |
parent | 5178c4428af7b039f8456f46716097dd921e8056 (diff) | |
download | chromium_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.cc | 31 | ||||
-rw-r--r-- | content/browser/debugger/devtools_http_handler_impl.h | 9 |
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); }; |