From 764a10f7c7ef72971e5e9805dc46df8c77886505 Mon Sep 17 00:00:00 2001 From: Milan Burda Date: Wed, 5 Dec 2018 19:07:56 +0100 Subject: [PATCH] refactor: simplify isRemoteModuleEnabled handling in sandboxed renderers (#15961) --- .../api/exports/electron.js | 2 -- lib/sandboxed_renderer/api/module-list.js | 4 +-- lib/sandboxed_renderer/init.js | 32 +++++++------------ 3 files changed, 13 insertions(+), 25 deletions(-) diff --git a/lib/sandboxed_renderer/api/exports/electron.js b/lib/sandboxed_renderer/api/exports/electron.js index 4b69175c98bf5..2992797b72499 100644 --- a/lib/sandboxed_renderer/api/exports/electron.js +++ b/lib/sandboxed_renderer/api/exports/electron.js @@ -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 }) diff --git a/lib/sandboxed_renderer/api/module-list.js b/lib/sandboxed_renderer/api/module-list.js index 9831fdfa2c1e3..285a27632dafb 100644 --- a/lib/sandboxed_renderer/api/module-list.js +++ b/lib/sandboxed_renderer/api/module-list.js @@ -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', diff --git a/lib/sandboxed_renderer/init.js b/lib/sandboxed_renderer/init.js index c46565220adc3..1d21e335321f3 100644 --- a/lib/sandboxed_renderer/init.js +++ b/lib/sandboxed_renderer/init.js @@ -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