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,
|
||||
load,
|
||||
enabled = true,
|
||||
configurable = false,
|
||||
private: isPrivate = false
|
||||
} of moduleList) {
|
||||
if (!enabled) {
|
||||
|
@ -14,7 +13,6 @@ for (const {
|
|||
}
|
||||
|
||||
Object.defineProperty(exports, name, {
|
||||
configurable,
|
||||
enumerable: !isPrivate,
|
||||
get: load
|
||||
})
|
||||
|
|
|
@ -22,8 +22,8 @@ module.exports = [
|
|||
},
|
||||
{
|
||||
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',
|
||||
|
|
|
@ -7,9 +7,6 @@ const { EventEmitter } = events
|
|||
|
||||
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')
|
||||
// Expose browserify Buffer as a hidden value. This is used by C++ code to
|
||||
// deserialize Buffer instances sent from browser process.
|
||||
|
@ -29,6 +26,17 @@ for (const prop of Object.keys(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([
|
||||
'child_process',
|
||||
'fs',
|
||||
|
@ -48,8 +56,6 @@ const loadedModules = new Map([
|
|||
const ipcNative = process.atomBinding('ipc')
|
||||
v8Util.setHiddenValue(global, 'ipcNative', ipcNative)
|
||||
|
||||
const ipcRenderer = require('@electron/internal/renderer/ipc-renderer-internal')
|
||||
|
||||
ipcNative.onInternalMessage = function (channel, args, senderId) {
|
||||
ipcRenderer.emit(channel, { sender: ipcRenderer, senderId }, ...args)
|
||||
}
|
||||
|
@ -62,22 +68,6 @@ ipcNative.onExit = function () {
|
|||
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')()
|
||||
|
||||
// Pass different process object to the preload script(which should not have
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue