From 8262f24fd852bdf3f5992e7f8622a35ab9c798df Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Wed, 22 Apr 2020 16:36:15 -0700 Subject: [PATCH] fix: do not mutate ipc instances across contexts (#23236) --- lib/renderer/api/ipc-renderer.ts | 47 ++++++++++++++------------- lib/renderer/ipc-renderer-internal.ts | 41 ++++++++++++----------- 2 files changed, 47 insertions(+), 41 deletions(-) diff --git a/lib/renderer/api/ipc-renderer.ts b/lib/renderer/api/ipc-renderer.ts index 045cf47d1c..2fdfa17f35 100644 --- a/lib/renderer/api/ipc-renderer.ts +++ b/lib/renderer/api/ipc-renderer.ts @@ -5,32 +5,35 @@ 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); -}; +// TODO(MarshallOfSound): Remove if statement when isolated_bundle and content_script_bundle are gone +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.sendSync = function (channel, ...args) { + return ipc.sendSync(internal, channel, args)[0]; + }; -ipcRenderer.sendToHost = function (channel, ...args) { - return ipc.sendToHost(channel, args); -}; + 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.sendTo = function (webContentsId, channel, ...args) { + return ipc.sendTo(internal, false, webContentsId, channel, args); + }; -ipcRenderer.invoke = async function (channel, ...args) { - const { error, result } = await ipc.invoke(internal, channel, args); - if (error) { - throw new Error(`Error invoking remote method '${channel}': ${error}`); - } - return result; -}; + ipcRenderer.invoke = async function (channel, ...args) { + const { error, result } = await ipc.invoke(internal, channel, args); + if (error) { + throw new Error(`Error invoking remote method '${channel}': ${error}`); + } + return result; + }; -ipcRenderer.postMessage = function (channel: string, message: any, transferables: any) { - return ipc.postMessage(channel, message, transferables); -}; + ipcRenderer.postMessage = function (channel: string, message: any, transferables: any) { + return ipc.postMessage(channel, message, transferables); + }; +} export default ipcRenderer; diff --git a/lib/renderer/ipc-renderer-internal.ts b/lib/renderer/ipc-renderer-internal.ts index 97fe16b4ad..6c4098f0f9 100644 --- a/lib/renderer/ipc-renderer-internal.ts +++ b/lib/renderer/ipc-renderer-internal.ts @@ -5,26 +5,29 @@ const v8Util = process.electronBinding('v8_util'); export const ipcRendererInternal = v8Util.getHiddenValue(global, 'ipc-internal'); const internal = true; -ipcRendererInternal.send = function (channel, ...args) { - return ipc.send(internal, channel, args); -}; +// TODO(MarshallOfSound): Remove if statement when isolated_bundle and content_script_bundle are gone +if (!ipcRendererInternal.send) { + ipcRendererInternal.send = function (channel, ...args) { + return ipc.send(internal, channel, args); + }; -ipcRendererInternal.sendSync = function (channel, ...args) { - return ipc.sendSync(internal, channel, args)[0]; -}; + ipcRendererInternal.sendSync = function (channel, ...args) { + return ipc.sendSync(internal, channel, args)[0]; + }; -ipcRendererInternal.sendTo = function (webContentsId, channel, ...args) { - return ipc.sendTo(internal, false, webContentsId, channel, args); -}; + ipcRendererInternal.sendTo = function (webContentsId, channel, ...args) { + return ipc.sendTo(internal, false, webContentsId, channel, args); + }; -ipcRendererInternal.sendToAll = function (webContentsId, channel, ...args) { - return ipc.sendTo(internal, true, webContentsId, channel, args); -}; + ipcRendererInternal.sendToAll = function (webContentsId, channel, ...args) { + return ipc.sendTo(internal, true, webContentsId, channel, args); + }; -ipcRendererInternal.invoke = async function (channel: string, ...args: any[]) { - const { error, result } = await ipc.invoke(internal, channel, args); - if (error) { - throw new Error(`Error invoking remote method '${channel}': ${error}`); - } - return result; -}; + ipcRendererInternal.invoke = async function (channel: string, ...args: any[]) { + const { error, result } = await ipc.invoke(internal, channel, args); + if (error) { + throw new Error(`Error invoking remote method '${channel}': ${error}`); + } + return result; + }; +}