Commit c7d715dc authored by Yutaka Hirano's avatar Yutaka Hirano Committed by Commit Bot

Set "origin" header from ResourceRequest::RequestorOrigin

In BaseFetchContext, "origin" header is set from
 - FetchContext's security origin, or
 - the referrer string.

On the other hand,
https://fetch.spec.whatwg.org/#http-network-or-cache-fetch says:

  If the CORS flag is set, httpRequest’s method is neither `GET` nor
  `HEAD`, or httpRequest’s mode is "websocket", then append
  `Origin`/the result of serializing a request origin with
  httpRequest, to httpRequest’s header list.

This CL makes it a bit more spec conformant by setting the header based
on ResourceRequest::RequestorOrigin.

Bug: 914739
Change-Id: Ia911ca1f2efaf2be080d891b1258f87230d57f2d
Reviewed-on: https://chromium-review.googlesource.com/c/1388344
Commit-Queue: Yutaka Hirano <yhirano@chromium.org>
Reviewed-by: default avatarHiroshige Hayashizaki <hiroshige@chromium.org>
Reviewed-by: default avatarJochen Eisinger <jochen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#626889}
parent e4753f3c
...@@ -113,15 +113,12 @@ void BaseFetchContext::AddAdditionalRequestHeaders(ResourceRequest& request) { ...@@ -113,15 +113,12 @@ void BaseFetchContext::AddAdditionalRequestHeaders(ResourceRequest& request) {
// and store it elsewhere. See https://crbug.com/850813. // and store it elsewhere. See https://crbug.com/850813.
request.SetHTTPReferrer(SecurityPolicy::GenerateReferrer( request.SetHTTPReferrer(SecurityPolicy::GenerateReferrer(
referrer_policy_to_use, request.Url(), referrer_to_use)); referrer_policy_to_use, request.Url(), referrer_to_use));
request.SetHTTPOriginIfNeeded(
fetch_client_settings_object.GetSecurityOrigin());
} else { } else {
CHECK_EQ( CHECK_EQ(
SecurityPolicy::GenerateReferrer(request.GetReferrerPolicy(), SecurityPolicy::GenerateReferrer(request.GetReferrerPolicy(),
request.Url(), request.HttpReferrer()) request.Url(), request.HttpReferrer())
.referrer, .referrer,
request.HttpReferrer()); request.HttpReferrer());
request.SetHTTPOriginToMatchReferrerIfNeeded();
} }
auto address_space = GetAddressSpace(); auto address_space = GetAddressSpace();
......
...@@ -1101,7 +1101,6 @@ TEST_F(FrameFetchContextTest, AddAdditionalRequestHeadersWhenDetached) { ...@@ -1101,7 +1101,6 @@ TEST_F(FrameFetchContextTest, AddAdditionalRequestHeadersWhenDetached) {
GetFetchContext()->AddAdditionalRequestHeaders(request); GetFetchContext()->AddAdditionalRequestHeaders(request);
EXPECT_EQ(origin, request.HttpHeaderField(http_names::kOrigin));
EXPECT_EQ(String(origin + "/"), EXPECT_EQ(String(origin + "/"),
request.HttpHeaderField(http_names::kReferer)); request.HttpHeaderField(http_names::kReferer));
EXPECT_EQ(String(), request.HttpHeaderField("Save-Data")); EXPECT_EQ(String(), request.HttpHeaderField("Save-Data"));
......
...@@ -884,7 +884,16 @@ Resource* ResourceFetcher::RequestResource(FetchParameters& params, ...@@ -884,7 +884,16 @@ Resource* ResourceFetcher::RequestResource(FetchParameters& params,
properties_->GetFetchClientSettingsObject().GetSecurityOrigin()); properties_->GetFetchClientSettingsObject().GetSecurityOrigin());
} }
const ResourceType resource_type = factory.GetType();
if (!RuntimeEnabledFeatures::OutOfBlinkCorsEnabled() &&
resource_request.RequestorOrigin()) {
resource_request.SetHTTPOriginIfNeeded(
resource_request.RequestorOrigin().get());
}
WebScopedVirtualTimePauser pauser; WebScopedVirtualTimePauser pauser;
base::Optional<ResourceRequestBlockedReason> blocked_reason = base::Optional<ResourceRequestBlockedReason> blocked_reason =
PrepareRequest(params, factory, identifier, pauser); PrepareRequest(params, factory, identifier, pauser);
if (blocked_reason) { if (blocked_reason) {
...@@ -892,8 +901,6 @@ Resource* ResourceFetcher::RequestResource(FetchParameters& params, ...@@ -892,8 +901,6 @@ Resource* ResourceFetcher::RequestResource(FetchParameters& params,
client); client);
} }
ResourceType resource_type = factory.GetType();
if (!params.IsSpeculativePreload()) { if (!params.IsSpeculativePreload()) {
// Only log if it's not for speculative preload. // Only log if it's not for speculative preload.
Context().RecordLoadingActivity(resource_request, resource_type, Context().RecordLoadingActivity(resource_request, resource_type,
......
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