refactor: simplify isRemoteModuleEnabled handling in sandboxed renderers (#15961)
This commit is contained in:
parent
ab2a061b59
commit
764a10f7c7
3 changed files with 13 additions and 25 deletions
|
@ -6,7 +6,6 @@ for (const {
|
||||||
name,
|
name,
|
||||||
load,
|
load,
|
||||||
enabled = true,
|
enabled = true,
|
||||||
configurable = false,
|
|
||||||
private: isPrivate = false
|
private: isPrivate = false
|
||||||
} of moduleList) {
|
} of moduleList) {
|
||||||
if (!enabled) {
|
if (!enabled) {
|
||||||
|
@ -14,7 +13,6 @@ for (const {
|
||||||
}
|
}
|
||||||
|
|
||||||
Object.defineProperty(exports, name, {
|
Object.defineProperty(exports, name, {
|
||||||
configurable,
|
|
||||||
enumerable: !isPrivate,
|
enumerable: !isPrivate,
|
||||||
get: load
|
get: load
|
||||||
})
|
})
|
||||||
|
|
|
@ -22,8 +22,8 @@ module.exports = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'remote',
|
name: 'remote',
|
||||||
configurable: true, // will be configured in init.js
|
load: () => require('@electron/internal/renderer/api/remote'),
|
||||||
load: () => require('@electron/internal/renderer/api/remote')
|
enabled: process.isRemoteModuleEnabled
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'webFrame',
|
name: 'webFrame',
|
||||||
|
|
|
@ -7,9 +7,6 @@ const { EventEmitter } = events
|
||||||
|
|
||||||
process.atomBinding = require('@electron/internal/common/atom-binding-setup')(binding.get, 'renderer')
|
process.atomBinding = require('@electron/internal/common/atom-binding-setup')(binding.get, 'renderer')
|
||||||
|
|
||||||
// The electron module depends on process.atomBinding
|
|
||||||
const electron = require('electron')
|
|
||||||
|
|
||||||
const v8Util = process.atomBinding('v8_util')
|
const v8Util = process.atomBinding('v8_util')
|
||||||
// Expose browserify Buffer as a hidden value. This is used by C++ code to
|
// Expose browserify Buffer as a hidden value. This is used by C++ code to
|
||||||
// deserialize Buffer instances sent from browser process.
|
// deserialize Buffer instances sent from browser process.
|
||||||
|
@ -29,6 +26,17 @@ for (const prop of Object.keys(EventEmitter.prototype)) {
|
||||||
}
|
}
|
||||||
Object.setPrototypeOf(process, EventEmitter.prototype)
|
Object.setPrototypeOf(process, EventEmitter.prototype)
|
||||||
|
|
||||||
|
const ipcRenderer = require('@electron/internal/renderer/ipc-renderer-internal')
|
||||||
|
|
||||||
|
const {
|
||||||
|
preloadSrc, preloadError, isRemoteModuleEnabled, process: processProps
|
||||||
|
} = ipcRenderer.sendSync('ELECTRON_BROWSER_SANDBOX_LOAD')
|
||||||
|
|
||||||
|
process.isRemoteModuleEnabled = isRemoteModuleEnabled
|
||||||
|
|
||||||
|
// The electron module depends on process.atomBinding
|
||||||
|
const electron = require('electron')
|
||||||
|
|
||||||
const remoteModules = new Set([
|
const remoteModules = new Set([
|
||||||
'child_process',
|
'child_process',
|
||||||
'fs',
|
'fs',
|
||||||
|
@ -48,8 +56,6 @@ const loadedModules = new Map([
|
||||||
const ipcNative = process.atomBinding('ipc')
|
const ipcNative = process.atomBinding('ipc')
|
||||||
v8Util.setHiddenValue(global, 'ipcNative', ipcNative)
|
v8Util.setHiddenValue(global, 'ipcNative', ipcNative)
|
||||||
|
|
||||||
const ipcRenderer = require('@electron/internal/renderer/ipc-renderer-internal')
|
|
||||||
|
|
||||||
ipcNative.onInternalMessage = function (channel, args, senderId) {
|
ipcNative.onInternalMessage = function (channel, args, senderId) {
|
||||||
ipcRenderer.emit(channel, { sender: ipcRenderer, senderId }, ...args)
|
ipcRenderer.emit(channel, { sender: ipcRenderer, senderId }, ...args)
|
||||||
}
|
}
|
||||||
|
@ -62,22 +68,6 @@ ipcNative.onExit = function () {
|
||||||
process.emit('exit')
|
process.emit('exit')
|
||||||
}
|
}
|
||||||
|
|
||||||
const {
|
|
||||||
preloadSrc, preloadError, isRemoteModuleEnabled, process: processProps
|
|
||||||
} = ipcRenderer.sendSync('ELECTRON_BROWSER_SANDBOX_LOAD')
|
|
||||||
|
|
||||||
const makePropertyNonConfigurable = function (object, name) {
|
|
||||||
const descriptor = Object.getOwnPropertyDescriptor(electron, name)
|
|
||||||
descriptor.configurable = false
|
|
||||||
Object.defineProperty(electron, name, descriptor)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isRemoteModuleEnabled) {
|
|
||||||
makePropertyNonConfigurable(electron, 'remote')
|
|
||||||
} else {
|
|
||||||
delete electron.remote
|
|
||||||
}
|
|
||||||
|
|
||||||
require('@electron/internal/renderer/web-frame-init')()
|
require('@electron/internal/renderer/web-frame-init')()
|
||||||
|
|
||||||
// Pass different process object to the preload script(which should not have
|
// Pass different process object to the preload script(which should not have
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue