Skip to content

Commit

Permalink
feat: support node: prefixed requires in sandboxed renderer preloads (
Browse files Browse the repository at this point in the history
#38567)

feat: support node: prefixed requires in sandboxed renderer preloads
  • Loading branch information
miniak committed Jun 10, 2023
1 parent fd5e6fb commit 5d12376
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 2 deletions.
6 changes: 6 additions & 0 deletions docs/tutorial/sandbox.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,12 @@ but can only import a subset of Electron and Node's built-in modules:
* [`timers`](https://nodejs.org/api/timers.html)
* [`url`](https://nodejs.org/api/url.html)

[node: imports](https://nodejs.org/api/esm.html#node-imports) are supported as well:

* [`node:events`](https://nodejs.org/api/events.html)
* [`node:timers`](https://nodejs.org/api/timers.html)
* [`node:url`](https://nodejs.org/api/url.html)

In addition, the preload script also polyfills certain Node.js primitives as globals:

* [`Buffer`](https://nodejs.org/api/buffer.html)
Expand Down
7 changes: 5 additions & 2 deletions lib/sandboxed_renderer/init.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,15 @@ const loadedModules = new Map<string, any>([
['electron', electron],
['electron/common', electron],
['electron/renderer', electron],
['events', events]
['events', events],
['node:events', events]
]);

const loadableModules = new Map<string, Function>([
['timers', () => require('timers')],
['url', () => require('url')]
['node:timers', () => require('timers')],
['url', () => require('url')],
['node:url', () => require('url')]
]);

// Pass different process object to the preload script.
Expand Down
3 changes: 3 additions & 0 deletions spec/api-browser-window-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3714,6 +3714,9 @@ describe('BrowserWindow module', () => {
expect(test.version).to.equal(process.version);
expect(test.versions).to.deep.equal(process.versions);
expect(test.contextId).to.be.a('string');
expect(test.nodeEvents).to.equal(true);
expect(test.nodeTimers).to.equal(true);
expect(test.nodeUrl).to.equal(true);

if (process.platform === 'linux' && test.osSandbox) {
expect(test.creationTime).to.be.null('creation time');
Expand Down
3 changes: 3 additions & 0 deletions spec/fixtures/module/preload-sandbox.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@
cpuUsage: invoke(() => process.getCPUUsage()),
ioCounters: invoke(() => process.getIOCounters()),
uptime: invoke(() => process.uptime()),
nodeEvents: invoke(() => require('events') === require('node:events')),
nodeTimers: invoke(() => require('timers') === require('node:timers')),
nodeUrl: invoke(() => require('url') === require('node:url')),
env: process.env,
execPath: process.execPath,
pid: process.pid,
Expand Down

0 comments on commit 5d12376

Please sign in to comment.