feat: add app render-process-gone event (#23560)
This commit is contained in:
parent
9d7ba98209
commit
52b50e6b33
3 changed files with 47 additions and 0 deletions
|
@ -369,6 +369,30 @@ Returns:
|
||||||
|
|
||||||
Emitted when the renderer process of `webContents` crashes or is killed.
|
Emitted when the renderer process of `webContents` crashes or is killed.
|
||||||
|
|
||||||
|
**Deprecated:** This event is superceded by the `render-process-gone` event
|
||||||
|
which contains more information about why the render process dissapeared. It
|
||||||
|
isn't always because it crashed. The `killed` boolean can be replaced by
|
||||||
|
checking `reason === 'killed'` when you switch to that event.
|
||||||
|
|
||||||
|
#### Event: 'render-process-gone'
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
|
||||||
|
* `event` Event
|
||||||
|
* `webContents` [WebContents](web-contents.md)
|
||||||
|
* `details` Object
|
||||||
|
* `reason` String - The reason the render process is gone. Possible values:
|
||||||
|
* `clean-exit` - Process exited with an exit code of zero
|
||||||
|
* `abnormal-exit` - Process exited with a non-zero exit code
|
||||||
|
* `killed` - Process was sent a SIGTERM or otherwise killed externally
|
||||||
|
* `crashed` - Process crashed
|
||||||
|
* `oom` - Process ran out of memory
|
||||||
|
* `launch-failure` - Process never successfully launched
|
||||||
|
* `integrity-failure` - Windows code integrity checks failed
|
||||||
|
|
||||||
|
Emitted when the renderer process unexpectedly dissapears. This is normally
|
||||||
|
because it was crashed or killed.
|
||||||
|
|
||||||
### Event: 'accessibility-support-changed' _macOS_ _Windows_
|
### Event: 'accessibility-support-changed' _macOS_ _Windows_
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
|
@ -501,6 +501,10 @@ WebContents.prototype._init = function () {
|
||||||
app.emit('renderer-process-crashed', event, this, ...args);
|
app.emit('renderer-process-crashed', event, this, ...args);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.on('render-process-gone', (event, ...args) => {
|
||||||
|
app.emit('render-process-gone', event, this, ...args);
|
||||||
|
});
|
||||||
|
|
||||||
// The devtools requests the webContents to reload.
|
// The devtools requests the webContents to reload.
|
||||||
this.on('devtools-reload-page', function () {
|
this.on('devtools-reload-page', function () {
|
||||||
this.reload();
|
this.reload();
|
||||||
|
|
|
@ -432,6 +432,25 @@ describe('app module', () => {
|
||||||
expect(webContents).to.equal(w.webContents);
|
expect(webContents).to.equal(w.webContents);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should emit render-process-gone event when renderer crashes', async function () {
|
||||||
|
// FIXME: re-enable this test on win32.
|
||||||
|
if (process.platform === 'win32') { return this.skip(); }
|
||||||
|
w = new BrowserWindow({
|
||||||
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
await w.loadURL('about:blank');
|
||||||
|
|
||||||
|
const promise = emittedOnce(app, 'render-process-gone');
|
||||||
|
w.webContents.executeJavaScript('process.crash()');
|
||||||
|
|
||||||
|
const [, webContents, details] = await promise;
|
||||||
|
expect(webContents).to.equal(w.webContents);
|
||||||
|
expect(details.reason).to.be.oneOf(['crashed', 'abnormal-exit']);
|
||||||
|
});
|
||||||
|
|
||||||
ifdescribe(features.isDesktopCapturerEnabled())('desktopCapturer module filtering', () => {
|
ifdescribe(features.isDesktopCapturerEnabled())('desktopCapturer module filtering', () => {
|
||||||
it('should emit desktop-capturer-get-sources event when desktopCapturer.getSources() is invoked', async () => {
|
it('should emit desktop-capturer-get-sources event when desktopCapturer.getSources() is invoked', async () => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue