fix: only set Node's WASM streaming callback when fetch is enabled#51953
Merged
Conversation
Node.js v24.16.0 removed the experimental_fetch gate around isolate->SetWasmStreamingCallback() (nodejs/node#62759). When fix_allow_disabling_fetch_in_renderer_and_worker_processes.patch was rebased for the version bump, the flag was restored but the gate was not. As a result, Node.js unconditionally overrode Blink's WebAssembly streaming callback in renderer and worker processes, where Electron passes --no-experimental-fetch and skips the bootstrap file that registers Node's JS-side streaming implementation. Any call to WebAssembly.compileStreaming() or instantiateStreaming() in a renderer with nodeIntegration then failed the CHECK(\!impl.IsEmpty()) assertion in node_wasm_web_api.cc and crashed the renderer. Restore the gate so Blink's streaming callback stays in place in processes where Node's fetch is disabled. Fixes #51950
Member
|
Thoughts on #51923, that would also address the broken code path. I am fine with either just want to get consensus on which change to land to address the issue. |
deepak1556
approved these changes
Jun 10, 2026
Member
|
This is addressing the callback registered on the isolate, which #51923 doesn't cover yet. Approving as an immediate regression fix. |
dsanders11
approved these changes
Jun 10, 2026
5 tasks
|
Release Notes Persisted
|
Contributor
|
I was unable to backport this PR to "41-x-y" cleanly; |
Contributor
|
I have automatically backported this PR to "43-x-y", please check out #51955 |
Contributor
|
I have automatically backported this PR to "42-x-y", please check out #51956 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #51950
Description of Change
Node.js v24.16.0 removed the
experimental_fetchgate aroundisolate->SetWasmStreamingCallback()(nodejs/node#62759). Whenfix_allow_disabling_fetch_in_renderer_and_worker_processes.patchwas rebased for the Node bump, the flag was restored but that gate was not.As a result, Node.js unconditionally overrode Blink's WebAssembly streaming callback in renderer and worker processes — where we pass
--no-experimental-fetchand never register Node's JS-side streaming implementation. AnyWebAssembly.compileStreaming()/instantiateStreaming()call in a renderer withnodeIntegration: truethen failed theCHECK(!impl.IsEmpty())assertion innode_wasm_web_api.ccand crashed the renderer.This restores the gate (matching the v24.15.0 behavior) so Blink's streaming callback stays installed in processes where Node's fetch is disabled, and adds a regression test. Browser, utility, and
ELECTRON_RUN_AS_NODEprocesses are unaffected — fetch is enabled there, so Node's streaming implementation is still installed.Checklist
npm testpassesRelease Notes
Notes: Fixed a renderer crash when calling
WebAssembly.compileStreaming()orWebAssembly.instantiateStreaming()withnodeIntegrationenabled.