blob: 06170c98ee67442c19d62448c628f694793c210a [file] [log] [blame]
// Copyright 2018 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/testing/embedded_test_server_handlers.h"
#include <string>
#include "base/strings/stringprintf.h"
#include "net/base/escape.h"
#include "net/test/embedded_test_server/http_request.h"
#include "net/test/embedded_test_server/http_response.h"
#include "url/gurl.h"
namespace {
// Extracts and escapes url spec from the query.
std::string ExtractUlrSpecFromQuery(
const net::test_server::HttpRequest& request) {
GURL request_url = request.GetURL();
std::string spec = net::UnescapeBinaryURLComponent(request_url.query());
// Escape the URL spec.
GURL url(spec);
return url.is_valid() ? net::EscapeForHTML(url.spec()) : spec;
}
} // namespace
namespace testing {
const char kTestFormPage[] = "ios.testing.HandleForm";
const char kTestFormFieldValue[] = "test-value";
std::unique_ptr<net::test_server::HttpResponse> HandleIFrame(
const net::test_server::HttpRequest& request) {
auto http_response = std::make_unique<net::test_server::BasicHttpResponse>();
http_response->set_content_type("text/html");
http_response->set_content(base::StringPrintf(
"<html><head></head><body><iframe src='%s'></iframe></body></html>",
ExtractUlrSpecFromQuery(request).c_str()));
return std::move(http_response);
}
std::unique_ptr<net::test_server::HttpResponse> HandleEchoQueryOrCloseSocket(
const bool& responds_with_content,
const net::test_server::HttpRequest& request) {
if (!responds_with_content) {
return std::make_unique<net::test_server::RawHttpResponse>(
/*headers=*/"", /*contents=*/"");
}
auto response = std::make_unique<net::test_server::BasicHttpResponse>();
response->set_content_type("text/html");
response->set_content(request.GetURL().query());
return std::move(response);
}
std::unique_ptr<net::test_server::HttpResponse> HandleForm(
const net::test_server::HttpRequest& request) {
std::string form_action = ExtractUlrSpecFromQuery(request);
auto response = std::make_unique<net::test_server::BasicHttpResponse>();
response->set_content_type("text/html");
response->set_content(base::StringPrintf(
"<form method='post' id='form' action='%s'>"
" <input type='text' name='test-name' value='%s'>"
"</form>"
"%s",
form_action.c_str(), kTestFormFieldValue, kTestFormPage));
return std::move(response);
}
} // namespace testing