refactor: simplify isRemoteModuleEnabled handling in sandboxed renderers (#15961)

This commit is contained in:
Milan Burda 2018-12-05 19:07:56 +01:00 committed by Shelley Vohr
parent ab2a061b59
commit 764a10f7c7
3 changed files with 13 additions and 25 deletions

View file

@ -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
}) })

View file

@ -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',

View file

@ -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