refactor: use separate ipc-renderer-internal / ipc-main-internal APIs for Electron internals (#13940)

This commit is contained in:
Milan Burda 2018-10-06 13:48:00 +02:00 committed by Samuel Attard
parent f7122610cc
commit b50f86ef43
49 changed files with 322 additions and 133 deletions

View file

@ -0,0 +1,12 @@
'use strict'
const CrashReporter = require('@electron/internal/common/crash-reporter')
const ipcRenderer = require('@electron/internal/renderer/ipc-renderer-internal')
class CrashReporterRenderer extends CrashReporter {
sendSync (channel, ...args) {
return ipcRenderer.sendSync(channel, ...args)
}
}
module.exports = new CrashReporterRenderer()

View file

@ -1,6 +1,7 @@
'use strict'
const { ipcRenderer, nativeImage } = require('electron')
const { nativeImage } = require('electron')
const ipcRenderer = require('@electron/internal/renderer/ipc-renderer-internal')
const includes = [].includes
let currentId = 0

View file

@ -5,6 +5,7 @@ const v8Util = process.atomBinding('v8_util')
// Created by init.js.
const ipcRenderer = v8Util.getHiddenValue(global, 'ipc')
const internal = false
ipcRenderer.send = function (...args) {
return binding.send('ipc-message', args)
@ -19,19 +20,11 @@ ipcRenderer.sendToHost = function (...args) {
}
ipcRenderer.sendTo = function (webContentsId, channel, ...args) {
return binding.sendTo(false, webContentsId, channel, args)
return binding.sendTo(internal, false, webContentsId, channel, args)
}
ipcRenderer.sendToAll = function (webContentsId, channel, ...args) {
return binding.sendTo(true, webContentsId, channel, args)
}
const removeAllListeners = ipcRenderer.removeAllListeners.bind(ipcRenderer)
ipcRenderer.removeAllListeners = function (...args) {
if (args.length === 0) {
throw new Error('Removing all listeners from ipcRenderer will make Electron internals stop working. Please specify a event name')
}
removeAllListeners(...args)
return binding.sendTo(internal, true, webContentsId, channel, args)
}
module.exports = ipcRenderer

View file

@ -5,6 +5,7 @@ const features = process.atomBinding('features')
// Renderer side modules, please sort alphabetically.
// A module is `enabled` if there is no explicit condition defined.
module.exports = [
{ name: 'crashReporter', file: 'crash-reporter', enabled: true },
{
name: 'desktopCapturer',
file: 'desktop-capturer',

View file

@ -1,12 +1,13 @@
'use strict'
const v8Util = process.atomBinding('v8_util')
const { ipcRenderer, isPromise } = require('electron')
const { isPromise } = require('electron')
const resolvePromise = Promise.resolve.bind(Promise)
const CallbacksRegistry = require('@electron/internal/renderer/callbacks-registry')
const bufferUtils = require('@electron/internal/common/buffer-utils')
const errorUtils = require('@electron/internal/common/error-utils')
const ipcRenderer = require('@electron/internal/renderer/ipc-renderer-internal')
const callbacksRegistry = new CallbacksRegistry()
const remoteObjectCache = v8Util.createIDWeakMap()

View file

@ -1,6 +1,6 @@
'use strict'
const { ipcRenderer } = require('electron')
const ipcRenderer = require('@electron/internal/renderer/ipc-renderer-internal')
const Event = require('@electron/internal/renderer/extensions/event')
const url = require('url')
@ -43,12 +43,12 @@ class Port {
disconnect () {
if (this.disconnected) return
ipcRenderer.sendToAll(this.tabId, `CHROME_PORT_DISCONNECT_${this.portId}`)
ipcRenderer._sendInternalToAll(this.tabId, `CHROME_PORT_DISCONNECT_${this.portId}`)
this._onDisconnect()
}
postMessage (message) {
ipcRenderer.sendToAll(this.tabId, `CHROME_PORT_POSTMESSAGE_${this.portId}`, message)
ipcRenderer._sendInternalToAll(this.tabId, `CHROME_PORT_POSTMESSAGE_${this.portId}`, message)
}
_onDisconnect () {

View file

@ -1,6 +1,6 @@
'use strict'
const { ipcRenderer } = require('electron')
const ipcRenderer = require('@electron/internal/renderer/ipc-renderer-internal')
const { runInThisContext } = require('vm')
// Check whether pattern matches.

View file

@ -6,7 +6,7 @@
// Does not implement predefined messages:
// https://developer.chrome.com/extensions/i18n#overview-predefined
const { ipcRenderer } = require('electron')
const ipcRenderer = require('@electron/internal/renderer/ipc-renderer-internal')
const fs = require('fs')
const path = require('path')

View file

@ -1,7 +1,7 @@
'use strict'
const Event = require('@electron/internal/renderer/extensions/event')
const { ipcRenderer } = require('electron')
const ipcRenderer = require('@electron/internal/renderer/ipc-renderer-internal')
class WebNavigation {
constructor () {

View file

@ -1,6 +1,6 @@
'use strict'
const events = require('events')
const { EventEmitter } = require('events')
const path = require('path')
const Module = require('module')
@ -22,10 +22,11 @@ globalPaths.push(path.join(__dirname, 'api', 'exports'))
// The global variable will be used by ipc for event dispatching
const v8Util = process.atomBinding('v8_util')
v8Util.setHiddenValue(global, 'ipc', new events.EventEmitter())
v8Util.setHiddenValue(global, 'ipc', new EventEmitter())
v8Util.setHiddenValue(global, 'ipc-internal', new EventEmitter())
// Use electron module after everything is ready.
const { ipcRenderer } = require('electron')
const ipcRenderer = require('@electron/internal/renderer/ipc-renderer-internal')
require('@electron/internal/renderer/web-frame-init')()

View file

@ -0,0 +1,26 @@
'use strict'
const binding = process.atomBinding('ipc')
const v8Util = process.atomBinding('v8_util')
// Created by init.js.
const ipcRenderer = v8Util.getHiddenValue(global, 'ipc-internal')
const internal = true
ipcRenderer.send = function (...args) {
return binding.send('ipc-internal-message', args)
}
ipcRenderer.sendSync = function (...args) {
return binding.sendSync('ipc-internal-message-sync', args)[0]
}
ipcRenderer.sendTo = function (webContentsId, channel, ...args) {
return binding.sendTo(internal, false, webContentsId, channel, args)
}
ipcRenderer.sendToAll = function (webContentsId, channel, ...args) {
return binding.sendTo(internal, true, webContentsId, channel, args)
}
module.exports = ipcRenderer

View file

@ -1,6 +1,6 @@
'use strict'
const { ipcRenderer } = require('electron')
const ipcRenderer = require('@electron/internal/renderer/ipc-renderer-internal')
const { guestInstanceId, openerId } = process
const hiddenPage = process.argv.includes('--hidden-page')

View file

@ -264,7 +264,7 @@ const logSecurityWarnings = function (webPreferences, nodeIntegration) {
}
const getWebPreferences = function () {
const { ipcRenderer } = require('electron')
const ipcRenderer = require('@electron/internal/renderer/ipc-renderer-internal')
const errorUtils = require('@electron/internal/common/error-utils')
const [ error, result ] = ipcRenderer.sendSync('ELECTRON_BROWSER_GET_LAST_WEB_PREFERENCES')

View file

@ -1,6 +1,7 @@
'use strict'
const { ipcRenderer, webFrame } = require('electron')
const { webFrame } = require('electron')
const ipcRenderer = require('@electron/internal/renderer/ipc-renderer-internal')
const errorUtils = require('@electron/internal/common/error-utils')
module.exports = () => {

View file

@ -1,6 +1,7 @@
'use strict'
const { ipcRenderer, webFrame } = require('electron')
const { webFrame } = require('electron')
const ipcRenderer = require('@electron/internal/renderer/ipc-renderer-internal')
let requestId = 0

View file

@ -1,6 +1,6 @@
'use strict'
const { ipcRenderer } = require('electron')
const ipcRenderer = require('@electron/internal/renderer/ipc-renderer-internal')
const WebViewImpl = require('@electron/internal/renderer/web-view/web-view')
const webViewConstants = require('@electron/internal/renderer/web-view/web-view-constants')
const errorUtils = require('@electron/internal/common/error-utils')

View file

@ -1,8 +1,9 @@
'use strict'
const { ipcRenderer, remote, webFrame } = require('electron')
const { remote, webFrame } = require('electron')
const v8Util = process.atomBinding('v8_util')
const ipcRenderer = require('@electron/internal/renderer/ipc-renderer-internal')
const guestViewInternal = require('@electron/internal/renderer/web-view/guest-view-internal')
const webViewConstants = require('@electron/internal/renderer/web-view/web-view-constants')
const errorUtils = require('@electron/internal/common/error-utils')