imagebitmap: Add support of Blob as ImageBitmapSource (#37560)

Follow to the HTML specification and support of Blob as
ImageBitmapSource
to able use it as intermediate instance in "fetch() -> Blob ->
ImageBitmap" execution sequence.
https://html.spec.whatwg.org/multipage/#imagebitmapsource

The specification says what these steps must run in parallel
(outside the createImageBitmap task), but currently loading bytes from
Blob
and later image decoding happen in synchronous order while
promise is fullfilled or rejected on bitmap task source.
https://html.spec.whatwg.org/multipage/#the-imagebitmap-interface:blob-4

Testing: Improvements in the following WPT tests
- html/canvas/element/compositing/2d.composite*
- html/canvas/element/drawing-images-to-the-canvas/2d.drawImage*
- html/canvas/element/manual/imagebitmap/createImageBitmap*
- html/canvas/offscreen/compositing/2d.composite
- html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage
- webgl/tests/conformance/textures/image_bitmap_from_blob/*

Fixes (partially): #34112

Signed-off-by: Andrei Volykhin <andrei.volykhin@gmail.com>
This commit is contained in:
Andrei Volykhin 2025-06-20 09:53:04 +03:00 committed by GitHub
parent 9dc1dde7cb
commit a426a2e884
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
233 changed files with 209 additions and 1208 deletions

View file

@ -1,6 +1,3 @@
[canvas-createImageBitmap-resize.html]
[createImageBitmap from a Blob with resize option.]
expected: FAIL
[createImageBitmap from a HTMLImageElement of svg with no specified size with resize option.]
expected: FAIL

View file

@ -1,4 +0,0 @@
[createImageBitmap-blob-invalidtype.html]
[createImageBitmap: blob with wrong mime type]
expected: FAIL

View file

@ -1,3 +0,0 @@
[createImageBitmap-colorSpaceConversion.html]
[createImageBitmap from a Blob, and drawImage on the created ImageBitmap with colorSpaceConversion: none]
expected: FAIL

View file

@ -38,9 +38,6 @@
[createImageBitmap from a vector HTMLImageElement, and drawImage on the created ImageBitmap]
expected: FAIL
[createImageBitmap from a Blob scaled down, and drawImage on the created ImageBitmap]
expected: FAIL
[createImageBitmap from a vector HTMLImageElement scaled down, and drawImage on the created ImageBitmap]
expected: FAIL
@ -50,33 +47,21 @@
[createImageBitmap from a vector SVGImageElement scaled up, and drawImage on the created ImageBitmap]
expected: FAIL
[createImageBitmap from a Blob scaled up, and drawImage on the created ImageBitmap]
expected: FAIL
[createImageBitmap from a bitmap SVGImageElement scaled down, and drawImage on the created ImageBitmap]
expected: FAIL
[createImageBitmap from an HTMLVideoElement scaled up, and drawImage on the created ImageBitmap]
expected: FAIL
[createImageBitmap from a Blob, and drawImage on the created ImageBitmap]
expected: FAIL
[createImageBitmap from an HTMLVideoElement resized, and drawImage on the created ImageBitmap]
expected: FAIL
[createImageBitmap from an HTMLVideoElement from a data URL scaled up, and drawImage on the created ImageBitmap]
expected: FAIL
[createImageBitmap from a Blob with negative sw/sh, and drawImage on the created ImageBitmap]
expected: FAIL
[createImageBitmap from a bitmap SVGImageElement with negative sw/sh, and drawImage on the created ImageBitmap]
expected: FAIL
[createImageBitmap from a Blob resized, and drawImage on the created ImageBitmap]
expected: FAIL
[createImageBitmap from an HTMLVideoElement from a data URL, and drawImage on the created ImageBitmap]
expected: FAIL

View file

@ -11,9 +11,6 @@
[createImageBitmap from an HTMLVideoElement imageOrientation: "flipY", and drawImage on the created ImageBitmap]
expected: FAIL
[createImageBitmap from a Blob imageOrientation: "flipY", and drawImage on the created ImageBitmap]
expected: FAIL
[createImageBitmap from a bitmap SVGImageElement imageOrientation: "flipY", and drawImage on the created ImageBitmap]
expected: FAIL
@ -31,6 +28,3 @@
[createImageBitmap from a vector SVGImageElement imageOrientation: "from-image", and drawImage on the created ImageBitmap]
expected: FAIL
[createImageBitmap from a Blob imageOrientation: "from-image", and drawImage on the created ImageBitmap]
expected: FAIL

View file

@ -1,4 +0,0 @@
[createImageBitmap-in-worker-transfer.html]
expected: TIMEOUT
[Transfer ImageBitmap created in worker]
expected: TIMEOUT

View file

@ -20,10 +20,5 @@
[createImageBitmap with a vector SVGImageElement source should resolve async]
expected: FAIL
[createImageBitmap with a Blob source should resolve async]
expected: FAIL
[createImageBitmap-resolves-in-task.any.worker.html]
[createImageBitmap with a Blob source should resolve async]
expected: FAIL

View file

@ -5,8 +5,5 @@
[Serialize ImageBitmap created from a vector HTMLImageElement]
expected: FAIL
[Serialize ImageBitmap created from a Blob]
expected: FAIL
[Serialize ImageBitmap created from a bitmap SVGImageElement]
expected: FAIL

View file

@ -5,8 +5,5 @@
[Transfer ImageBitmap created from a vector SVGImageElement]
expected: FAIL
[Transfer ImageBitmap created from a Blob]
expected: FAIL
[Transfer ImageBitmap created from a bitmap SVGImageElement]
expected: FAIL