From 3102a257af400e8b9bdddf4295d901007c65a2d6 Mon Sep 17 00:00:00 2001 From: Milan Burda Date: Tue, 22 Aug 2023 06:43:08 +0200 Subject: [PATCH] feat: expose dummy module.exports to the sandboxed preload scripts (#39484) --- lib/sandboxed_renderer/init.ts | 5 +++-- spec/chromium-spec.ts | 2 +- spec/fixtures/module/preload.js | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/sandboxed_renderer/init.ts b/lib/sandboxed_renderer/init.ts index cf16e33344fa..fb3768b62ac5 100644 --- a/lib/sandboxed_renderer/init.ts +++ b/lib/sandboxed_renderer/init.ts @@ -120,15 +120,16 @@ require('@electron/internal/renderer/common-init'); // - `Buffer`: Shim of `Buffer` implementation // - `global`: The window object, which is aliased to `global` by webpack. function runPreloadScript (preloadSrc: string) { - const preloadWrapperSrc = `(function(require, process, Buffer, global, setImmediate, clearImmediate, exports) { + const preloadWrapperSrc = `(function(require, process, Buffer, global, setImmediate, clearImmediate, exports, module) { ${preloadSrc} })`; // eval in window scope const preloadFn = binding.createPreloadScript(preloadWrapperSrc); const { setImmediate, clearImmediate } = require('timers'); + const exports = {}; - preloadFn(preloadRequire, preloadProcess, Buffer, global, setImmediate, clearImmediate, {}); + preloadFn(preloadRequire, preloadProcess, Buffer, global, setImmediate, clearImmediate, exports, { exports }); } for (const { preloadPath, preloadSrc, preloadError } of preloadScripts) { diff --git a/spec/chromium-spec.ts b/spec/chromium-spec.ts index da937aa45485..fb3907089f2a 100644 --- a/spec/chromium-spec.ts +++ b/spec/chromium-spec.ts @@ -1186,7 +1186,7 @@ describe('chromium features', () => { w.webContents.executeJavaScript('window.child = window.open(); child.opener = null'); const [, { webContents }] = await once(app, 'browser-window-created'); const [,, message] = await once(webContents, 'console-message'); - expect(message).to.equal('{"require":"function","module":"undefined","process":"object","Buffer":"function"}'); + expect(message).to.equal('{"require":"function","module":"object","exports":"object","process":"object","Buffer":"function"}'); }); it('disables the tag when it is disabled on the parent window', async () => { diff --git a/spec/fixtures/module/preload.js b/spec/fixtures/module/preload.js index aa7bba4cae8f..3db67d9bde9b 100644 --- a/spec/fixtures/module/preload.js +++ b/spec/fixtures/module/preload.js @@ -1,6 +1,7 @@ const types = { require: typeof require, module: typeof module, + exports: typeof exports, process: typeof process, Buffer: typeof Buffer };