Revert "Revert of Replace StreamListenSocket with StreamSocket in HttpServer. (patchset #29 of https://codereview.chromium.org/296053012/)"

This reverts commit 0b2f33f4a88efbd203b0623324ad4114e3bb9d23.

This is relanding CL of https://codereview.chromium.org/296053012/, which broke http server unittests because http server doesn't send response synchronously any more.
This CL fixes unittests by reading responses completely.

Patch set #1 is same to the original CL.
Patch set #2 is the diff.

BUG=371906
TBR=pfeldman@chromium.org,darin@chromium.org,gunsch@chromium.org,mnaganov@chromium.org

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

Cr-Commit-Position: refs/heads/master@{#291784}


CrOS-Libchrome-Original-Commit: 38c3ae72c9743dbe172779477917bf24bc25ab97
diff --git a/mojo/spy/websocket_server.cc b/mojo/spy/websocket_server.cc
index bf4c96a..20e2da6 100644
--- a/mojo/spy/websocket_server.cc
+++ b/mojo/spy/websocket_server.cc
@@ -14,7 +14,7 @@
 #include "net/base/net_errors.h"
 #include "net/server/http_server_request_info.h"
 #include "net/server/http_server_response_info.h"
-#include "net/socket/tcp_listen_socket.h"
+#include "net/socket/tcp_server_socket.h"
 #include "url/gurl.h"
 
 namespace mojo {
@@ -42,8 +42,10 @@
 }
 
 bool WebSocketServer::Start() {
-  net::TCPListenSocketFactory factory("0.0.0.0", port_);
-  web_server_ = new net::HttpServer(factory, this);
+  scoped_ptr<net::ServerSocket> server_socket(
+      new net::TCPServerSocket(NULL, net::NetLog::Source()));
+  server_socket->ListenWithAddressAndPort("0.0.0.0", port_, 1);
+  web_server_.reset(new net::HttpServer(server_socket.Pass(), this));
   net::IPEndPoint address;
   int error = web_server_->GetLocalAddress(&address);
   port_ = address.port();
@@ -91,9 +93,7 @@
     const net::HttpServerRequestInfo& info) {
   if (connection_id_ != kNotConnected) {
     // Reject connection since we already have our client.
-    base::MessageLoop::current()->PostTask(
-        FROM_HERE,
-        base::Bind(&net::HttpServer::Close, web_server_, connection_id));
+    web_server_->Close(connection_id);
     return;
   }
   // Accept the connection.
@@ -157,4 +157,3 @@
 }
 
 }  // namespace mojo
-
diff --git a/mojo/spy/websocket_server.h b/mojo/spy/websocket_server.h
index 1811c0c..eb685c7 100644
--- a/mojo/spy/websocket_server.h
+++ b/mojo/spy/websocket_server.h
@@ -66,7 +66,7 @@
  private:
   int port_;
   int connection_id_;
-  scoped_refptr<net::HttpServer> web_server_;
+  scoped_ptr<net::HttpServer> web_server_;
   spy_api::SpyServerPtr spy_server_;
 
   DISALLOW_COPY_AND_ASSIGN(WebSocketServer);