Skip to content

Commit 0b3bf1e

Browse files
fix: do not mutate ipc instances across contexts (electron#23239)
1 parent fd529ac commit 0b3bf1e

File tree

2 files changed

+42
-38
lines changed

2 files changed

+42
-38
lines changed

lib/renderer/api/ipc-renderer.js

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,33 @@ const v8Util = process.electronBinding('v8_util');
77
const ipcRenderer = v8Util.getHiddenValue(global, 'ipc');
88
const internal = false;
99

10-
ipcRenderer.send = function (channel, ...args) {
11-
return ipc.send(internal, channel, args);
12-
};
13-
14-
ipcRenderer.sendSync = function (channel, ...args) {
15-
return ipc.sendSync(internal, channel, args)[0];
16-
};
17-
18-
ipcRenderer.sendToHost = function (channel, ...args) {
19-
return ipc.sendToHost(channel, args);
20-
};
21-
22-
ipcRenderer.sendTo = function (webContentsId, channel, ...args) {
23-
return ipc.sendTo(internal, false, webContentsId, channel, args);
24-
};
25-
26-
ipcRenderer.sendToAll = function (webContentsId, channel, ...args) {
27-
return ipc.sendTo(internal, true, webContentsId, channel, args);
28-
};
29-
30-
ipcRenderer.invoke = function (channel, ...args) {
31-
return ipc.invoke(channel, args).then(({ error, result }) => {
32-
if (error) { throw new Error(`Error invoking remote method '${channel}': ${error}`); }
33-
return result;
34-
});
35-
};
10+
if (!ipcRenderer.send) {
11+
ipcRenderer.send = function (channel, ...args) {
12+
return ipc.send(internal, channel, args);
13+
};
14+
15+
ipcRenderer.sendSync = function (channel, ...args) {
16+
return ipc.sendSync(internal, channel, args)[0];
17+
};
18+
19+
ipcRenderer.sendToHost = function (channel, ...args) {
20+
return ipc.sendToHost(channel, args);
21+
};
22+
23+
ipcRenderer.sendTo = function (webContentsId, channel, ...args) {
24+
return ipc.sendTo(internal, false, webContentsId, channel, args);
25+
};
26+
27+
ipcRenderer.sendToAll = function (webContentsId, channel, ...args) {
28+
return ipc.sendTo(internal, true, webContentsId, channel, args);
29+
};
30+
31+
ipcRenderer.invoke = function (channel, ...args) {
32+
return ipc.invoke(channel, args).then(({ error, result }) => {
33+
if (error) { throw new Error(`Error invoking remote method '${channel}': ${error}`); }
34+
return result;
35+
});
36+
};
37+
}
3638

3739
module.exports = ipcRenderer;

lib/renderer/ipc-renderer-internal.ts

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,20 @@ const v8Util = process.electronBinding('v8_util');
55
export const ipcRendererInternal: Electron.IpcRendererInternal = v8Util.getHiddenValue(global, 'ipc-internal');
66
const internal = true;
77

8-
ipcRendererInternal.send = function (channel, ...args) {
9-
return binding.ipc.send(internal, channel, args);
10-
};
8+
if (!ipcRendererInternal.send) {
9+
ipcRendererInternal.send = function (channel, ...args) {
10+
return binding.ipc.send(internal, channel, args);
11+
};
1112

12-
ipcRendererInternal.sendSync = function (channel, ...args) {
13-
return binding.ipc.sendSync(internal, channel, args)[0];
14-
};
13+
ipcRendererInternal.sendSync = function (channel, ...args) {
14+
return binding.ipc.sendSync(internal, channel, args)[0];
15+
};
1516

16-
ipcRendererInternal.sendTo = function (webContentsId, channel, ...args) {
17-
return binding.ipc.sendTo(internal, false, webContentsId, channel, args);
18-
};
17+
ipcRendererInternal.sendTo = function (webContentsId, channel, ...args) {
18+
return binding.ipc.sendTo(internal, false, webContentsId, channel, args);
19+
};
1920

20-
ipcRendererInternal.sendToAll = function (webContentsId, channel, ...args) {
21-
return binding.ipc.sendTo(internal, true, webContentsId, channel, args);
22-
};
21+
ipcRendererInternal.sendToAll = function (webContentsId, channel, ...args) {
22+
return binding.ipc.sendTo(internal, true, webContentsId, channel, args);
23+
};
24+
}

0 commit comments

Comments
 (0)