const {ipcMain, isPromise, webContents} = electron
-const fs = require('fs')
-
const objectsRegistry = require('./objects-registry')
const hasProp = {}.hasOwnProperty
}
})
-ipcMain.on('ELECTRON_BROWSER_READ_FILE', function (event, file) {
- fs.readFile(file, (err, data) => {
- if (err) event.returnValue = {err: err.message}
- else event.returnValue = {data: data.toString()}
- })
-})
-
ipcMain.on('ELECTRON_BROWSER_GET_BUILTIN', function (event, module) {
try {
event.returnValue = valueToMeta(event.sender, electron[module])
['electron', electron]
])
-// Fetch the preload script. This needs to be done through the browser process
-// since we may not have filesystem access in a sandboxed renderer.
-let preloadSrc = electron.ipcRenderer.sendSync('ELECTRON_BROWSER_READ_FILE', preloadPath)
-if (preloadSrc.err) {
- throw new Error(preloadSrc.err)
+const extraModules = [
+ 'fs'
+]
+for (let extraModule of extraModules) {
+ preloadModules.set(extraModule, electron.remote.require(extraModule))
}
+// Fetch the preload script using the "fs" module proxy.
+let preloadSrc = preloadModules.get('fs').readFileSync(preloadPath).toString()
+
// Pass different process object to the preload script(which should not have
// access to things like `process.atomBinding`).
const preloadProcess = new events.EventEmitter()
// since browserify won't try to include `electron` in the bundle, falling back
// to the `preloadRequire` function above.
let preloadWrapperSrc = `(function(require, process, Buffer, global) {
-${preloadSrc.data}
+${preloadSrc}
})`
// eval in window scope: