preload-sandbox.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. (function () {
  2. const { setImmediate } = require('node:timers');
  3. const { ipcRenderer } = require('electron');
  4. window.ipcRenderer = ipcRenderer;
  5. window.setImmediate = setImmediate;
  6. window.require = require;
  7. function invoke (code) {
  8. try {
  9. return code();
  10. } catch {
  11. return null;
  12. }
  13. }
  14. process.once('loaded', () => {
  15. ipcRenderer.send('process-loaded');
  16. });
  17. if (location.protocol === 'file:') {
  18. window.test = 'preload';
  19. window.process = process;
  20. if (process.env.sandboxmain) {
  21. window.test = {
  22. osSandbox: !process.argv.includes('--no-sandbox'),
  23. hasCrash: typeof process.crash === 'function',
  24. hasHang: typeof process.hang === 'function',
  25. creationTime: invoke(() => process.getCreationTime()),
  26. heapStatistics: invoke(() => process.getHeapStatistics()),
  27. blinkMemoryInfo: invoke(() => process.getBlinkMemoryInfo()),
  28. processMemoryInfo: invoke(() => process.getProcessMemoryInfo() ? {} : null),
  29. systemMemoryInfo: invoke(() => process.getSystemMemoryInfo()),
  30. systemVersion: invoke(() => process.getSystemVersion()),
  31. cpuUsage: invoke(() => process.getCPUUsage()),
  32. ioCounters: invoke(() => process.getIOCounters()),
  33. uptime: invoke(() => process.uptime()),
  34. // eslint-disable-next-line unicorn/prefer-node-protocol
  35. nodeEvents: invoke(() => require('events') === require('node:events')),
  36. // eslint-disable-next-line unicorn/prefer-node-protocol
  37. nodeTimers: invoke(() => require('timers') === require('node:timers')),
  38. // eslint-disable-next-line unicorn/prefer-node-protocol
  39. nodeUrl: invoke(() => require('url') === require('node:url')),
  40. env: process.env,
  41. execPath: process.execPath,
  42. pid: process.pid,
  43. arch: process.arch,
  44. platform: process.platform,
  45. sandboxed: process.sandboxed,
  46. contextIsolated: process.contextIsolated,
  47. type: process.type,
  48. version: process.version,
  49. versions: process.versions,
  50. contextId: process.contextId
  51. };
  52. }
  53. } else if (location.href !== 'about:blank') {
  54. addEventListener('DOMContentLoaded', () => {
  55. ipcRenderer.on('touch-the-opener', () => {
  56. let errorMessage = null;
  57. try {
  58. // eslint-disable-next-line @typescript-eslint/no-unused-vars
  59. const openerDoc = opener.document;
  60. } catch (error) {
  61. errorMessage = error.message;
  62. }
  63. ipcRenderer.send('answer', errorMessage);
  64. });
  65. ipcRenderer.send('child-loaded', window.opener == null, document.body.innerHTML, location.href);
  66. });
  67. }
  68. })();