Don't require browser process module from renderer
This can cause issues when it is accessed from the require cache or module tree since the getters throw errors when called.
This commit is contained in:
parent
51d6a55061
commit
e8a79cb88d
2 changed files with 50 additions and 24 deletions
|
@ -5,6 +5,7 @@ common.defineProperties(exports)
|
|||
|
||||
Object.defineProperties(exports, {
|
||||
// Browser side modules, please sort with alphabet order.
|
||||
// Any new modules added here must also be added to the array in remote.js
|
||||
app: {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
|
@ -35,18 +36,18 @@ Object.defineProperties(exports, {
|
|||
return require('../dialog')
|
||||
}
|
||||
},
|
||||
ipcMain: {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return require('../ipc-main')
|
||||
}
|
||||
},
|
||||
globalShortcut: {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return require('../global-shortcut')
|
||||
}
|
||||
},
|
||||
ipcMain: {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return require('../ipc-main')
|
||||
}
|
||||
},
|
||||
Menu: {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
|
@ -59,6 +60,12 @@ Object.defineProperties(exports, {
|
|||
return require('../menu-item')
|
||||
}
|
||||
},
|
||||
net: {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return require('../net')
|
||||
}
|
||||
},
|
||||
powerMonitor: {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
|
@ -107,12 +114,6 @@ Object.defineProperties(exports, {
|
|||
return require('../web-contents')
|
||||
}
|
||||
},
|
||||
net: {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return require('../net')
|
||||
}
|
||||
},
|
||||
|
||||
// The internal modules, invisible unless you know their names.
|
||||
NavigationController: {
|
||||
|
|
|
@ -288,18 +288,6 @@ ipcRenderer.on('ELECTRON_RENDERER_RELEASE_CALLBACK', function (event, id) {
|
|||
callbacksRegistry.remove(id)
|
||||
})
|
||||
|
||||
// List all built-in modules in browser process.
|
||||
const browserModules = require('../../browser/api/exports/electron')
|
||||
|
||||
// And add a helper receiver for each one.
|
||||
for (let name of Object.getOwnPropertyNames(browserModules)) {
|
||||
Object.defineProperty(exports, name, {
|
||||
get: function () {
|
||||
return exports.getBuiltin(name)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// Get remote module.
|
||||
exports.require = function (module) {
|
||||
return metaToValue(ipcRenderer.sendSync('ELECTRON_BROWSER_REQUIRE', module))
|
||||
|
@ -344,3 +332,40 @@ exports.getGuestWebContents = function (guestInstanceId) {
|
|||
const meta = ipcRenderer.sendSync('ELECTRON_BROWSER_GUEST_WEB_CONTENTS', guestInstanceId)
|
||||
return metaToValue(meta)
|
||||
}
|
||||
|
||||
const addBuiltinProperty = (name) => {
|
||||
Object.defineProperty(exports, name, {
|
||||
get: function () {
|
||||
return exports.getBuiltin(name)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// Add each browser module name as a property
|
||||
// This list should match the exports in browser/api/exports/electron.js
|
||||
const browserModules = [
|
||||
'app',
|
||||
'autoUpdater',
|
||||
'BrowserWindow',
|
||||
'contentTracing',
|
||||
'dialog',
|
||||
'globalShortcut',
|
||||
'ipcMain',
|
||||
'Menu',
|
||||
'MenuItem',
|
||||
'net',
|
||||
'powerMonitor',
|
||||
'powerSaveBlocker',
|
||||
'protocol',
|
||||
'screen',
|
||||
'session',
|
||||
'systemPreferences',
|
||||
'Tray',
|
||||
'webContents'
|
||||
]
|
||||
browserModules.forEach(addBuiltinProperty)
|
||||
|
||||
// Add each common module name as a property
|
||||
const commonModules = {}
|
||||
require('../../common/api/exports/electron').defineProperties(commonModules)
|
||||
Object.getOwnPropertyNames(commonModules).forEach(addBuiltinProperty)
|
||||
|
|
Loading…
Reference in a new issue