chore: tsify sandboxed init (#23719)
This commit is contained in:
parent
9f21d09dfd
commit
236c1334e3
4 changed files with 32 additions and 19 deletions
|
@ -167,10 +167,12 @@ auto_filenames = {
|
||||||
"lib/renderer/window-setup.ts",
|
"lib/renderer/window-setup.ts",
|
||||||
"lib/sandboxed_renderer/api/exports/electron.ts",
|
"lib/sandboxed_renderer/api/exports/electron.ts",
|
||||||
"lib/sandboxed_renderer/api/module-list.ts",
|
"lib/sandboxed_renderer/api/module-list.ts",
|
||||||
"lib/sandboxed_renderer/init.js",
|
"lib/sandboxed_renderer/init.ts",
|
||||||
"package.json",
|
"package.json",
|
||||||
"tsconfig.electron.json",
|
"tsconfig.electron.json",
|
||||||
"tsconfig.json",
|
"tsconfig.json",
|
||||||
|
"typings/internal-ambient.d.ts",
|
||||||
|
"typings/internal-electron.d.ts",
|
||||||
]
|
]
|
||||||
|
|
||||||
isolated_bundle_deps = [
|
isolated_bundle_deps = [
|
||||||
|
@ -181,6 +183,8 @@ auto_filenames = {
|
||||||
"package.json",
|
"package.json",
|
||||||
"tsconfig.electron.json",
|
"tsconfig.electron.json",
|
||||||
"tsconfig.json",
|
"tsconfig.json",
|
||||||
|
"typings/internal-ambient.d.ts",
|
||||||
|
"typings/internal-electron.d.ts",
|
||||||
]
|
]
|
||||||
|
|
||||||
browser_bundle_deps = [
|
browser_bundle_deps = [
|
||||||
|
@ -256,6 +260,8 @@ auto_filenames = {
|
||||||
"package.json",
|
"package.json",
|
||||||
"tsconfig.electron.json",
|
"tsconfig.electron.json",
|
||||||
"tsconfig.json",
|
"tsconfig.json",
|
||||||
|
"typings/internal-ambient.d.ts",
|
||||||
|
"typings/internal-electron.d.ts",
|
||||||
]
|
]
|
||||||
|
|
||||||
renderer_bundle_deps = [
|
renderer_bundle_deps = [
|
||||||
|
@ -298,6 +304,8 @@ auto_filenames = {
|
||||||
"package.json",
|
"package.json",
|
||||||
"tsconfig.electron.json",
|
"tsconfig.electron.json",
|
||||||
"tsconfig.json",
|
"tsconfig.json",
|
||||||
|
"typings/internal-ambient.d.ts",
|
||||||
|
"typings/internal-electron.d.ts",
|
||||||
]
|
]
|
||||||
|
|
||||||
worker_bundle_deps = [
|
worker_bundle_deps = [
|
||||||
|
@ -329,5 +337,7 @@ auto_filenames = {
|
||||||
"package.json",
|
"package.json",
|
||||||
"tsconfig.electron.json",
|
"tsconfig.electron.json",
|
||||||
"tsconfig.json",
|
"tsconfig.json",
|
||||||
|
"typings/internal-ambient.d.ts",
|
||||||
|
"typings/internal-electron.d.ts",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
/* eslint no-eval: "off" */
|
/* eslint no-eval: "off" */
|
||||||
/* global binding, Buffer */
|
/* global binding, Buffer */
|
||||||
const events = require('events');
|
import { electronBindingSetup } from '@electron/internal/common/electron-binding-setup';
|
||||||
|
import * as events from 'events';
|
||||||
|
|
||||||
const { EventEmitter } = events;
|
const { EventEmitter } = events;
|
||||||
|
|
||||||
process.electronBinding = require('@electron/internal/common/electron-binding-setup').electronBindingSetup(binding.get, 'renderer');
|
process.electronBinding = electronBindingSetup(binding.get, 'renderer');
|
||||||
|
|
||||||
const v8Util = process.electronBinding('v8_util');
|
const v8Util = process.electronBinding('v8_util');
|
||||||
// Expose Buffer shim as a hidden value. This is used by C++ code to
|
// Expose Buffer shim as a hidden value. This is used by C++ code to
|
||||||
|
@ -19,7 +19,7 @@ v8Util.setHiddenValue(global, 'ipc', new EventEmitter());
|
||||||
v8Util.setHiddenValue(global, 'ipc-internal', new EventEmitter());
|
v8Util.setHiddenValue(global, 'ipc-internal', new EventEmitter());
|
||||||
// The process object created by webpack is not an event emitter, fix it so
|
// The process object created by webpack is not an event emitter, fix it so
|
||||||
// the API is more compatible with non-sandboxed renderers.
|
// the API is more compatible with non-sandboxed renderers.
|
||||||
for (const prop of Object.keys(EventEmitter.prototype)) {
|
for (const prop of Object.keys(EventEmitter.prototype) as (keyof typeof process)[]) {
|
||||||
if (Object.prototype.hasOwnProperty.call(process, prop)) {
|
if (Object.prototype.hasOwnProperty.call(process, prop)) {
|
||||||
delete process[prop];
|
delete process[prop];
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,7 @@ const loadedModules = new Map([
|
||||||
// ElectronApiServiceImpl will look for the "ipcNative" hidden object when
|
// ElectronApiServiceImpl will look for the "ipcNative" hidden object when
|
||||||
// invoking the 'onMessage' callback.
|
// invoking the 'onMessage' callback.
|
||||||
v8Util.setHiddenValue(global, 'ipcNative', {
|
v8Util.setHiddenValue(global, 'ipcNative', {
|
||||||
onMessage (internal, channel, ports, args, senderId) {
|
onMessage (internal: boolean, channel: string, ports: MessagePort[], args: any[], senderId: number) {
|
||||||
const sender = internal ? ipcRendererInternal : electron.ipcRenderer;
|
const sender = internal ? ipcRendererInternal : electron.ipcRenderer;
|
||||||
sender.emit(channel, { sender, senderId, ports }, ...args);
|
sender.emit(channel, { sender, senderId, ports }, ...args);
|
||||||
}
|
}
|
||||||
|
@ -62,16 +62,16 @@ v8Util.setHiddenValue(global, 'ipcNative', {
|
||||||
// ElectronSandboxedRendererClient will look for the "lifecycle" hidden object when
|
// ElectronSandboxedRendererClient will look for the "lifecycle" hidden object when
|
||||||
v8Util.setHiddenValue(global, 'lifecycle', {
|
v8Util.setHiddenValue(global, 'lifecycle', {
|
||||||
onLoaded () {
|
onLoaded () {
|
||||||
process.emit('loaded');
|
(process as events.EventEmitter).emit('loaded');
|
||||||
},
|
},
|
||||||
onExit () {
|
onExit () {
|
||||||
process.emit('exit');
|
(process as events.EventEmitter).emit('exit');
|
||||||
},
|
},
|
||||||
onDocumentStart () {
|
onDocumentStart () {
|
||||||
process.emit('document-start');
|
(process as events.EventEmitter).emit('document-start');
|
||||||
},
|
},
|
||||||
onDocumentEnd () {
|
onDocumentEnd () {
|
||||||
process.emit('document-end');
|
(process as events.EventEmitter).emit('document-end');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ webFrameInit();
|
||||||
|
|
||||||
// Pass different process object to the preload script(which should not have
|
// Pass different process object to the preload script(which should not have
|
||||||
// access to things like `process.electronBinding`).
|
// access to things like `process.electronBinding`).
|
||||||
const preloadProcess = new EventEmitter();
|
const preloadProcess: NodeJS.Process = new EventEmitter() as any;
|
||||||
|
|
||||||
Object.assign(preloadProcess, binding.process);
|
Object.assign(preloadProcess, binding.process);
|
||||||
Object.assign(preloadProcess, processProps);
|
Object.assign(preloadProcess, processProps);
|
||||||
|
@ -97,13 +97,13 @@ Object.defineProperty(preloadProcess, 'noDeprecation', {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
process.on('loaded', () => preloadProcess.emit('loaded'));
|
process.on('loaded', () => (preloadProcess as events.EventEmitter).emit('loaded'));
|
||||||
process.on('exit', () => preloadProcess.emit('exit'));
|
process.on('exit', () => (preloadProcess as events.EventEmitter).emit('exit'));
|
||||||
process.on('document-start', () => preloadProcess.emit('document-start'));
|
(process as events.EventEmitter).on('document-start', () => (preloadProcess as events.EventEmitter).emit('document-start'));
|
||||||
process.on('document-end', () => preloadProcess.emit('document-end'));
|
(process as events.EventEmitter).on('document-end', () => (preloadProcess as events.EventEmitter).emit('document-end'));
|
||||||
|
|
||||||
// This is the `require` function that will be visible to the preload script
|
// This is the `require` function that will be visible to the preload script
|
||||||
function preloadRequire (module) {
|
function preloadRequire (module: string) {
|
||||||
if (loadedModules.has(module)) {
|
if (loadedModules.has(module)) {
|
||||||
return loadedModules.get(module);
|
return loadedModules.get(module);
|
||||||
}
|
}
|
||||||
|
@ -156,7 +156,7 @@ if (process.isMainFrame) {
|
||||||
// - `process`: The `preloadProcess` object
|
// - `process`: The `preloadProcess` object
|
||||||
// - `Buffer`: Shim of `Buffer` implementation
|
// - `Buffer`: Shim of `Buffer` implementation
|
||||||
// - `global`: The window object, which is aliased to `global` by webpack.
|
// - `global`: The window object, which is aliased to `global` by webpack.
|
||||||
function runPreloadScript (preloadSrc) {
|
function runPreloadScript (preloadSrc: string) {
|
||||||
const preloadWrapperSrc = `(function(require, process, Buffer, global, setImmediate, clearImmediate, exports) {
|
const preloadWrapperSrc = `(function(require, process, Buffer, global, setImmediate, clearImmediate, exports) {
|
||||||
${preloadSrc}
|
${preloadSrc}
|
||||||
})`;
|
})`;
|
|
@ -13,6 +13,8 @@ const allDocs = fs.readdirSync(path.resolve(__dirname, '../docs/api'))
|
||||||
.map(doc => `docs/api/structures/${doc}`)
|
.map(doc => `docs/api/structures/${doc}`)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const typingFiles = fs.readdirSync(path.resolve(__dirname, '../typings')).map(child => `typings/${child}`);
|
||||||
|
|
||||||
const main = async () => {
|
const main = async () => {
|
||||||
const webpackTargets = [
|
const webpackTargets = [
|
||||||
{
|
{
|
||||||
|
@ -70,7 +72,7 @@ const main = async () => {
|
||||||
// Only care about our own files
|
// Only care about our own files
|
||||||
.filter(line => !line.startsWith('node_modules'))
|
.filter(line => !line.startsWith('node_modules'))
|
||||||
// All webpack builds depend on the tsconfig and package json files
|
// All webpack builds depend on the tsconfig and package json files
|
||||||
.concat(['tsconfig.json', 'tsconfig.electron.json', 'package.json'])
|
.concat(['tsconfig.json', 'tsconfig.electron.json', 'package.json', ...typingFiles])
|
||||||
// Make the generated list easier to read
|
// Make the generated list easier to read
|
||||||
.sort();
|
.sort();
|
||||||
await fs.remove(tmpDir);
|
await fs.remove(tmpDir);
|
||||||
|
|
1
typings/internal-ambient.d.ts
vendored
1
typings/internal-ambient.d.ts
vendored
|
@ -1,4 +1,5 @@
|
||||||
declare var internalBinding: any;
|
declare var internalBinding: any;
|
||||||
|
declare var binding: { get: (name: string) => any; process: NodeJS.Process; createPreloadScript: (src: string) => Function };
|
||||||
|
|
||||||
declare const BUILDFLAG: (flag: boolean) => boolean;
|
declare const BUILDFLAG: (flag: boolean) => boolean;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue