diff options
-rw-r--r-- | content/browser/debugger/devtools_http_handler_impl.cc | 12 | ||||
-rw-r--r-- | content/browser/debugger/devtools_http_handler_impl.h | 3 | ||||
-rw-r--r-- | content/public/browser/devtools_http_handler.h | 1 |
3 files changed, 9 insertions, 7 deletions
diff --git a/content/browser/debugger/devtools_http_handler_impl.cc b/content/browser/debugger/devtools_http_handler_impl.cc index e641a7f..859ca0d 100644 --- a/content/browser/debugger/devtools_http_handler_impl.cc +++ b/content/browser/debugger/devtools_http_handler_impl.cc @@ -160,8 +160,7 @@ void DevToolsHttpHandlerImpl::Start() { void DevToolsHttpHandlerImpl::Stop() { BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, - base::Bind(&DevToolsHttpHandlerImpl::Teardown, this)); - protect_ptr_ = NULL; + base::Bind(&DevToolsHttpHandlerImpl::TeardownAndRelease, this)); } void DevToolsHttpHandlerImpl::OnHttpRequest( @@ -467,10 +466,10 @@ DevToolsHttpHandlerImpl::DevToolsHttpHandlerImpl( : ip_(ip), port_(port), overridden_frontend_url_(frontend_host), - delegate_(delegate), - ALLOW_THIS_IN_INITIALIZER_LIST(protect_ptr_(this)) { + delegate_(delegate) { if (overridden_frontend_url_.empty()) overridden_frontend_url_ = "/devtools/devtools.html"; + AddRef(); } void DevToolsHttpHandlerImpl::Init() { @@ -478,8 +477,11 @@ void DevToolsHttpHandlerImpl::Init() { } // Run on I/O thread -void DevToolsHttpHandlerImpl::Teardown() { +void DevToolsHttpHandlerImpl::TeardownAndRelease() { server_ = NULL; + BrowserThread::PostTask( + BrowserThread::UI, FROM_HERE, + base::Bind(&DevToolsHttpHandlerImpl::Release, this)); } void DevToolsHttpHandlerImpl::Bind(net::URLRequest* request, diff --git a/content/browser/debugger/devtools_http_handler_impl.h b/content/browser/debugger/devtools_http_handler_impl.h index 69ead40..e9be675 100644 --- a/content/browser/debugger/devtools_http_handler_impl.h +++ b/content/browser/debugger/devtools_http_handler_impl.h @@ -70,7 +70,7 @@ class DevToolsHttpHandlerImpl int bytes_read) OVERRIDE; void Init(); - void Teardown(); + void TeardownAndRelease(); void Bind(net::URLRequest* request, int connection_id); void RequestCompleted(net::URLRequest* request); @@ -100,7 +100,6 @@ class DevToolsHttpHandlerImpl ConnectionToClientHostMap; ConnectionToClientHostMap connection_to_client_host_ui_; scoped_ptr<DevToolsHttpHandlerDelegate> delegate_; - scoped_refptr<DevToolsHttpHandlerImpl> protect_ptr_; DISALLOW_COPY_AND_ASSIGN(DevToolsHttpHandlerImpl); }; diff --git a/content/public/browser/devtools_http_handler.h b/content/public/browser/devtools_http_handler.h index b8e4be7..58e7d9f 100644 --- a/content/public/browser/devtools_http_handler.h +++ b/content/public/browser/devtools_http_handler.h @@ -27,6 +27,7 @@ class DevToolsHttpHandler { DevToolsHttpHandlerDelegate* delegate); // Called from the main thread in order to stop protocol handler. + // Automatically destroys the handler instance. virtual void Stop() = 0; protected: |