summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authormnaganov@chromium.org <mnaganov@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-21 14:29:17 +0000
committermnaganov@chromium.org <mnaganov@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-21 14:29:17 +0000
commitecf1acef2857dbe88f28d6a722b4cab3d8045f1d (patch)
tree6b8d267e8f301a6828708a2fc839881a94967836 /content
parentbed80d86088634f50f40b84c93cf066a11697b30 (diff)
downloadchromium_src-ecf1acef2857dbe88f28d6a722b4cab3d8045f1d.zip
chromium_src-ecf1acef2857dbe88f28d6a722b4cab3d8045f1d.tar.gz
chromium_src-ecf1acef2857dbe88f28d6a722b4cab3d8045f1d.tar.bz2
Fix self-destruction of DevToolsHttpHandlerImpl on Stop.
Using scoped_refptr doesn't look as a good idea, as well as posting a task to the IO thread while destroying the object on the UI thread. R=pfeldman@chromium.org Review URL: http://codereview.chromium.org/9016009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@115334 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r--content/browser/debugger/devtools_http_handler_impl.cc12
-rw-r--r--content/browser/debugger/devtools_http_handler_impl.h3
-rw-r--r--content/public/browser/devtools_http_handler.h1
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: