canvas: Make 2D context state creation failable and use dom_canvas_backend pref for backend selection (#38310)

Before script just crashed in those cases because IPCSender was dropped,
now we send `None` to tell script about the failure and fail getContext
or registerPainter accordingly.
This PR also unifies `dom_canvas_{backends}_enabled` prefs into
`dom_canvas_backend` which is more flexible in multi-backends scenarios.

Reviewable per commit.

Testing: Added servo specific WPT test.

---------

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
This commit is contained in:
sagudev 2025-07-28 11:13:07 +02:00 committed by GitHub
parent 93d234d270
commit ae69646371
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
17 changed files with 116 additions and 61 deletions

View file

@ -12970,6 +12970,13 @@
null,
{}
]
],
"invalid.html": [
"d50ff1030c48794dfc92083b6fecde3f97524b7e",
[
null,
{}
]
]
},
"canvas-oversize-serialization.html": [

View file

@ -0,0 +1,3 @@
[invalid.html]
prefs: ["dom_canvas_backend:none"]

View file

@ -0,0 +1,11 @@
<!doctype html>
<meta charset="utf-8">
<title>empty canvas context with invalid backend pref</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<canvas id="c">
<script>
test(function() {
assert_equals(document.getElementById('c').getContext('2d'), null);
}, "Invalid canvas backend returns null context");
</script>

View file

@ -1,7 +1,7 @@
{
"vello_canvas": {
"config": {
"binary_args": ["--pref", "dom_canvas_vello_enabled"]
"binary_args": ["--pref", "dom_canvas_backend=vello"]
},
"include": ["/html/canvas/element"]
}

View file

@ -1,7 +1,7 @@
{
"vello_cpu_canvas": {
"config": {
"binary_args": ["--pref", "dom_canvas_vello_cpu_enabled"]
"binary_args": ["--pref", "dom_canvas_backend=vello_cpu"]
},
"include": ["/html/canvas/element"]
}