mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-12-07 21:59:54 +00:00
LibWeb: Store HTTP methods and headers as ByteString
The spec declares these as a byte sequence, which we then implemented as a ByteBuffer. This has become pretty awkward to deal with, as evidenced by the plethora of `MUST(ByteBuffer::copy(...))` and `.bytes()` calls everywhere inside Fetch. We would then treat the bytes as a string anyways by wrapping them in StringView everywhere. We now store these as a ByteString. This is more comfortable to deal with, and we no longer need to continually copy underlying storage (as ByteString is ref-counted). This work is largely preparatory for an upcoming HTTP header refactor.
This commit is contained in:
parent
ed27eea091
commit
f675cfe90f
Notes:
github-actions[bot]
2025-11-26 14:16:12 +00:00
Author: https://github.com/trflynn89
Commit: f675cfe90f
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/6933
28 changed files with 480 additions and 651 deletions
|
|
@ -157,31 +157,35 @@ ErrorOr<String> convert_to_scalar_value_string(StringView string)
|
|||
}
|
||||
|
||||
// https://infra.spec.whatwg.org/#isomorphic-encode
|
||||
ByteBuffer isomorphic_encode(StringView input)
|
||||
ByteString isomorphic_encode(StringView input)
|
||||
{
|
||||
// To isomorphic encode an isomorphic string input: return a byte sequence whose length is equal to input’s code
|
||||
// point length and whose bytes have the same values as the values of input’s code points, in the same order.
|
||||
// NOTE: This is essentially spec-speak for "Encode as ISO-8859-1 / Latin-1".
|
||||
ByteBuffer buf = {};
|
||||
// NB: This is essentially spec-speak for "Encode as ISO-8859-1 / Latin-1".
|
||||
StringBuilder builder(input.length());
|
||||
|
||||
for (auto code_point : Utf8View { input }) {
|
||||
// VERIFY(code_point <= 0xFF);
|
||||
if (code_point > 0xFF)
|
||||
dbgln("FIXME: Trying to isomorphic encode a string with code points > U+00FF.");
|
||||
buf.append((u8)code_point);
|
||||
|
||||
builder.append(static_cast<u8>(code_point));
|
||||
}
|
||||
return buf;
|
||||
|
||||
return builder.to_byte_string();
|
||||
}
|
||||
|
||||
// https://infra.spec.whatwg.org/#isomorphic-decode
|
||||
String isomorphic_decode(ReadonlyBytes input)
|
||||
String isomorphic_decode(StringView input)
|
||||
{
|
||||
// To isomorphic decode a byte sequence input, return a string whose code point length is equal
|
||||
// to input’s length and whose code points have the same values as the values of input’s bytes, in the same order.
|
||||
// NOTE: This is essentially spec-speak for "Decode as ISO-8859-1 / Latin-1".
|
||||
StringBuilder builder(input.size());
|
||||
for (u8 code_point : input) {
|
||||
builder.append_code_point(code_point);
|
||||
}
|
||||
// To isomorphic decode a byte sequence input, return a string whose code point length is equal to input’s length
|
||||
// and whose code points have the same values as the values of input’s bytes, in the same order.
|
||||
// NB: This is essentially spec-speak for "Decode as ISO-8859-1 / Latin-1".
|
||||
StringBuilder builder(input.length());
|
||||
|
||||
for (auto byte : input.bytes())
|
||||
builder.append_code_point(byte);
|
||||
|
||||
return builder.to_string_without_validation();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -20,8 +20,8 @@ WEB_API ErrorOr<String> strip_and_collapse_whitespace(StringView string);
|
|||
Utf16String strip_and_collapse_whitespace(Utf16String const& string);
|
||||
WEB_API bool is_code_unit_prefix(StringView potential_prefix, StringView input);
|
||||
WEB_API ErrorOr<String> convert_to_scalar_value_string(StringView string);
|
||||
ByteBuffer isomorphic_encode(StringView input);
|
||||
WEB_API String isomorphic_decode(ReadonlyBytes input);
|
||||
ByteString isomorphic_encode(StringView input);
|
||||
WEB_API String isomorphic_decode(StringView input);
|
||||
bool code_unit_less_than(StringView a, StringView b);
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue