2025-01-23 21:12:23 -05:00
|
|
|
import '@electron/internal/sandboxed_renderer/pre-init';
|
2020-10-13 23:11:06 +02:00
|
|
|
import { IPC_MESSAGES } from '@electron/internal/common/ipc-messages';
|
2024-10-02 19:10:44 -07:00
|
|
|
import type * as ipcRendererUtilsModule from '@electron/internal/renderer/ipc-renderer-internal-utils';
|
2025-01-23 21:12:23 -05:00
|
|
|
import { createPreloadProcessObject, executeSandboxedPreloadScripts } from '@electron/internal/sandboxed_renderer/preload';
|
2024-10-02 19:10:44 -07:00
|
|
|
|
|
|
|
import * as events from 'events';
|
|
|
|
import { setImmediate, clearImmediate } from 'timers';
|
2021-05-06 03:05:01 +02:00
|
|
|
|
2023-05-24 20:01:07 +02:00
|
|
|
declare const binding: {
|
|
|
|
get: (name: string) => any;
|
|
|
|
process: NodeJS.Process;
|
|
|
|
createPreloadScript: (src: string) => Function
|
|
|
|
};
|
|
|
|
|
2020-06-22 20:32:45 -07:00
|
|
|
const v8Util = process._linkedBinding('electron_common_v8_util');
|
2021-05-06 03:05:01 +02:00
|
|
|
const ipcRendererUtils = require('@electron/internal/renderer/ipc-renderer-internal-utils') as typeof ipcRendererUtilsModule;
|
2018-12-05 19:07:56 +01:00
|
|
|
|
2023-06-14 20:06:46 +02:00
|
|
|
const {
|
|
|
|
preloadScripts,
|
|
|
|
process: processProps
|
|
|
|
} = ipcRendererUtils.invokeSync<{
|
2025-01-23 21:12:23 -05:00
|
|
|
preloadScripts: ElectronInternal.PreloadScript[];
|
2023-06-14 20:06:46 +02:00
|
|
|
process: NodeJS.Process;
|
|
|
|
}>(IPC_MESSAGES.BROWSER_SANDBOX_LOAD);
|
2018-12-05 19:07:56 +01:00
|
|
|
|
|
|
|
const electron = require('electron');
|
|
|
|
|
2020-06-02 02:32:32 -07:00
|
|
|
const loadedModules = new Map<string, any>([
|
2017-03-21 10:41:23 -03:00
|
|
|
['electron', electron],
|
2020-06-01 17:37:02 -07:00
|
|
|
['electron/common', electron],
|
|
|
|
['electron/renderer', electron],
|
2023-06-10 20:36:16 +02:00
|
|
|
['events', events],
|
|
|
|
['node:events', events]
|
2020-06-02 02:32:32 -07:00
|
|
|
]);
|
|
|
|
|
|
|
|
const loadableModules = new Map<string, Function>([
|
|
|
|
['timers', () => require('timers')],
|
2023-06-10 20:36:16 +02:00
|
|
|
['node:timers', () => require('timers')],
|
|
|
|
['url', () => require('url')],
|
|
|
|
['node:url', () => require('url')]
|
2016-08-21 07:30:14 -03:00
|
|
|
]);
|
|
|
|
|
2025-01-23 21:12:23 -05:00
|
|
|
const preloadProcess = createPreloadProcessObject();
|
2018-09-26 07:44:55 +02:00
|
|
|
|
2023-02-03 11:59:57 +01:00
|
|
|
// InvokeEmitProcessEvent in ElectronSandboxedRendererClient will look for this
|
|
|
|
v8Util.setHiddenValue(global, 'emit-process-event', (event: string) => {
|
|
|
|
(process as events.EventEmitter).emit(event);
|
|
|
|
(preloadProcess as events.EventEmitter).emit(event);
|
|
|
|
});
|
|
|
|
|
2018-09-30 23:24:00 +02:00
|
|
|
Object.assign(preloadProcess, binding.process);
|
2018-08-21 20:05:45 +02:00
|
|
|
Object.assign(preloadProcess, processProps);
|
2018-09-30 23:24:00 +02:00
|
|
|
|
2018-08-21 20:05:45 +02:00
|
|
|
Object.assign(process, processProps);
|
2018-05-21 09:56:05 -03:00
|
|
|
|
2021-11-10 01:59:33 +01:00
|
|
|
// Common renderer initialization
|
|
|
|
require('@electron/internal/renderer/common-init');
|
2018-07-02 09:06:26 -07:00
|
|
|
|
2025-01-23 21:12:23 -05:00
|
|
|
executeSandboxedPreloadScripts({
|
|
|
|
loadedModules,
|
|
|
|
loadableModules,
|
|
|
|
process: preloadProcess,
|
|
|
|
createPreloadScript: binding.createPreloadScript,
|
|
|
|
exposeGlobals: {
|
|
|
|
Buffer,
|
|
|
|
// FIXME(samuelmaddock): workaround webpack bug replacing this with just
|
|
|
|
// `__webpack_require__.g,` which causes script error
|
|
|
|
global: globalThis,
|
|
|
|
setImmediate,
|
|
|
|
clearImmediate
|
2019-01-18 12:03:43 +01:00
|
|
|
}
|
2025-01-23 21:12:23 -05:00
|
|
|
}, preloadScripts);
|