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() { ...@@ -252,9 +252,18 @@ void DevToolsHttpHandlerImpl::Stop() {
base::Bind(&DevToolsHttpHandlerImpl::ResetHandlerThreadAndRelease, this)); 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() { GURL DevToolsHttpHandlerImpl::GetFrontendURL() {
net::IPEndPoint ip_address; net::IPEndPoint ip_address;
if (server_->GetLocalAddress(&ip_address)) if (server_ && server_->GetLocalAddress(&ip_address))
return GURL(); return GURL();
return GURL(std::string("http://") + ip_address.ToString() + frontend_url_); return GURL(std::string("http://") + ip_address.ToString() + frontend_url_);
} }
...@@ -699,8 +708,17 @@ DevToolsHttpHandlerImpl::DevToolsHttpHandlerImpl( ...@@ -699,8 +708,17 @@ DevToolsHttpHandlerImpl::DevToolsHttpHandlerImpl(
// Runs on the handler thread // Runs on the handler thread
void DevToolsHttpHandlerImpl::Init() { void DevToolsHttpHandlerImpl::Init() {
server_.reset(new net::HttpServer(server_socket_factory_->CreateAndListen(), scoped_ptr<net::ServerSocket> server_socket =
this)); 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()) if (!active_port_output_directory_.empty())
WriteActivePortToUserProfile(); WriteActivePortToUserProfile();
} }
......
...@@ -89,6 +89,7 @@ class DevToolsHttpHandlerImpl ...@@ -89,6 +89,7 @@ class DevToolsHttpHandlerImpl
void StartHandlerThread(); void StartHandlerThread();
void StopHandlerThread(); void StopHandlerThread();
void StopWithoutRelease();
void WriteActivePortToUserProfile(); 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