Commit b1a9f297 authored by Andrey Kosyakov's avatar Andrey Kosyakov Committed by Commit Bot

DevTools: apply User-Agent override when performing a CORS preflight

Change-Id: Iab48be6f9588bd1ce118892823323dfeae67abb8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2320996
Commit-Queue: Andrey Kosyakov <caseq@chromium.org>
Reviewed-by: default avatarYutaka Hirano <yhirano@chromium.org>
Cr-Commit-Position: refs/heads/master@{#792364}
parent 68035f6b
...@@ -123,6 +123,17 @@ std::unique_ptr<ResourceRequest> CreatePreflightRequest( ...@@ -123,6 +123,17 @@ std::unique_ptr<ResourceRequest> CreatePreflightRequest(
net::HttpRequestHeaders::kOrigin, net::HttpRequestHeaders::kOrigin,
(tainted ? url::Origin() : *request.request_initiator).Serialize()); (tainted ? url::Origin() : *request.request_initiator).Serialize());
// We normally set User-Agent down in the network stack, but the DevTools
// emulation override is applied on a higher level (renderer or browser),
// so copy User-Agent from the original request, if present.
// TODO(caseq, morlovich): do the same for client hints.
std::string user_agent;
if (request.headers.GetHeader(net::HttpRequestHeaders::kUserAgent,
&user_agent)) {
preflight_request->headers.SetHeader(net::HttpRequestHeaders::kUserAgent,
user_agent);
}
// Additional headers that the algorithm in the spec does not require, but // Additional headers that the algorithm in the spec does not require, but
// it's better that CORS preflight requests have them. // it's better that CORS preflight requests have them.
preflight_request->headers.SetHeader("Sec-Fetch-Mode", "cors"); preflight_request->headers.SetHeader("Sec-Fetch-Mode", "cors");
......
Tests emulation of the user agent for CORS preflight requests.
navigator.userAgent: Nutri-Matic Drinks Dispenser
Access-Control-Request-Headers: x-devtools-test
User-Agent: Nutri-Matic Drinks Dispenser
(async function(testRunner) {
const {session, dp} = await testRunner.startBlank('Tests emulation of the user agent for CORS preflight requests.');
await dp.Network.enable();
await dp.Emulation.setUserAgentOverride({userAgent: 'Nutri-Matic Drinks Dispenser'});
testRunner.log('navigator.userAgent: ' + await session.evaluate('navigator.userAgent'));
const url = 'http://localhost:8000/inspector-protocol/network/resources/cors-return-post.php';
session.evaluate(`
fetch("${url}", {method: 'POST', headers: {'X-DevTools-Test': 'foo'}, body: 'test'})
`);
const {headers} = (await dp.Network.onceRequestWillBeSentExtraInfo()).params;
const headers_to_dump = [
'Access-Control-Request-Headers',
'User-Agent'
];
for (const h of headers_to_dump)
testRunner.log(`${h}: ${headers[h]}`);
testRunner.completeTest();
})
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