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..b7686c49490d0ea2bb1fcbccc6bd931e44c7e149 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" |
@@ -63,12 +64,15 @@ const char kTargetFaviconUrlField[] = "faviconUrl"; |
const char kTargetWebSocketDebuggerUrlField[] = "webSocketDebuggerUrl"; |
const char kTargetDevtoolsFrontendUrlField[] = "devtoolsFrontendUrl"; |
+// Maximum write buffer size of devtools websocket. |
+const int32 kSendBufferSizeForDevToolsWebSocket = 100 * 1024 * 1024; // 100Mb |
+ |
// An internal implementation of DevToolsClientHost that delegates |
// messages sent for DevToolsClient to a DebuggerShell instance. |
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 +121,7 @@ class DevToolsClientHostImpl : public DevToolsClientHost { |
private: |
base::MessageLoop* message_loop_; |
- net::HttpServer* server_; |
+ base::WeakPtr<net::HttpServer> server_; |
int connection_id_; |
bool is_closed_; |
std::string detach_reason_; |
@@ -147,11 +151,11 @@ int DevToolsHttpHandler::GetFrontendResourceId(const std::string& name) { |
// static |
DevToolsHttpHandler* DevToolsHttpHandler::Start( |
- const net::StreamListenSocketFactory* socket_factory, |
+ scoped_ptr<net::ServerSocketFactory> server_socket_factory, |
const std::string& frontend_url, |
DevToolsHttpHandlerDelegate* delegate) { |
DevToolsHttpHandlerImpl* http_handler = |
- new DevToolsHttpHandlerImpl(socket_factory, |
+ new DevToolsHttpHandlerImpl(server_socket_factory.Pass(), |
frontend_url, |
delegate); |
http_handler->Start(); |
@@ -324,7 +328,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_->GetWeakPtr(), |
+ connection_id); |
browser_target_->RegisterDomainHandler( |
devtools::Tracing::kName, |
new DevToolsTracingHandler(DevToolsTracingHandler::Browser), |
@@ -605,7 +610,7 @@ void DevToolsHttpHandlerImpl::OnWebSocketRequestUI( |
} |
DevToolsClientHostImpl* client_host = new DevToolsClientHostImpl( |
- thread_->message_loop(), server_.get(), connection_id); |
+ thread_->message_loop(), server_->GetWeakPtr(), connection_id); |
connection_to_client_host_ui_[connection_id] = client_host; |
DevToolsManager::GetInstance()-> |
@@ -639,11 +644,11 @@ void DevToolsHttpHandlerImpl::OnCloseUI(int connection_id) { |
} |
DevToolsHttpHandlerImpl::DevToolsHttpHandlerImpl( |
- const net::StreamListenSocketFactory* socket_factory, |
+ scoped_ptr<net::ServerSocketFactory> server_socket_factory, |
const std::string& frontend_url, |
DevToolsHttpHandlerDelegate* delegate) |
: frontend_url_(frontend_url), |
- socket_factory_(socket_factory), |
+ server_socket_factory_(server_socket_factory.Pass()), |
delegate_(delegate) { |
if (frontend_url_.empty()) |
frontend_url_ = "/devtools/devtools.html"; |
@@ -654,12 +659,13 @@ 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_factory_->CreateAndListen(), |
+ 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 +704,7 @@ void DevToolsHttpHandlerImpl::SendJson(int connection_id, |
thread_->message_loop()->PostTask( |
FROM_HERE, |
base::Bind(&net::HttpServer::SendResponse, |
- server_.get(), |
+ server_->GetWeakPtr(), |
connection_id, |
response)); |
} |
@@ -711,7 +717,7 @@ void DevToolsHttpHandlerImpl::Send200(int connection_id, |
thread_->message_loop()->PostTask( |
FROM_HERE, |
base::Bind(&net::HttpServer::Send200, |
- server_.get(), |
+ server_->GetWeakPtr(), |
connection_id, |
data, |
mime_type)); |
@@ -722,7 +728,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_->GetWeakPtr(), |
+ connection_id)); |
} |
void DevToolsHttpHandlerImpl::Send500(int connection_id, |
@@ -731,7 +739,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_->GetWeakPtr(), |
+ connection_id, |
message)); |
} |
@@ -742,8 +752,16 @@ void DevToolsHttpHandlerImpl::AcceptWebSocket( |
return; |
thread_->message_loop()->PostTask( |
FROM_HERE, |
- base::Bind(&net::HttpServer::AcceptWebSocket, server_.get(), |
- connection_id, request)); |
+ base::Bind(&net::HttpServer::SetSendBufferSize, |
+ server_->GetWeakPtr(), |
+ connection_id, |
+ kSendBufferSizeForDevToolsWebSocket)); |
+ thread_->message_loop()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&net::HttpServer::AcceptWebSocket, |
+ server_->GetWeakPtr(), |
+ connection_id, |
+ request)); |
} |
base::DictionaryValue* DevToolsHttpHandlerImpl::SerializeTarget( |