Index: ios/web_view/test/test_server.cc |
diff --git a/ios/web_view/test/test_server.cc b/ios/web_view/test/test_server.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..57a15824a6cea8f7d98493f4b6219c812dd1dc6f |
--- /dev/null |
+++ b/ios/web_view/test/test_server.cc |
@@ -0,0 +1,96 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "ios/web_view/test/test_server.h" |
+ |
+#include "base/base64.h" |
+#include "base/logging.h" |
+#include "base/memory/ptr_util.h" |
+#include "base/strings/string_util.h" |
+#include "net/test/embedded_test_server/embedded_test_server.h" |
+#include "net/test/embedded_test_server/http_request.h" |
+#include "net/test/embedded_test_server/http_response.h" |
+ |
+namespace { |
+ |
+const char kPageTitlePath[] = "/PageTitle?"; |
+const char kPageHTMLBodyPath[] = "/PageHTMLBody?"; |
+ |
+std::unique_ptr<net::EmbeddedTestServer> g_test_server; |
mmenke
2017/05/19 18:57:15
Per style guide, non-POD globals are forbidden.
michaeldo
2017/05/23 16:20:52
You're right, thank you. I've removed this class a
|
+ |
+std::unique_ptr<net::test_server::HttpResponse> EchoPageTitleInResponse( |
+ const net::test_server::HttpRequest& request) { |
+ DCHECK(base::StartsWith(request.relative_url, kPageTitlePath, |
+ base::CompareCase::INSENSITIVE_ASCII)); |
+ |
+ std::string html; |
+ html += "<html><head><title>"; |
+ html += request.relative_url.substr(strlen(kPageTitlePath)); |
+ html += "</title></head></html>"; |
+ |
+ auto http_response = base::MakeUnique<net::test_server::BasicHttpResponse>(); |
+ http_response->set_content(html); |
+ return std::move(http_response); |
+} |
+ |
+std::unique_ptr<net::test_server::HttpResponse> EchoPageHTMLBodyInResponse( |
mmenke
2017/05/19 18:57:15
I guess EmbeddedTestServer::AddDefaultHandlers() +
michaeldo
2017/05/23 16:20:52
Thanks for pointing that out, echotitle will work,
|
+ const net::test_server::HttpRequest& request) { |
+ DCHECK(base::StartsWith(request.relative_url, kPageHTMLBodyPath, |
+ base::CompareCase::INSENSITIVE_ASCII)); |
+ |
+ std::string body = request.relative_url.substr(strlen(kPageHTMLBodyPath)); |
+ |
+ std::string unescaped_body; |
+ base::Base64Decode(body, &unescaped_body); |
+ std::string html = "<html><body>" + unescaped_body + "</body></html>"; |
+ |
+ auto http_response = base::MakeUnique<net::test_server::BasicHttpResponse>(); |
+ http_response->set_content(html); |
+ return std::move(http_response); |
+} |
+ |
+std::unique_ptr<net::test_server::HttpResponse> TestRequestHandler( |
+ const net::test_server::HttpRequest& request) { |
+ if (base::StartsWith(request.relative_url, kPageTitlePath, |
+ base::CompareCase::INSENSITIVE_ASCII)) { |
+ return EchoPageTitleInResponse(request); |
+ } |
+ if (base::StartsWith(request.relative_url, kPageHTMLBodyPath, |
+ base::CompareCase::INSENSITIVE_ASCII)) { |
+ return EchoPageHTMLBodyInResponse(request); |
+ } |
+ return base::MakeUnique<net::test_server::BasicHttpResponse>(); |
+} |
+ |
+} // namespace |
+ |
+namespace ios_web_view { |
+ |
+bool TestServer::Start() { |
+ DCHECK(!g_test_server.get()); |
+ g_test_server = base::MakeUnique<net::EmbeddedTestServer>( |
+ net::EmbeddedTestServer::TYPE_HTTP); |
+ g_test_server->RegisterRequestHandler(base::Bind(&TestRequestHandler)); |
+ CHECK(g_test_server->Start()); |
+ return true; |
+} |
+ |
+void TestServer::Shutdown() { |
+ DCHECK(g_test_server.get()); |
+ g_test_server.reset(); |
+} |
+ |
+std::string TestServer::GetPageTitleURL(const std::string& title) { |
+ DCHECK(g_test_server); |
+ return g_test_server->GetURL(kPageTitlePath + title).spec(); |
+} |
+ |
+std::string TestServer::GetPageWithHTMLBody(const std::string& html) { |
+ DCHECK(g_test_server); |
+ |
+ std::string base64_html; |
+ base::Base64Encode(html, &base64_html); |
+ return g_test_server->GetURL(kPageHTMLBodyPath + base64_html).spec(); |
+} |
+} |
mmenke
2017/05/19 18:57:15
Blank line before ending namespace (For consistenc
mmenke
2017/05/19 18:57:15
} // namespace ios_web_view
michaeldo
2017/05/23 16:20:52
Ack. File removed.
|