LibWeb: Implement transfer {,receiving} steps for ImageBitmap

This commit is contained in:
Kenneth Myhra 2025-07-19 08:07:15 +02:00 committed by Shannon Booth
commit ed3d0d76ec
Notes: github-actions[bot] 2025-07-20 00:31:58 +00:00
3 changed files with 22 additions and 9 deletions

View file

@ -82,25 +82,32 @@ WebIDL::ExceptionOr<void> ImageBitmap::deserialization_steps(HTML::TransferDataD
return {};
}
WebIDL::ExceptionOr<void> ImageBitmap::transfer_steps(HTML::TransferDataEncoder&)
// https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#the-imagebitmap-interface:transfer-steps
WebIDL::ExceptionOr<void> ImageBitmap::transfer_steps(HTML::TransferDataEncoder& data_holder)
{
// FIXME: Implement this
dbgln("(STUBBED) ImageBitmap::transfer_steps(HTML::TransferDataEncoder&)");
// FIXME: 1. If value's origin-clean flag is not set, then throw a "DataCloneError" DOMException.
// 2. Set dataHolder.[[BitmapData]] to value's bitmap data.
serialize_bitmap(data_holder, *m_bitmap);
// 3. Unset value's bitmap data.
m_bitmap = nullptr;
return {};
}
WebIDL::ExceptionOr<void> ImageBitmap::transfer_receiving_steps(HTML::TransferDataDecoder&)
// https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#the-imagebitmap-interface:transfer-receiving-steps
WebIDL::ExceptionOr<void> ImageBitmap::transfer_receiving_steps(HTML::TransferDataDecoder& data_holder)
{
// FIXME: Implement this
dbgln("(STUBBED) ImageBitmap::transfer_receiving_steps(HTML::TransferDataDecoder&)");
// 1. Set value's bitmap data to dataHolder.[[BitmapData]].
m_bitmap = TRY(deserialize_bitmap(this->realm(), data_holder));
return {};
}
HTML::TransferType ImageBitmap::primary_interface() const
{
// FIXME: Implement this
dbgln("(STUBBED) ImageBitmap::primary_interface()");
return TransferType::Unknown;
return TransferType::ImageBitmap;
}
// https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#dom-imagebitmap-width

View file

@ -1147,6 +1147,11 @@ static WebIDL::ExceptionOr<GC::Ref<Bindings::PlatformObject>> create_transferred
TRY(transform_stream->transfer_receiving_steps(decoder));
return transform_stream;
}
case TransferType::ImageBitmap: {
auto image_bitmap = target_realm.create<ImageBitmap>(target_realm);
TRY(image_bitmap->transfer_receiving_steps(decoder));
return image_bitmap;
}
case TransferType::ArrayBuffer:
case TransferType::ResizableArrayBuffer:
case TransferType::Unknown:

View file

@ -44,6 +44,7 @@ enum class TransferType : u8 {
ReadableStream = 4,
WritableStream = 5,
TransformStream = 6,
ImageBitmap = 7,
};
}