From 6072da239d927cc0372089dd73912f15c83b0b2d Mon Sep 17 00:00:00 2001 From: Milan Burda Date: Tue, 12 Mar 2019 00:17:24 +0100 Subject: [PATCH] feat: add global renderer-process-crashed event (#17315) --- docs/api/app.md | 10 ++++++++++ lib/browser/api/web-contents.js | 4 ++++ spec/api-app-spec.js | 16 ++++++++++++++++ spec/static/main.js | 10 ++++++---- 4 files changed, 36 insertions(+), 4 deletions(-) diff --git a/docs/api/app.md b/docs/api/app.md index ba6ed5624b09..a9f03b06ccfa 100644 --- a/docs/api/app.md +++ b/docs/api/app.md @@ -352,6 +352,16 @@ Returns: Emitted when the gpu process crashes or is killed. +### Event: 'renderer-process-crashed' + +Returns: + +* `event` Event +* `webContents` [WebContents](web-contents.md) +* `killed` Boolean + +Emitted when the renderer process of `webContents` crashes or is killed. + ### Event: 'accessibility-support-changed' _macOS_ _Windows_ Returns: diff --git a/lib/browser/api/web-contents.js b/lib/browser/api/web-contents.js index 1ab129552ce5..6b46d39fa1e4 100644 --- a/lib/browser/api/web-contents.js +++ b/lib/browser/api/web-contents.js @@ -431,6 +431,10 @@ WebContents.prototype._init = function () { }) } + this.on('crashed', (event, ...args) => { + app.emit('renderer-process-crashed', event, this, ...args) + }) + deprecate.event(this, 'did-get-response-details', '-did-get-response-details') deprecate.event(this, 'did-get-redirect-request', '-did-get-redirect-request') diff --git a/spec/api-app-spec.js b/spec/api-app-spec.js index 7deeccce7271..2f9014c7cd13 100644 --- a/spec/api-app-spec.js +++ b/spec/api-app-spec.js @@ -379,6 +379,22 @@ describe('app module', () => { w = new BrowserWindow({ show: false }) }) + it('should emit renderer-process-crashed event when renderer crashes', async () => { + w = new BrowserWindow({ + show: false, + webPreferences: { + nodeIntegration: true + } + }) + await w.loadURL('about:blank') + + const promise = emittedOnce(app, 'renderer-process-crashed') + w.webContents.executeJavaScript('process.crash()') + + const [, webContents] = await promise + expect(webContents).to.equal(w.webContents) + }) + it('should emit desktop-capturer-get-sources event when desktopCapturer.getSources() is invoked', async () => { w = new BrowserWindow({ show: false, diff --git a/spec/static/main.js b/spec/static/main.js index e74facac7033..fee3e06d682e 100644 --- a/spec/static/main.js +++ b/spec/static/main.js @@ -110,10 +110,12 @@ app.on('window-all-closed', function () { app.quit() }) -app.on('web-contents-created', (event, contents) => { - contents.on('crashed', (event, killed) => { - console.log(`webContents ${contents.id} crashed: ${contents.getURL()} (killed=${killed})`) - }) +app.on('gpu-process-crashed', (event, killed) => { + console.log(`GPU process crashed (killed=${killed})`) +}) + +app.on('renderer-process-crashed', (event, contents, killed) => { + console.log(`webContents ${contents.id} crashed: ${contents.getURL()} (killed=${killed})`) }) app.on('ready', function () {