Skip to content

Commit

Permalink
refactor: simplify isRemoteModuleEnabled handling in sandboxed render…
Browse files Browse the repository at this point in the history
…ers (#15961)
  • Loading branch information
miniak authored and codebytere committed Dec 5, 2018
1 parent ab2a061 commit 764a10f
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 25 deletions.
2 changes: 0 additions & 2 deletions lib/sandboxed_renderer/api/exports/electron.js
Expand Up @@ -6,15 +6,13 @@ for (const {
name,
load,
enabled = true,
configurable = false,
private: isPrivate = false
} of moduleList) {
if (!enabled) {
continue
}

Object.defineProperty(exports, name, {
configurable,
enumerable: !isPrivate,
get: load
})
Expand Down
4 changes: 2 additions & 2 deletions lib/sandboxed_renderer/api/module-list.js
Expand Up @@ -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',
Expand Down
32 changes: 11 additions & 21 deletions lib/sandboxed_renderer/init.js
Expand Up @@ -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.
Expand All @@ -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',
Expand All @@ -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)
}
Expand All @@ -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
Expand Down

0 comments on commit 764a10f

Please sign in to comment.