Commit 958c5f48 authored by Kouhei Ueno's avatar Kouhei Ueno Committed by Commit Bot

Add signed exchange envelope mimetype to Accept HTTP header

Bug: 803774
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_mojo
Change-Id: I0d523903974747847bb2863e22d9bfa2e148a50a
Reviewed-on: https://chromium-review.googlesource.com/961821
Commit-Queue: Kouhei Ueno <kouhei@chromium.org>
Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Reviewed-by: default avatarTsuyoshi Horo <horo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#543988}
parent 1d2b9806
......@@ -32,6 +32,7 @@
#include "content/browser/storage_partition_impl.h"
#include "content/browser/url_loader_factory_getter.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/browser/web_package/signed_exchange_consts.h"
#include "content/browser/web_package/signed_exchange_url_loader_factory_for_non_network_service.h"
#include "content/browser/web_package/web_package_request_handler.h"
#include "content/browser/webui/url_data_manager_backend.h"
......@@ -222,8 +223,14 @@ std::unique_ptr<network::ResourceRequest> CreateResourceRequest(
request_info->common_params.referrer.policy);
new_request->headers.AddHeadersFromString(
request_info->begin_params->headers);
new_request->headers.SetHeader(network::kAcceptHeader,
network::kFrameAcceptHeader);
std::string accept_value = network::kFrameAcceptHeader;
if (base::FeatureList::IsEnabled(features::kSignedHTTPExchange)) {
DCHECK(!accept_value.empty());
accept_value.append(kAcceptHeaderSignedExchangeSuffix);
}
new_request->headers.SetHeader(network::kAcceptHeader, accept_value);
new_request->resource_type = request_info->is_main_frame
? RESOURCE_TYPE_MAIN_FRAME
......
......@@ -68,6 +68,7 @@
#include "content/browser/streams/stream.h"
#include "content/browser/streams/stream_context.h"
#include "content/browser/streams/stream_registry.h"
#include "content/browser/web_package/signed_exchange_consts.h"
#include "content/common/net/url_request_service_worker_data.h"
#include "content/common/view_messages.h"
#include "content/public/browser/browser_child_process_host.h"
......@@ -1909,7 +1910,14 @@ void ResourceDispatcherHostImpl::BeginNavigationRequest(
net::HttpRequestHeaders headers;
headers.AddHeadersFromString(info.begin_params->headers);
headers.SetHeader(network::kAcceptHeader, network::kFrameAcceptHeader);
std::string accept_value = network::kFrameAcceptHeader;
if (base::FeatureList::IsEnabled(features::kSignedHTTPExchange)) {
DCHECK(!accept_value.empty());
accept_value.append(kAcceptHeaderSignedExchangeSuffix);
}
headers.SetHeader(network::kAcceptHeader, accept_value);
new_request->SetExtraRequestHeaders(headers);
new_request->SetLoadFlags(load_flags);
......
......@@ -7,8 +7,12 @@
namespace content {
constexpr char kAcceptHeaderSignedExchangeSuffix[] =
",application/signed-exchange;v=b0";
// Field names defined in the application/http-exchange+cbor content type:
// https://wicg.github.io/webpackage/draft-yasskin-http-origin-signed-responses.html#rfc.section.5
constexpr char kCertSha256Key[] = "certSha256";
constexpr char kDateKey[] = "date";
constexpr char kExpiresKey[] = "expires";
......
......@@ -27,11 +27,13 @@
#include "net/cert/cert_verify_result.h"
#include "net/cert/mock_cert_verifier.h"
#include "net/test/cert_test_util.h"
#include "net/test/embedded_test_server/http_request.h"
#include "net/test/test_data_directory.h"
#include "net/test/url_request/url_request_mock_http_job.h"
#include "net/url_request/url_request_filter.h"
#include "net/url_request/url_request_interceptor.h"
#include "services/network/public/cpp/features.h"
#include "testing/gmock/include/gmock/gmock-matchers.h"
namespace content {
......@@ -193,6 +195,14 @@ IN_PROC_BROWSER_TEST_P(WebPackageRequestHandlerBrowserTest, Simple) {
mock_cert_verifier_->AddResultForCertAndHost(original_cert, "*.example.org",
dummy_result, net::OK);
embedded_test_server()->RegisterRequestMonitor(
base::BindRepeating([](const net::test_server::HttpRequest& request) {
if (request.relative_url == "/htxg/test.example.org_test.htxg") {
const auto& accept_value = request.headers.find("accept")->second;
EXPECT_THAT(accept_value,
::testing::HasSubstr("application/signed-exchange;v=b0"));
}
}));
embedded_test_server()->ServeFilesFromSourceDirectory("content/test/data");
ASSERT_TRUE(embedded_test_server()->Start());
GURL url = embedded_test_server()->GetURL("/htxg/test.example.org_test.htxg");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment