Version 1.11.13.1 added two interop-level WebKit mitigations (stabilised captures, bounded capture time) plus a pre-existing toBlob deviation. All three are now proposed upstream. When a PR below is merged and a vendored release containing it ships, the matching wrapper code can be simplified.
Each item requires vendoring the new upstream release first (update the provenance table + SHA-256 in the README).
The exact code seams are marked with "Upstreamed as ..." comments in wwwroot/html-to-image-interop.js, HtmlToImageOptions.cs, and the README.
Version 1.11.13.1 added two interop-level WebKit mitigations (stabilised captures, bounded capture time) plus a pre-existing
toBlobdeviation. All three are now proposed upstream. When a PR below is merged and a vendored release containing it ships, the matching wrapper code can be simplified.Each item requires vendoring the new upstream release first (update the provenance table + SHA-256 in the README).
createImagenever settles whendecode()rejects) — keepCaptureTimeoutMsandwithCaptureTimeoutas a plain safety bound, but drop the "upstream has no rejection path" rationale from their docs (html-to-image-interop.js,HtmlToImageOptions.CaptureTimeoutMsremarks, README iOS section).toBlobdropstype/quality) — replace the manual canvas-to-blob step intoStreamwith upstreamtoBlob(still throughcaptureStable), and retire the "One deliberate deviation from upstream" README section. KeepCapture_JpegStory_ReturnsBytesWithAJpegSignatureas the regression gate.stabilizationAttempts) — remove the interopcaptureStableloop and forwardStabilizeAttemptsto upstream'sstabilizationAttemptsinstead. Public option surface stays unchanged; re-run the iOS device harness (tools/ios-device-harness) to confirm the upstream implementation still produces 0 blanks on a real iPhone before deleting the local loop.The exact code seams are marked with "Upstreamed as ..." comments in
wwwroot/html-to-image-interop.js,HtmlToImageOptions.cs, and the README.