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( |