Browse Source

fix: do not mutate ipc instances across contexts (#23241)

Samuel Attard 5 years ago
parent
commit
d0a326c1d6
2 changed files with 33 additions and 29 deletions
  1. 20 18
      lib/renderer/api/ipc-renderer.js
  2. 13 11
      lib/renderer/ipc-renderer-internal.ts

+ 20 - 18
lib/renderer/api/ipc-renderer.js

@@ -7,24 +7,26 @@ const v8Util = process.electronBinding('v8_util')
 const ipcRenderer = v8Util.getHiddenValue(global, 'ipc')
 const internal = false
 
-ipcRenderer.send = function (channel, ...args) {
-  return ipc.send(internal, channel, args)
-}
-
-ipcRenderer.sendSync = function (channel, ...args) {
-  return ipc.sendSync(internal, channel, args)[0]
-}
-
-ipcRenderer.sendToHost = function (channel, ...args) {
-  return ipc.sendToHost(channel, args)
-}
-
-ipcRenderer.sendTo = function (webContentsId, channel, ...args) {
-  return ipc.sendTo(internal, false, webContentsId, channel, args)
-}
-
-ipcRenderer.sendToAll = function (webContentsId, channel, ...args) {
-  return ipc.sendTo(internal, true, webContentsId, channel, args)
+if (!ipcRenderer.send) {
+  ipcRenderer.send = function (channel, ...args) {
+    return ipc.send(internal, channel, args)
+  }
+
+  ipcRenderer.sendSync = function (channel, ...args) {
+    return ipc.sendSync(internal, channel, args)[0]
+  }
+
+  ipcRenderer.sendToHost = function (channel, ...args) {
+    return ipc.sendToHost(channel, args)
+  }
+
+  ipcRenderer.sendTo = function (webContentsId, channel, ...args) {
+    return ipc.sendTo(internal, false, webContentsId, channel, args)
+  }
+
+  ipcRenderer.sendToAll = function (webContentsId, channel, ...args) {
+    return ipc.sendTo(internal, true, webContentsId, channel, args)
+  }
 }
 
 module.exports = ipcRenderer

+ 13 - 11
lib/renderer/ipc-renderer-internal.ts

@@ -5,18 +5,20 @@ const v8Util = process.electronBinding('v8_util')
 export const ipcRendererInternal: Electron.IpcRendererInternal = v8Util.getHiddenValue(global, 'ipc-internal')
 const internal = true
 
-ipcRendererInternal.send = function (channel, ...args) {
-  return binding.ipc.send(internal, channel, args)
-}
+if (!ipcRendererInternal.send) {
+  ipcRendererInternal.send = function (channel, ...args) {
+    return binding.ipc.send(internal, channel, args)
+  }
 
-ipcRendererInternal.sendSync = function (channel, ...args) {
-  return binding.ipc.sendSync(internal, channel, args)[0]
-}
+  ipcRendererInternal.sendSync = function (channel, ...args) {
+    return binding.ipc.sendSync(internal, channel, args)[0]
+  }
 
-ipcRendererInternal.sendTo = function (webContentsId, channel, ...args) {
-  return binding.ipc.sendTo(internal, false, webContentsId, channel, args)
-}
+  ipcRendererInternal.sendTo = function (webContentsId, channel, ...args) {
+    return binding.ipc.sendTo(internal, false, webContentsId, channel, args)
+  }
 
-ipcRendererInternal.sendToAll = function (webContentsId, channel, ...args) {
-  return binding.ipc.sendTo(internal, true, webContentsId, channel, args)
+  ipcRendererInternal.sendToAll = function (webContentsId, channel, ...args) {
+    return binding.ipc.sendTo(internal, true, webContentsId, channel, args)
+  }
 }