[webkit-changes] [WebKit/WebKit] 77fd8d: [fetch] Implement `Headers.prototype.getSetCookie`.
Andreu Botella
noreply at github.com
Mon Feb 20 04:41:51 PST 2023
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 77fd8deab6cb8bda8d3e265dc91ab65685fdc84d
https://github.com/WebKit/WebKit/commit/77fd8deab6cb8bda8d3e265dc91ab65685fdc84d
Author: Andreu Botella <abotella at igalia.com>
Date: 2023-02-20 (Mon, 20 Feb 2023)
Changed paths:
A LayoutTests/imported/w3c/web-platform-tests/fetch/api/headers/header-setcookie.any-expected.txt
A LayoutTests/imported/w3c/web-platform-tests/fetch/api/headers/header-setcookie.any.html
A LayoutTests/imported/w3c/web-platform-tests/fetch/api/headers/header-setcookie.any.js
A LayoutTests/imported/w3c/web-platform-tests/fetch/api/headers/header-setcookie.any.serviceworker-expected.txt
A LayoutTests/imported/w3c/web-platform-tests/fetch/api/headers/header-setcookie.any.serviceworker.html
A LayoutTests/imported/w3c/web-platform-tests/fetch/api/headers/header-setcookie.any.sharedworker-expected.txt
A LayoutTests/imported/w3c/web-platform-tests/fetch/api/headers/header-setcookie.any.sharedworker.html
A LayoutTests/imported/w3c/web-platform-tests/fetch/api/headers/header-setcookie.any.worker-expected.txt
A LayoutTests/imported/w3c/web-platform-tests/fetch/api/headers/header-setcookie.any.worker.html
M LayoutTests/imported/w3c/web-platform-tests/fetch/api/headers/w3c-import.log
M Source/WebCore/Modules/fetch/FetchHeaders.cpp
M Source/WebCore/Modules/fetch/FetchHeaders.h
M Source/WebCore/Modules/fetch/FetchHeaders.idl
Log Message:
-----------
[fetch] Implement `Headers.prototype.getSetCookie`.
https://bugs.webkit.org/show_bug.cgi?id=251194
Reviewed by Youenn Fablet.
This change implements the `getSetCookie` method of the fetch spec's
`Headers` interface. This change allows storing `Set-Cookie` headers as
a list of values, and retrieving the separate values, rather than their
combined representation, which is ambiguous. This change also makes it
so iterating through `Headers` objects will yield `Set-Cookie` headers
separately rather than combined, which is part of the same change in the
fetch spec.
Given that `Set-Cookie` is a forbidden header name in both requests and
responses, this will not be useful for any uses of `Headers` related to
fetch. It does allows some non-fetch use cases, however, and enables
further compatibility with server-side runtimes that do allow this
header.
Rather than refactoring `HTTPHeaderMap` to not combine (all) headers,
this implementation makes use of the fact that `Set-Cookie` is forbidden
for both requests and responses, to store the `Set-Cookie` values in a
vector of strings directly in `FetchHeaders` instead. This needed such
header name to be special-cased in almost every operation of this class.
And in order to have `Set-Cookie` headers properly appear in their right
order in the pair iterator, `m_keys` has been changed to be a pair where
the second element is an index into the `Set-Cookie` values vector,
which is ignored for other header names.
Fetch spec PR: https://github.com/whatwg/fetch/pull/1346
This commit also imports the corresponding WPT tests from
https://github.com/web-platform-tests/wpt/pull/31442, and adds some
additional tests.
* Source/WebCore/Modules/fetch/FetchHeaders.cpp:
(WebCore::appendToHeaderMap):
(WebCore::fillHeaderMap):
(WebCore::FetchHeaders::create):
(WebCore::FetchHeaders::fill):
(WebCore::FetchHeaders::append):
(WebCore::FetchHeaders::remove):
(WebCore::FetchHeaders::get const):
(WebCore::FetchHeaders::getSetCookie const):
(WebCore::FetchHeaders::has const):
(WebCore::FetchHeaders::set):
(WebCore::FetchHeaders::Iterator::next):
* Source/WebCore/Modules/fetch/FetchHeaders.h:
(WebCore::FetchHeaders::create):
(WebCore::FetchHeaders::fastGet const):
(WebCore::FetchHeaders::fastHas const):
(WebCore::FetchHeaders::fastSet):
(WebCore::FetchHeaders::FetchHeaders):
* Source/WebCore/Modules/fetch/FetchHeaders.idl:
* Source/WebCore/platform/network/ResourceResponseBase.cpp:
(WebCore::ResourceResponseBase::httpHeaderField const):
Canonical link: https://commits.webkit.org/260533@main
More information about the webkit-changes
mailing list