feat: support node:
prefixed requires in sandboxed renderer preloads (#38567)
feat: support node: prefixed requires in sandboxed renderer preloads
This commit is contained in:
parent
fd5e6fbc14
commit
5d123765d9
4 changed files with 17 additions and 2 deletions
|
@ -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)
|
* [`timers`](https://nodejs.org/api/timers.html)
|
||||||
* [`url`](https://nodejs.org/api/url.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:
|
In addition, the preload script also polyfills certain Node.js primitives as globals:
|
||||||
|
|
||||||
* [`Buffer`](https://nodejs.org/api/buffer.html)
|
* [`Buffer`](https://nodejs.org/api/buffer.html)
|
||||||
|
|
|
@ -38,12 +38,15 @@ const loadedModules = new Map<string, any>([
|
||||||
['electron', electron],
|
['electron', electron],
|
||||||
['electron/common', electron],
|
['electron/common', electron],
|
||||||
['electron/renderer', electron],
|
['electron/renderer', electron],
|
||||||
['events', events]
|
['events', events],
|
||||||
|
['node:events', events]
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const loadableModules = new Map<string, Function>([
|
const loadableModules = new Map<string, Function>([
|
||||||
['timers', () => require('timers')],
|
['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.
|
// Pass different process object to the preload script.
|
||||||
|
|
|
@ -3714,6 +3714,9 @@ describe('BrowserWindow module', () => {
|
||||||
expect(test.version).to.equal(process.version);
|
expect(test.version).to.equal(process.version);
|
||||||
expect(test.versions).to.deep.equal(process.versions);
|
expect(test.versions).to.deep.equal(process.versions);
|
||||||
expect(test.contextId).to.be.a('string');
|
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) {
|
if (process.platform === 'linux' && test.osSandbox) {
|
||||||
expect(test.creationTime).to.be.null('creation time');
|
expect(test.creationTime).to.be.null('creation time');
|
||||||
|
|
3
spec/fixtures/module/preload-sandbox.js
vendored
3
spec/fixtures/module/preload-sandbox.js
vendored
|
@ -34,6 +34,9 @@
|
||||||
cpuUsage: invoke(() => process.getCPUUsage()),
|
cpuUsage: invoke(() => process.getCPUUsage()),
|
||||||
ioCounters: invoke(() => process.getIOCounters()),
|
ioCounters: invoke(() => process.getIOCounters()),
|
||||||
uptime: invoke(() => process.uptime()),
|
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,
|
env: process.env,
|
||||||
execPath: process.execPath,
|
execPath: process.execPath,
|
||||||
pid: process.pid,
|
pid: process.pid,
|
||||||
|
|
Loading…
Reference in a new issue