Chromium Code Reviews| 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.
|