[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