Skip to content

Commit

Permalink
fix: do not register the node ESM loader in renderer processes (elect…
Browse files Browse the repository at this point in the history
  • Loading branch information
MarshallOfSound authored and sentialx committed Jul 30, 2020
1 parent 71ce7f1 commit 6dfcdbb
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 5 deletions.
1 change: 1 addition & 0 deletions patches/node/.patches
Expand Up @@ -41,3 +41,4 @@ test_account_for_non-node_basename.patch
lib_src_switch_buffer_kmaxlength_to_size_t.patch
update_tests_after_increasing_typed_array_size.patch
darwin_work_around_clock_jumping_back_in_time.patch
fix_do_not_register_the_esm_loader_in_renderer_processes.patch
@@ -0,0 +1,29 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Samuel Attard <samuel.r.attard@gmail.com>
Date: Thu, 25 Jun 2020 09:29:04 -0700
Subject: fix: do not register the ESM loader in renderer processes

Only one ESM loader can be registered per isolate, in renderer processes this should be blink. This patches node so that it won't register it's handler (overriding blinks) in non-browser processes.

This has been upstreamed in:
* https://github.com/nodejs/node/pull/34060
* https://github.com/nodejs/node/pull/34127

We can't easily rebase on that accepted solution here but we can as soon as we upgrade to
Node.js v14, since we need to leverage the new version of node::CreateEnvironment
introduced in https://github.com/nodejs/node/pull/30467.

diff --git a/lib/internal/bootstrap/pre_execution.js b/lib/internal/bootstrap/pre_execution.js
index b4a0f71af5853f427a10449b52509052fbe3facd..ba5b0b6e51bcddbc5b9dd9c31231585d61b131a0 100644
--- a/lib/internal/bootstrap/pre_execution.js
+++ b/lib/internal/bootstrap/pre_execution.js
@@ -411,6 +411,9 @@ function initializeESMLoader() {
// Create this WeakMap in js-land because V8 has no C++ API for WeakMap.
internalBinding('module_wrap').callbackMap = new SafeWeakMap();

+ // Do not hook the ESM loader in renderer processes as it overrides blinks loader
+ if (typeof process.type === 'string' && process.type !== 'browser') return;
+
const {
setImportModuleDynamicallyCallback,
setInitializeImportMetaObjectCallback
3 changes: 0 additions & 3 deletions vsts-arm-test-steps.yml
Expand Up @@ -73,9 +73,6 @@ steps:
sudo gdk-pixbuf-query-loaders --update-cache
cd src
export ELECTRON_OUT_DIR=Default
unset ELECTRON_DISABLE_SANDBOX
sudo chown root out/Default/chrome-sandbox
sudo chmod 4755 out/Default/chrome-sandbox
(cd electron && node script/yarn test -- --enable-logging)
displayName: 'Run Electron tests'
timeoutInMinutes: 20
Expand Down
2 changes: 1 addition & 1 deletion vsts-arm32v7.yml
Expand Up @@ -2,7 +2,7 @@ resources:
containers:
- container: arm32v7-test-container
image: electronjs/build:arm32v7-697b894f36d127155e020f4e8ad4b2e5f6a09613
options: --shm-size 128m --cap-add SYS_ADMIN
options: --shm-size 128m

jobs:
- job: Test_Arm32v7
Expand Down
2 changes: 1 addition & 1 deletion vsts-arm64v8.yml
Expand Up @@ -2,7 +2,7 @@ resources:
containers:
- container: arm64v8-test-container
image: electronjs/build:arm64v8-697b894f36d127155e020f4e8ad4b2e5f6a09613
options: --shm-size 128m --cap-add SYS_ADMIN
options: --shm-size 128m

jobs:
- job: Test_Arm64
Expand Down

0 comments on commit 6dfcdbb

Please sign in to comment.