diff --git a/Userland/Libraries/LibWeb/HTML/StructuredSerialize.cpp b/Userland/Libraries/LibWeb/HTML/StructuredSerialize.cpp index 62c4d43625..9b823ed519 100644 --- a/Userland/Libraries/LibWeb/HTML/StructuredSerialize.cpp +++ b/Userland/Libraries/LibWeb/HTML/StructuredSerialize.cpp @@ -894,53 +894,53 @@ private: m_position += 2; return value; } - - static WebIDL::ExceptionOr deserialize_bytes(JS::VM& vm, ReadonlySpan vector, size_t& position) - { - u32 size_bits[2]; - size_bits[0] = vector[position++]; - size_bits[1] = vector[position++]; - u64 const size = *bit_cast(&size_bits); - - auto bytes = TRY_OR_THROW_OOM(vm, ByteBuffer::create_uninitialized(size)); - u64 byte_position = 0; - while (position < vector.size() && byte_position < size) { - for (u8 i = 0; i < 4; ++i) { - bytes[byte_position++] = (vector[position] >> (i * 8) & 0xFF); - if (byte_position == size) - break; - } - position++; - } - return bytes; - } - - static WebIDL::ExceptionOr deserialize_string(JS::VM& vm, ReadonlySpan vector, size_t& position) - { - auto bytes = TRY(deserialize_bytes(vm, vector, position)); - return TRY_OR_THROW_OOM(vm, String::from_utf8(StringView { bytes })); - } - - static WebIDL::ExceptionOr> deserialize_string_primitive(JS::VM& vm, ReadonlySpan vector, size_t& position) - { - auto bytes = TRY(deserialize_bytes(vm, vector, position)); - - return TRY(Bindings::throw_dom_exception_if_needed(vm, [&vm, &bytes]() { - return JS::PrimitiveString::create(vm, StringView { bytes }); - })); - } - - static WebIDL::ExceptionOr> deserialize_big_int_primitive(JS::VM& vm, ReadonlySpan vector, size_t& position) - { - auto string = TRY(deserialize_string_primitive(vm, vector, position)); - auto string_view = TRY(Bindings::throw_dom_exception_if_needed(vm, [&string]() { - return string->utf8_string_view(); - })); - auto bigint = MUST(::Crypto::SignedBigInteger::from_base(10, string_view.substring_view(0, string_view.length() - 1))); - return JS::BigInt::create(vm, bigint); - } }; +WebIDL::ExceptionOr deserialize_bytes(JS::VM& vm, ReadonlySpan vector, size_t& position) +{ + u32 size_bits[2]; + size_bits[0] = vector[position++]; + size_bits[1] = vector[position++]; + u64 const size = *bit_cast(&size_bits); + + auto bytes = TRY_OR_THROW_OOM(vm, ByteBuffer::create_uninitialized(size)); + u64 byte_position = 0; + while (position < vector.size() && byte_position < size) { + for (u8 i = 0; i < 4; ++i) { + bytes[byte_position++] = (vector[position] >> (i * 8) & 0xFF); + if (byte_position == size) + break; + } + position++; + } + return bytes; +} + +WebIDL::ExceptionOr deserialize_string(JS::VM& vm, ReadonlySpan vector, size_t& position) +{ + auto bytes = TRY(deserialize_bytes(vm, vector, position)); + return TRY_OR_THROW_OOM(vm, String::from_utf8(StringView { bytes })); +} + +WebIDL::ExceptionOr> deserialize_string_primitive(JS::VM& vm, ReadonlySpan vector, size_t& position) +{ + auto bytes = TRY(deserialize_bytes(vm, vector, position)); + + return TRY(Bindings::throw_dom_exception_if_needed(vm, [&vm, &bytes]() { + return JS::PrimitiveString::create(vm, StringView { bytes }); + })); +} + +WebIDL::ExceptionOr> deserialize_big_int_primitive(JS::VM& vm, ReadonlySpan vector, size_t& position) +{ + auto string = TRY(deserialize_string_primitive(vm, vector, position)); + auto string_view = TRY(Bindings::throw_dom_exception_if_needed(vm, [&string]() { + return string->utf8_string_view(); + })); + auto bigint = MUST(::Crypto::SignedBigInteger::from_base(10, string_view.substring_view(0, string_view.length() - 1))); + return JS::BigInt::create(vm, bigint); +} + // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializewithtransfer WebIDL::ExceptionOr structured_serialize_with_transfer(JS::VM& vm, JS::Value value, Vector> const& transfer_list) { diff --git a/Userland/Libraries/LibWeb/HTML/StructuredSerialize.h b/Userland/Libraries/LibWeb/HTML/StructuredSerialize.h index 6a2fe2ce11..bdf48c342d 100644 --- a/Userland/Libraries/LibWeb/HTML/StructuredSerialize.h +++ b/Userland/Libraries/LibWeb/HTML/StructuredSerialize.h @@ -50,6 +50,11 @@ WebIDL::ExceptionOr structured_serialize_internal(JS::VM& v WebIDL::ExceptionOr structured_deserialize(JS::VM& vm, SerializationRecord const& serialized, JS::Realm& target_realm, Optional); +WebIDL::ExceptionOr deserialize_bytes(JS::VM& vm, ReadonlySpan vector, size_t& position); +WebIDL::ExceptionOr deserialize_string(JS::VM& vm, ReadonlySpan vector, size_t& position); +WebIDL::ExceptionOr> deserialize_string_primitive(JS::VM& vm, ReadonlySpan vector, size_t& position); +WebIDL::ExceptionOr> deserialize_big_int_primitive(JS::VM& vm, ReadonlySpan vector, size_t& position); + WebIDL::ExceptionOr structured_serialize_with_transfer(JS::VM& vm, JS::Value value, Vector> const& transfer_list); WebIDL::ExceptionOr structured_deserialize_with_transfer(JS::VM& vm, SerializedTransferRecord&);