electron/spec/fixtures/module/preload-sandbox.js
Milan Burda 5d123765d9
feat: support node: prefixed requires in sandboxed renderer preloads (#38567)
feat: support node: prefixed requires in sandboxed renderer preloads
2023-06-10 14:36:16 -04:00

67 lines
2.4 KiB
JavaScript

(function () {
const { setImmediate } = require('timers');
const { ipcRenderer } = require('electron');
window.ipcRenderer = ipcRenderer;
window.setImmediate = setImmediate;
window.require = require;
function invoke (code) {
try {
return code();
} catch {
return null;
}
}
process.once('loaded', () => {
ipcRenderer.send('process-loaded');
});
if (location.protocol === 'file:') {
window.test = 'preload';
window.process = process;
if (process.env.sandboxmain) {
window.test = {
osSandbox: !process.argv.includes('--no-sandbox'),
hasCrash: typeof process.crash === 'function',
hasHang: typeof process.hang === 'function',
creationTime: invoke(() => process.getCreationTime()),
heapStatistics: invoke(() => process.getHeapStatistics()),
blinkMemoryInfo: invoke(() => process.getBlinkMemoryInfo()),
processMemoryInfo: invoke(() => process.getProcessMemoryInfo() ? {} : null),
systemMemoryInfo: invoke(() => process.getSystemMemoryInfo()),
systemVersion: invoke(() => process.getSystemVersion()),
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,
arch: process.arch,
platform: process.platform,
sandboxed: process.sandboxed,
contextIsolated: process.contextIsolated,
type: process.type,
version: process.version,
versions: process.versions,
contextId: process.contextId
};
}
} else if (location.href !== 'about:blank') {
addEventListener('DOMContentLoaded', () => {
ipcRenderer.on('touch-the-opener', () => {
let errorMessage = null;
try {
const openerDoc = opener.document;
} catch (error) {
errorMessage = error.message;
}
ipcRenderer.send('answer', errorMessage);
});
ipcRenderer.send('child-loaded', window.opener == null, document.body.innerHTML, location.href);
});
}
})();