LibWeb: Add a couple ad-hoc BufferSource AOs

These helpers will be used by CompressionStream/DecompressionStream.
This commit is contained in:
Timothy Flynn 2024-11-15 14:47:27 -05:00 committed by Andreas Kling
parent 35ba7c7e00
commit c0da3e356a
Notes: github-actions[bot] 2024-11-17 22:22:07 +00:00
2 changed files with 23 additions and 0 deletions

View file

@ -23,6 +23,27 @@
namespace Web::WebIDL {
bool is_buffer_source_type(JS::Value value)
{
if (!value.is_object())
return false;
auto const& object = value.as_object();
return is<JS::TypedArrayBase>(object) || is<JS::DataView>(object) || is<JS::ArrayBuffer>(object);
}
GC::Ptr<JS::ArrayBuffer> underlying_buffer_source(JS::Object& buffer_source)
{
if (is<JS::TypedArrayBase>(buffer_source))
return static_cast<JS::TypedArrayBase&>(buffer_source).viewed_array_buffer();
if (is<JS::DataView>(buffer_source))
return static_cast<JS::DataView&>(buffer_source).viewed_array_buffer();
if (is<JS::ArrayBuffer>(buffer_source))
return static_cast<JS::ArrayBuffer&>(buffer_source);
VERIFY_NOT_REACHED();
}
// https://webidl.spec.whatwg.org/#dfn-get-buffer-source-copy
ErrorOr<ByteBuffer> get_buffer_source_copy(JS::Object const& buffer_source)
{

View file

@ -17,6 +17,8 @@
namespace Web::WebIDL {
bool is_buffer_source_type(JS::Value);
GC::Ptr<JS::ArrayBuffer> underlying_buffer_source(JS::Object& buffer_source);
ErrorOr<ByteBuffer> get_buffer_source_copy(JS::Object const& buffer_source);
JS::Completion call_user_object_operation(WebIDL::CallbackType& callback, String const& operation_name, Optional<JS::Value> this_argument, GC::MarkedVector<JS::Value> args);