Skip to content

script: Let canvas serialization to image fail gracefully#37184

Merged
mrobinson merged 1 commit intoservo:mainfrom
mrobinson:let-canvas-serialiation-fail
May 29, 2025
Merged

script: Let canvas serialization to image fail gracefully#37184
mrobinson merged 1 commit intoservo:mainfrom
mrobinson:let-canvas-serialiation-fail

Conversation

@mrobinson
Copy link
Copy Markdown
Member

Instead of panicking when serialization of canvas to image data (whether
through toBlob() or via toDataURL()), properly handle failed
serialization. This is an implementation of the appropriate error
handling from the specification text.

Testing: This change includes a new Serov-specific test, because it is
impossible to know what the canvas size limits are of all browsers.
Fixes: #36840.

@mrobinson mrobinson requested a review from gterzian as a code owner May 29, 2025 13:25
@mrobinson mrobinson force-pushed the let-canvas-serialiation-fail branch from c7154d4 to 58cf19b Compare May 29, 2025 13:26
Copy link
Copy Markdown
Member

@sagudev sagudev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM - question

Comment on lines +12 to +16
<!-- This is not a standard WPT tests, because canvas size limits are specific
to browsers. For us, failure to serialize depends on both canvas size limits
and also whether or not the image library we use (image-rs) produces an error
when we attempt serialization. -->
<canvas id="canvas" width="2000000"></canvas>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is setting big enough width&height not enough to make this work in all browsers? Or do some browser simply error differently/before that?

For canvas size limit there is: https://jhildenbiddle.github.io/canvas-size/#/?id=test-results

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is setting big enough width&height not enough to make this work in all browsers? Or do some browser simply error differently/before that?

Since it isn't specified, I felt a bit weird about adding it to the WPT. Just to be conservative, I instead made it a Servo-specific test.

Instead of panicking when serialization of canvas to image data (whether
through `toBlob()` or via `toDataURL()`), properly handle failed
serialization. This is an implementation of the appropriate error
handling from the specification text.

Signed-off-by: Martin Robinson <[email protected]>
@mrobinson mrobinson force-pushed the let-canvas-serialiation-fail branch from 58cf19b to ecb46d8 Compare May 29, 2025 15:24
@mrobinson mrobinson enabled auto-merge May 29, 2025 15:36
@mrobinson mrobinson added this pull request to the merge queue May 29, 2025
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks May 29, 2025
@mrobinson mrobinson added this pull request to the merge queue May 29, 2025
Merged via the queue into servo:main with commit 559ba4b May 29, 2025
21 checks passed
@mrobinson mrobinson deleted the let-canvas-serialiation-fail branch May 29, 2025 17:05
vlindhol added a commit to vlindhol/servo that referenced this pull request Jun 1, 2025
* main: (510 commits)
  DevTools: Fix empty `debugger > source` panel (servo#37197)
  dom: implement signal abort on controller and signal (servo#37192)
  build(deps): bump parking_lot from 0.12.3 to 0.12.4 (servo#37199)
  layout: Split overflow calculation after fragment tree construction (servo#37203)
  build(deps): bump parking_lot_core from 0.9.10 to 0.9.11 (servo#37202)
  build(deps): bump lock_api from 0.4.12 to 0.4.13 (servo#37201)
  build(deps): bump cc from 1.2.24 to 1.2.25 (servo#37198)
  Constellation can now optionally report memory usage when the page is loaded. (servo#37151)
  Implement Input `type=text` UA Shadow DOM (servo#37065)
  constellation: Wait for canvas thread to shut down before shutting down system font service (servo#37182)
  Add slot default display style test (servo#37189)
  Send synthetic keydown/keyup at ime_insert_text (servo#37175)
  script: Let canvas serialization to image fail gracefully (servo#37184)
  Implement basics of link preloading (servo#37036)
  compositor: Add an initial RefreshDriver (servo#37169)
  pixels: Add limitation to max image total bytes length (servo#37172)
  Chore: Remove unused variable in `transition-zero-duration-with-delay.html` (servo#37179)
  build(deps): bump ohos-ime from 0.2.0 to 0.3.0 (servo#37180)
  Add a user agent style for the `<slot>` element (servo#37174)
  build(deps): bump hitrace from 0.1.4 to 0.1.5 (servo#37170)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants