mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 05:07:35 +00:00
LibWeb: Add definitions from '2.2.2. Headers' in the Fetch spec
This commit is contained in:
parent
9244f1697d
commit
dd9bf10151
5 changed files with 646 additions and 0 deletions
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* Copyright (c) 2022, Linus Groh <linusg@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <AK/ByteBuffer.h>
|
||||
#include <AK/Forward.h>
|
||||
|
||||
namespace Web::Fetch {
|
||||
|
||||
// https://fetch.spec.whatwg.org/#concept-header
|
||||
// A header is a tuple that consists of a name (a header name) and value (a header value).
|
||||
struct Header {
|
||||
ByteBuffer name;
|
||||
ByteBuffer value;
|
||||
};
|
||||
|
||||
// https://fetch.spec.whatwg.org/#concept-header-list
|
||||
// A header list is a list of zero or more headers. It is initially the empty list.
|
||||
class HeaderList final : Vector<Header> {
|
||||
public:
|
||||
using Vector::begin;
|
||||
using Vector::end;
|
||||
|
||||
[[nodiscard]] bool contains(ReadonlyBytes) const;
|
||||
[[nodiscard]] ErrorOr<Optional<ByteBuffer>> get(ReadonlyBytes) const;
|
||||
[[nodiscard]] ErrorOr<Optional<Vector<String>>> get_decode_and_split(ReadonlyBytes) const;
|
||||
[[nodiscard]] ErrorOr<void> append(Header);
|
||||
void delete_(ReadonlyBytes name);
|
||||
[[nodiscard]] ErrorOr<void> set(Header);
|
||||
[[nodiscard]] ErrorOr<void> combine(Header);
|
||||
};
|
||||
|
||||
[[nodiscard]] ErrorOr<OrderedHashTable<ByteBuffer>> convert_header_names_to_a_sorted_lowercase_set(Span<ReadonlyBytes>);
|
||||
[[nodiscard]] bool is_header_name(ReadonlyBytes);
|
||||
[[nodiscard]] bool is_header_value(ReadonlyBytes);
|
||||
[[nodiscard]] ErrorOr<ByteBuffer> normalize_header_value(ReadonlyBytes);
|
||||
[[nodiscard]] bool is_cors_safelisted_request_header(Header const&);
|
||||
[[nodiscard]] bool is_cors_unsafe_request_header_byte(u8);
|
||||
[[nodiscard]] ErrorOr<OrderedHashTable<ByteBuffer>> get_cors_unsafe_header_names(HeaderList const&);
|
||||
[[nodiscard]] bool is_cors_non_wildcard_request_header_name(ReadonlyBytes);
|
||||
[[nodiscard]] bool is_privileged_no_cors_request_header_name(ReadonlyBytes);
|
||||
[[nodiscard]] bool is_cors_safelisted_response_header_name(ReadonlyBytes, Span<ReadonlyBytes>);
|
||||
[[nodiscard]] bool is_no_cors_safelisted_request_header_name(ReadonlyBytes);
|
||||
[[nodiscard]] bool is_no_cors_safelisted_request_header(Header const&);
|
||||
[[nodiscard]] bool is_forbidden_header_name(ReadonlyBytes);
|
||||
[[nodiscard]] bool is_forbidden_response_header_name(ReadonlyBytes);
|
||||
[[nodiscard]] bool is_request_body_header_name(ReadonlyBytes);
|
||||
[[nodiscard]] bool is_simple_range_header_value(ReadonlyBytes);
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue