Chromium Code Reviews| Index: content/browser/devtools/devtools_http_handler_impl.cc |
| diff --git a/content/browser/devtools/devtools_http_handler_impl.cc b/content/browser/devtools/devtools_http_handler_impl.cc |
| index 8678848564d2be587c1467ce22bd21e4201c2a0f..037a9f13132b6082cb9f2bcde9720e8a6648839f 100644 |
| --- a/content/browser/devtools/devtools_http_handler_impl.cc |
| +++ b/content/browser/devtools/devtools_http_handler_impl.cc |
| @@ -39,6 +39,7 @@ |
| #include "net/base/ip_endpoint.h" |
| #include "net/server/http_server_request_info.h" |
| #include "net/server/http_server_response_info.h" |
| +#include "net/socket/server_socket.h" |
| #if defined(OS_ANDROID) |
| #include "base/android/build_info.h" |
| @@ -68,7 +69,7 @@ const char kTargetDevtoolsFrontendUrlField[] = "devtoolsFrontendUrl"; |
| class DevToolsClientHostImpl : public DevToolsClientHost { |
| public: |
| DevToolsClientHostImpl(base::MessageLoop* message_loop, |
| - net::HttpServer* server, |
| + base::WeakPtr<net::HttpServer> server, |
| int connection_id) |
| : message_loop_(message_loop), |
| server_(server), |
| @@ -117,7 +118,7 @@ class DevToolsClientHostImpl : public DevToolsClientHost { |
| private: |
| base::MessageLoop* message_loop_; |
| - net::HttpServer* server_; |
| + base::WeakPtr<net::HttpServer> server_; |
|
pfeldman
2014/05/22 06:01:05
It was not refcounting it, so you should be fine w
byungchul
2014/05/28 01:19:35
It is used in base::Bind() not to call when server
Ryan Sleevi
2014/05/28 01:36:26
Are you sure it's necessary? We may be able to get
byungchul
2014/05/30 00:19:02
It's challenging to make HttpServer callback-drive
|
| int connection_id_; |
| bool is_closed_; |
| std::string detach_reason_; |
| @@ -147,11 +148,11 @@ int DevToolsHttpHandler::GetFrontendResourceId(const std::string& name) { |
| // static |
| DevToolsHttpHandler* DevToolsHttpHandler::Start( |
| - const net::StreamListenSocketFactory* socket_factory, |
| + scoped_ptr<net::ServerSocket> server_socket, |
| const std::string& frontend_url, |
| DevToolsHttpHandlerDelegate* delegate) { |
| DevToolsHttpHandlerImpl* http_handler = |
| - new DevToolsHttpHandlerImpl(socket_factory, |
| + new DevToolsHttpHandlerImpl(server_socket.Pass(), |
| frontend_url, |
| delegate); |
| http_handler->Start(); |
| @@ -324,7 +325,8 @@ void DevToolsHttpHandlerImpl::OnWebSocketRequest( |
| server_->Send500(connection_id, "Another client already attached"); |
| return; |
| } |
| - browser_target_ = new DevToolsBrowserTarget(server_.get(), connection_id); |
| + browser_target_ = new DevToolsBrowserTarget(server_->AsWeakPtr(), |
| + connection_id); |
| browser_target_->RegisterDomainHandler( |
| devtools::Tracing::kName, |
| new DevToolsTracingHandler(DevToolsTracingHandler::Browser), |
| @@ -605,7 +607,7 @@ void DevToolsHttpHandlerImpl::OnWebSocketRequestUI( |
| } |
| DevToolsClientHostImpl* client_host = new DevToolsClientHostImpl( |
| - thread_->message_loop(), server_.get(), connection_id); |
| + thread_->message_loop(), server_->AsWeakPtr(), connection_id); |
| connection_to_client_host_ui_[connection_id] = client_host; |
| DevToolsManager::GetInstance()-> |
| @@ -639,11 +641,11 @@ void DevToolsHttpHandlerImpl::OnCloseUI(int connection_id) { |
| } |
| DevToolsHttpHandlerImpl::DevToolsHttpHandlerImpl( |
| - const net::StreamListenSocketFactory* socket_factory, |
| + scoped_ptr<net::ServerSocket> server_socket, |
| const std::string& frontend_url, |
| DevToolsHttpHandlerDelegate* delegate) |
| : frontend_url_(frontend_url), |
| - socket_factory_(socket_factory), |
| + server_socket_(server_socket.Pass()), |
| delegate_(delegate) { |
| if (frontend_url_.empty()) |
| frontend_url_ = "/devtools/devtools.html"; |
| @@ -654,12 +656,12 @@ DevToolsHttpHandlerImpl::DevToolsHttpHandlerImpl( |
| // Runs on the handler thread |
| void DevToolsHttpHandlerImpl::Init() { |
| - server_ = new net::HttpServer(*socket_factory_.get(), this); |
| + server_.reset(new net::HttpServer(server_socket_.Pass(), this)); |
| } |
| // Runs on the handler thread |
| void DevToolsHttpHandlerImpl::Teardown() { |
| - server_ = NULL; |
| + server_.reset(NULL); |
| } |
| // Runs on FILE thread to make sure that it is serialized against |
| @@ -698,7 +700,7 @@ void DevToolsHttpHandlerImpl::SendJson(int connection_id, |
| thread_->message_loop()->PostTask( |
| FROM_HERE, |
| base::Bind(&net::HttpServer::SendResponse, |
| - server_.get(), |
| + server_->AsWeakPtr(), |
| connection_id, |
| response)); |
| } |
| @@ -711,7 +713,7 @@ void DevToolsHttpHandlerImpl::Send200(int connection_id, |
| thread_->message_loop()->PostTask( |
| FROM_HERE, |
| base::Bind(&net::HttpServer::Send200, |
| - server_.get(), |
| + server_->AsWeakPtr(), |
| connection_id, |
| data, |
| mime_type)); |
| @@ -722,7 +724,9 @@ void DevToolsHttpHandlerImpl::Send404(int connection_id) { |
| return; |
| thread_->message_loop()->PostTask( |
| FROM_HERE, |
| - base::Bind(&net::HttpServer::Send404, server_.get(), connection_id)); |
| + base::Bind(&net::HttpServer::Send404, |
| + server_->AsWeakPtr(), |
| + connection_id)); |
| } |
| void DevToolsHttpHandlerImpl::Send500(int connection_id, |
| @@ -731,7 +735,9 @@ void DevToolsHttpHandlerImpl::Send500(int connection_id, |
| return; |
| thread_->message_loop()->PostTask( |
| FROM_HERE, |
| - base::Bind(&net::HttpServer::Send500, server_.get(), connection_id, |
| + base::Bind(&net::HttpServer::Send500, |
| + server_->AsWeakPtr(), |
| + connection_id, |
| message)); |
| } |
| @@ -742,8 +748,10 @@ void DevToolsHttpHandlerImpl::AcceptWebSocket( |
| return; |
| thread_->message_loop()->PostTask( |
| FROM_HERE, |
| - base::Bind(&net::HttpServer::AcceptWebSocket, server_.get(), |
| - connection_id, request)); |
| + base::Bind(&net::HttpServer::AcceptWebSocket, |
| + server_->AsWeakPtr(), |
| + connection_id, |
| + request)); |
| } |
| base::DictionaryValue* DevToolsHttpHandlerImpl::SerializeTarget( |