Browse Source

feat: expose dummy module.exports to the sandboxed preload scripts (#39484)

Milan Burda 1 year ago
parent
commit
3102a257af
3 changed files with 5 additions and 3 deletions
  1. 3 2
      lib/sandboxed_renderer/init.ts
  2. 1 1
      spec/chromium-spec.ts
  3. 1 0
      spec/fixtures/module/preload.js

+ 3 - 2
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) {

+ 1 - 1
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 <webview> tag when it is disabled on the parent window', async () => {

+ 1 - 0
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
 };