blob: d4413cb80cc90353e3f2e2a9b9b6cef1ffa6bb2b [file] [log] [blame]
// Copyright 2016 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.
#import "ios/web/public/test/http_server/html_response_provider_impl.h"
#import "ios/web/public/test/http_server/response_provider.h"
#include "net/http/http_response_headers.h"
#include "net/http/http_status_code.h"
#include "url/gurl.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
namespace {
std::map<GURL, HtmlResponseProviderImpl::Response> BuildResponseMap(
const std::map<GURL, std::string>& responses_body,
scoped_refptr<net::HttpResponseHeaders> headers) {
std::map<GURL, HtmlResponseProviderImpl::Response> responses;
for (const std::pair<const GURL, std::string>& pair : responses_body) {
responses.insert(std::make_pair(
pair.first, HtmlResponseProviderImpl::Response(pair.second, headers)));
}
return responses;
}
std::map<GURL, HtmlResponseProviderImpl::Response> BuildResponseMap(
const std::map<GURL, std::pair<std::string, std::string>>& responses,
const std::map<GURL, scoped_refptr<net::HttpResponseHeaders>>& headers) {
std::map<GURL, HtmlResponseProviderImpl::Response> response_map;
for (const auto& pair : responses) {
response_map.insert(std::make_pair(
pair.first, HtmlResponseProviderImpl::Response(
pair.second.second, headers.at(pair.first))));
}
return response_map;
}
} // namespace
HtmlResponseProviderImpl::Response::Response(
const std::string& body,
const scoped_refptr<net::HttpResponseHeaders>& headers)
: body(body), headers(headers) {}
HtmlResponseProviderImpl::Response::Response(const Response& response)
: body(response.body), headers(response.headers) {}
HtmlResponseProviderImpl::Response::Response() : body(), headers() {}
HtmlResponseProviderImpl::Response::~Response() {}
HtmlResponseProviderImpl::HtmlResponseProviderImpl() : responses_() {}
// static
HtmlResponseProviderImpl::Response
HtmlResponseProviderImpl::GetRedirectResponse(
const GURL& destination_url,
const net::HttpStatusCode& http_status) {
auto response_headers = web::ResponseProvider::GetRedirectResponseHeaders(
destination_url.spec(), http_status);
return HtmlResponseProviderImpl::Response("", response_headers);
}
// static
HtmlResponseProviderImpl::Response HtmlResponseProviderImpl::GetSimpleResponse(
const std::string& body) {
auto response_headers =
web::ResponseProvider::GetResponseHeaders("text/html", net::HTTP_OK);
return HtmlResponseProviderImpl::Response(body, response_headers);
}
HtmlResponseProviderImpl::HtmlResponseProviderImpl(
const std::map<GURL, std::string>& responses)
: responses_(BuildResponseMap(
responses,
web::ResponseProvider::GetDefaultResponseHeaders())) {}
HtmlResponseProviderImpl::HtmlResponseProviderImpl(
const std::map<GURL, std::pair<std::string, std::string>>& responses)
: responses_(BuildResponseMap(
responses,
web::ResponseProvider::GetDefaultResponseHeaders(responses))) {}
HtmlResponseProviderImpl::HtmlResponseProviderImpl(
const std::map<GURL, HtmlResponseProviderImpl::Response>& responses)
: responses_(responses) {}
HtmlResponseProviderImpl::~HtmlResponseProviderImpl() {}
bool HtmlResponseProviderImpl::CanHandleRequest(
const web::ResponseProvider::Request& request) {
return responses_.find(request.url) != responses_.end();
}
void HtmlResponseProviderImpl::GetResponseHeadersAndBody(
const web::ResponseProvider::Request& request,
scoped_refptr<net::HttpResponseHeaders>* headers,
std::string* response_body) {
const Response& response = responses_.at(request.url);
*headers = response.headers;
*response_body = response.body;
}