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

@ -76,10 +76,14 @@ pub struct Preferences {
pub dom_allow_scripts_to_close_windows: bool,
pub dom_canvas_capture_enabled: bool,
pub dom_canvas_text_enabled: bool,
/// Uses vello as canvas backend
pub dom_canvas_vello_enabled: bool,
/// Uses vello_cpu as canvas backend
pub dom_canvas_vello_cpu_enabled: bool,
/// Selects canvas backend
///
/// Available values:
/// - ` `/`auto`
/// - raqote
/// - vello
/// - vello_cpu
pub dom_canvas_backend: String,
pub dom_clipboardevent_enabled: bool,
pub dom_composition_event_enabled: bool,
pub dom_cookiestore_enabled: bool,
@ -259,8 +263,7 @@ impl Preferences {
dom_bluetooth_testing_enabled: false,
dom_canvas_capture_enabled: false,
dom_canvas_text_enabled: true,
dom_canvas_vello_enabled: false,
dom_canvas_vello_cpu_enabled: false,
dom_canvas_backend: String::new(),
dom_clipboardevent_enabled: true,
dom_composition_event_enabled: false,
dom_cookiestore_enabled: false,