Skip to content

Commit c213971

Browse files
CharlieHesskevinsawicki
authored andcommitted
Write a warning instead of crashing.
1 parent bc2f1e8 commit c213971

File tree

3 files changed

+15
-10
lines changed

3 files changed

+15
-10
lines changed

lib/browser/rpc-server.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,9 @@ const rendererMissingErrorMessage = (meta, args, callIntoRenderer) => {
160160

161161
if (remoteEvents.length > 0) {
162162
message += `\nRemote event names: ${remoteEvents.join(', ')}`
163+
remoteEvents.forEach((eventName) => {
164+
sender.removeListener(eventName, callIntoRenderer)
165+
})
163166
}
164167

165168
return message
@@ -215,7 +218,7 @@ const unwrapArgs = function (sender, args) {
215218
if (!sender.isDestroyed() && webContentsId === sender.getId()) {
216219
sender.send('ELECTRON_RENDERER_CALLBACK', meta.id, valueToMeta(sender, args))
217220
} else {
218-
throw new Error(rendererMissingErrorMessage(meta, args, callIntoRenderer))
221+
console.warn(rendererMissingErrorMessage(meta, args, callIntoRenderer))
219222
}
220223
}
221224

spec/api-ipc-spec.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,7 @@ describe('ipc module', function () {
495495
assert.equal(w.listenerCount('test'), 0)
496496
})
497497

498-
it('throws an error when a function is called in a destroyed renderer', (done) => {
498+
it('shows a warning when a function is called in a destroyed renderer', (done) => {
499499
w = new BrowserWindow({
500500
show: false
501501
})
@@ -506,8 +506,8 @@ describe('ipc module', function () {
506506
'Function provided here: remote-event-handler.html:11:33',
507507
'Remote event names: remote-handler, other-remote-handler'
508508
].join('\n')
509-
const errorMessage = ipcRenderer.sendSync('try-emit-web-contents-event', w.webContents.id, 'remote-handler')
510-
assert.equal(errorMessage, expectedMessage)
509+
const warningMessage = ipcRenderer.sendSync('try-emit-web-contents-event', w.webContents.id, 'remote-handler')
510+
assert.equal(warningMessage, expectedMessage)
511511
done()
512512
})
513513
w.webContents.reload()

spec/static/main.js

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -251,11 +251,13 @@ ipcMain.on('prevent-next-new-window', (event, id) => {
251251
})
252252

253253
ipcMain.on('try-emit-web-contents-event', (event, id, eventName) => {
254-
const contents = webContents.fromId(id)
255-
try {
256-
contents.emit(eventName, {sender: contents})
257-
event.returnValue = null
258-
} catch (error) {
259-
event.returnValue = error.message
254+
const consoleWarn = console.warn
255+
let lastWarning = null
256+
console.warn = (message) => {
257+
lastWarning = message
260258
}
259+
const contents = webContents.fromId(id)
260+
contents.emit(eventName, {sender: contents})
261+
event.returnValue = lastWarning
262+
console.warn = consoleWarn
261263
})

0 commit comments

Comments
 (0)