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