Commit d0d6d202 authored by byungchul's avatar byungchul Committed by Commit bot

Stop devtools if socket for http server cannot be instantiated.

Currently, it crashes entire chrome. This CL is to stop devtools gracefully
when socket for http server cannot be instantiated because of any reasons
including address-already-in-use error.

BUG=407999

Review URL: https://codereview.chromium.org/516483002

Cr-Commit-Position: refs/heads/master@{#292341}
parent bed49a66
......@@ -252,9 +252,18 @@ void DevToolsHttpHandlerImpl::Stop() {
base::Bind(&DevToolsHttpHandlerImpl::ResetHandlerThreadAndRelease, this));
}
void DevToolsHttpHandlerImpl::StopWithoutRelease() {
if (!thread_)
return;
BrowserThread::PostTaskAndReply(
BrowserThread::FILE, FROM_HERE,
base::Bind(&DevToolsHttpHandlerImpl::StopHandlerThread, this),
base::Bind(&DevToolsHttpHandlerImpl::ResetHandlerThread, this));
}
GURL DevToolsHttpHandlerImpl::GetFrontendURL() {
net::IPEndPoint ip_address;
if (server_->GetLocalAddress(&ip_address))
if (server_ && server_->GetLocalAddress(&ip_address))
return GURL();
return GURL(std::string("http://") + ip_address.ToString() + frontend_url_);
}
......@@ -699,8 +708,17 @@ DevToolsHttpHandlerImpl::DevToolsHttpHandlerImpl(
// Runs on the handler thread
void DevToolsHttpHandlerImpl::Init() {
server_.reset(new net::HttpServer(server_socket_factory_->CreateAndListen(),
this));
scoped_ptr<net::ServerSocket> server_socket =
server_socket_factory_->CreateAndListen();
if (!server_socket) {
LOG(ERROR) << "Cannot start http server for devtools. Stop devtools.";
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
base::Bind(&DevToolsHttpHandlerImpl::StopWithoutRelease, this));
return;
}
server_.reset(new net::HttpServer(server_socket.Pass(), this));
if (!active_port_output_directory_.empty())
WriteActivePortToUserProfile();
}
......
......@@ -89,6 +89,7 @@ class DevToolsHttpHandlerImpl
void StartHandlerThread();
void StopHandlerThread();
void StopWithoutRelease();
void WriteActivePortToUserProfile();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment