canvas: Add initial support of ImageBitmapRenderingContext (#37998)

Add support of the ImageBitmapRenderingContext as "bitmaprenderer"
canvas context mode to RenderingContext/OffscreenRenderingContext
https://html.spec.whatwg.org/multipage/#imagebitmaprenderingcontext

It is initial implementation with public interface API but without
any display presentation support for HTMLCanvasElement.

Testing: Improvements in the following tests:
-
html/canvas/element/manual/imagebitmap/createImageBitmap-origin.sub.html
- html/canvas/offscreen/manual/text/canvas.2d.offscreen*
-
html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.nocrash.html
- imagebitmap-renderingcontext/*

Signed-off-by: Andrei Volykhin <andrei.volykhin@gmail.com>
This commit is contained in:
Andrei Volykhin 2025-07-15 11:03:49 +03:00 committed by GitHub
parent ccc902eb7a
commit c817d7b9ce
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
20 changed files with 365 additions and 82 deletions

View file

@ -176,6 +176,8 @@ skip: true
skip: true
[moving-between-documents]
skip: true
[imagebitmap-renderingcontext]
skip: false
[import-maps]
skip: false
[IndexedDB]

View file

@ -1,27 +1,9 @@
[createImageBitmap-origin.sub.html]
[redirected to cross-origin HTMLVideoElement: origin unclear bitmaprenderer.transferFromImageBitmap]
expected: FAIL
[unclean HTMLCanvasElement: origin unclear bitmaprenderer.transferFromImageBitmap]
expected: FAIL
[cross-origin SVGImageElement: origin unclear bitmaprenderer.transferFromImageBitmap]
expected: FAIL
[cross-origin HTMLVideoElement: origin unclear bitmaprenderer.transferFromImageBitmap]
expected: FAIL
[cross-origin SVGImageElement: origin unclear 2dContext.drawImage]
expected: FAIL
[cross-origin HTMLImageElement: origin unclear bitmaprenderer.transferFromImageBitmap]
expected: FAIL
[unclean ImageBitmap: origin unclear bitmaprenderer.transferFromImageBitmap]
expected: FAIL
[redirected to same-origin HTMLVideoElement: origin unclear bitmaprenderer.transferFromImageBitmap]
expected: FAIL
[cross-origin SVGImageElement: origin unclear getImageData]
expected: FAIL

View file

@ -1,2 +1,2 @@
[canvas.2d.offscreen.direction.html]
expected: TIMEOUT
expected: FAIL

View file

@ -1,2 +1,2 @@
[canvas.2d.offscreen.lang.html]
expected: TIMEOUT
expected: FAIL

View file

@ -1,2 +1,2 @@
[canvas.2d.offscreen.lang.inherit.html]
expected: TIMEOUT
expected: FAIL

View file

@ -1,3 +0,0 @@
[offscreencanvas.transfer.to.imagebitmap.nocrash.html]
[offscreencanvas]
expected: FAIL

View file

@ -2,30 +2,6 @@
[Path2D interface: operation roundRect(unrestricted double, unrestricted double, unrestricted double, unrestricted double, optional (unrestricted double or DOMPointInit or sequence<(unrestricted double or DOMPointInit)>))]
expected: FAIL
[ImageBitmapRenderingContext interface: existence and properties of interface object]
expected: FAIL
[ImageBitmapRenderingContext interface object length]
expected: FAIL
[ImageBitmapRenderingContext interface object name]
expected: FAIL
[ImageBitmapRenderingContext interface: existence and properties of interface prototype object]
expected: FAIL
[ImageBitmapRenderingContext interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
[ImageBitmapRenderingContext interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[ImageBitmapRenderingContext interface: attribute canvas]
expected: FAIL
[ImageBitmapRenderingContext interface: operation transferFromImageBitmap(ImageBitmap?)]
expected: FAIL
[OffscreenCanvas interface: attribute oncontextlost]
expected: FAIL

View file

@ -4346,30 +4346,6 @@
[Path2D interface: operation roundRect(unrestricted double, unrestricted double, unrestricted double, unrestricted double, optional (unrestricted double or DOMPointInit or sequence<(unrestricted double or DOMPointInit)>))]
expected: FAIL
[ImageBitmapRenderingContext interface: existence and properties of interface object]
expected: FAIL
[ImageBitmapRenderingContext interface object length]
expected: FAIL
[ImageBitmapRenderingContext interface object name]
expected: FAIL
[ImageBitmapRenderingContext interface: existence and properties of interface prototype object]
expected: FAIL
[ImageBitmapRenderingContext interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
[ImageBitmapRenderingContext interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[ImageBitmapRenderingContext interface: attribute canvas]
expected: FAIL
[ImageBitmapRenderingContext interface: operation transferFromImageBitmap(ImageBitmap?)]
expected: FAIL
[OffscreenCanvas interface: attribute oncontextlost]
expected: FAIL

View file

@ -13623,14 +13623,14 @@
]
],
"interfaces.https.html": [
"8a9345525360e7a7ce69e84e394b65a4cbc0ab34",
"641c5ba19d389390b7b51da7644f011b0c42f33a",
[
null,
{}
]
],
"interfaces.worker.js": [
"f217fd8fb6b46144bc3576a081cc6ce5db3129d5",
"463bfc25211014203a5094baae4b4e2d890bf9aa",
[
"mozilla/interfaces.worker.html",
{}

View file

@ -225,6 +225,7 @@ test_interfaces([
"ImageData",
"Image",
"ImageBitmap",
"ImageBitmapRenderingContext",
"InputEvent",
"IntersectionObserver",
"IntersectionObserverEntry",

View file

@ -77,6 +77,7 @@ test_interfaces([
"Headers",
"History",
"ImageBitmap",
"ImageBitmapRenderingContext",
"ImageData",
"MessageChannel",
"MessageEvent",