SSL and add handlers in EmbeddedTestServer

(This is a re-landing of CL 1376593007)

As part of the migration of tests to EmbeddedTestServer, this CL modifies
EmbeddedTestServer to support SSLServerSocket and to add shared default handlers
that can be used by tests to mirror the SpawnedTestServer handlers. The major
changes are:

- SSL support through SSLServerSocket
- Adding SSLServerConfig to configure SSLServerSockets.
- Setting up default handlers for BrowserTestBase tests.
- Asynchronous HttpResponse.
- Moving EmbeddedTestServer to the net:: namespace.

BUG=496825, 548358, 548492
NOPRESUBMIT=TRUE
[email protected],[email protected],[email protected],[email protected]

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

Cr-Commit-Position: refs/heads/master@{#356616}
diff --git a/net/test/embedded_test_server/http_response.cc b/net/test/embedded_test_server/http_response.cc
index 04155b5..51e75610 100644
--- a/net/test/embedded_test_server/http_response.cc
+++ b/net/test/embedded_test_server/http_response.cc
@@ -15,6 +15,26 @@
 HttpResponse::~HttpResponse() {
 }
 
+RawHttpResponse::RawHttpResponse(const std::string& headers,
+                                 const std::string& contents)
+    : headers_(headers), contents_(contents) {}
+
+RawHttpResponse::~RawHttpResponse() {}
+
+void RawHttpResponse::SendResponse(const SendBytesCallback& send,
+                                   const SendCompleteCallback& done) {
+  std::string response;
+  if (!headers_.empty())
+    response = headers_ + "\r\n" + contents_;
+  else
+    response = contents_;
+  send.Run(response, done);
+}
+
+void RawHttpResponse::AddHeader(const std::string& key_value_pair) {
+  headers_.append(base::StringPrintf("%s\r\n", key_value_pair.c_str()));
+}
+
 BasicHttpResponse::BasicHttpResponse() : code_(HTTP_OK) {
 }
 
@@ -33,11 +53,10 @@
                       code_,
                       http_reason_phrase.c_str());
   base::StringAppendF(&response_builder, "Connection: close\r\n");
-  base::StringAppendF(&response_builder,
-                      "Content-Length: %" PRIuS "\r\n",
+
+  base::StringAppendF(&response_builder, "Content-Length: %" PRIuS "\r\n",
                       content_.size());
-  base::StringAppendF(&response_builder,
-                      "Content-Type: %s\r\n",
+  base::StringAppendF(&response_builder, "Content-Type: %s\r\n",
                       content_type_.c_str());
   for (size_t i = 0; i < custom_headers_.size(); ++i) {
     const std::string& header_name = custom_headers_[i].first;
@@ -54,5 +73,10 @@
   return response_builder + content_;
 }
 
+void BasicHttpResponse::SendResponse(const SendBytesCallback& send,
+                                     const SendCompleteCallback& done) {
+  send.Run(ToResponseString(), done);
+}
+
 }  // namespace test_server
 }  // namespace net