Expose builtin v8 modules to AtomSandboxedRendererClient

- Adapt node.cc code that implements `process.binding` to create a similar
  object in AtomSandboxedRendererClient.
- Replace the ipc binding object passed to `lib/sandboxed_renderer/init.js` by
  the new binding object.
- Refactor the initialization script to use this new object to fetch the ipc
  binding and store as a hidden value using the `v8_util` module.

This change also required applying a patch to node.js, so the submodule commit
was updated.
This commit is contained in:
Thiago de Arruda 2017-02-20 10:59:39 -03:00
parent 85d66d2413
commit d78f3cae7b
7 changed files with 89 additions and 31 deletions

View file

@ -2,25 +2,32 @@
// in filenames.gypi so they get built into the preload_bundle.js bundle
/* eslint no-eval: "off" */
/* global binding, preloadPath, process, Buffer */
/* global binding, preloadPath, Buffer */
const events = require('events')
const atomBinding = require('../common/atom-binding-setup')(binding.get, 'renderer')
const v8Util = atomBinding('v8_util')
const ipc = atomBinding('ipc')
const ipcRenderer = new events.EventEmitter()
const proc = new events.EventEmitter()
// eval in window scope:
// http://www.ecma-international.org/ecma-262/5.1/#sec-10.4.2
const geval = eval
require('../renderer/api/ipc-renderer-setup')(ipcRenderer, binding)
require('../renderer/api/ipc-renderer-setup')(ipcRenderer, ipc)
binding.onMessage = function (channel, args) {
ipc.onMessage = function (channel, args) {
ipcRenderer.emit(channel, ...args)
}
binding.onExit = function () {
ipc.onExit = function () {
proc.emit('exit')
}
v8Util.setHiddenValue(global, 'ipc', ipc)
const preloadModules = new Map([
['electron', {
ipcRenderer: ipcRenderer