|
@@ -29,9 +29,17 @@ let nextId = 0
|
|
|
export function invokeInWebContents<T> (sender: Electron.WebContentsInternal, command: string, ...args: any[]) {
|
|
|
return new Promise<T>((resolve, reject) => {
|
|
|
const requestId = ++nextId
|
|
|
- ipcMainInternal.once(`${command}_RESPONSE_${requestId}`, (
|
|
|
- _event, error: Electron.SerializedError, result: any
|
|
|
- ) => {
|
|
|
+ const channel = `${command}_RESPONSE_${requestId}`
|
|
|
+ ipcMainInternal.on(channel, function handler (
|
|
|
+ event, error: Electron.SerializedError, result: any
|
|
|
+ ) {
|
|
|
+ if (event.sender !== sender) {
|
|
|
+ console.error(`Reply to ${command} sent by unexpected WebContents (${event.sender.id})`)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ ipcMainInternal.removeListener(channel, handler)
|
|
|
+
|
|
|
if (error) {
|
|
|
reject(errorUtils.deserialize(error))
|
|
|
} else {
|