diff --git a/lib/browser/api/app.ts b/lib/browser/api/app.ts index c0d34fcfc908..5d7ce57880b7 100644 --- a/lib/browser/api/app.ts +++ b/lib/browser/api/app.ts @@ -114,5 +114,11 @@ for (const name of events) { } // Deprecation. -deprecate.event(app, 'gpu-process-crashed', 'child-process-gone'); -deprecate.event(app, 'renderer-process-crashed', 'render-process-gone'); +deprecate.event(app, 'gpu-process-crashed', 'child-process-gone', () => { + // the old event is still emitted by App::OnGpuProcessCrashed() + return undefined; +}); + +deprecate.event(app, 'renderer-process-crashed', 'render-process-gone', (event: Electron.Event, webContents: Electron.WebContents, details: Electron.RenderProcessGoneDetails) => { + return [event, webContents, details.reason === 'killed']; +}); diff --git a/lib/browser/api/web-contents.ts b/lib/browser/api/web-contents.ts index b48624ea5958..7c876d5317cf 100644 --- a/lib/browser/api/web-contents.ts +++ b/lib/browser/api/web-contents.ts @@ -665,8 +665,8 @@ WebContents.prototype._init = function () { ipcMain.emit(channel, event, message); }); - this.on('crashed', (event, ...args) => { - app.emit('renderer-process-crashed', event, this, ...args); + deprecate.event(this, 'crashed', 'render-process-gone', (event: Electron.Event, details: Electron.RenderProcessGoneDetails) => { + return [event, details.reason === 'killed']; }); this.on('render-process-gone', (event, details) => { diff --git a/lib/common/deprecate.ts b/lib/common/deprecate.ts index c6435cc81603..dc4e9d80ca86 100644 --- a/lib/common/deprecate.ts +++ b/lib/common/deprecate.ts @@ -66,14 +66,17 @@ export function renameFunction (fn: T, newName: string): T { } // change the name of an event -export function event (emitter: NodeJS.EventEmitter, oldName: string, newName: string) { +export function event (emitter: NodeJS.EventEmitter, oldName: string, newName: string, transformer: (...args: any[]) => any[] | undefined = (...args) => args) { const warn = newName.startsWith('-') /* internal event */ ? warnOnce(`${oldName} event`) : warnOnce(`${oldName} event`, `${newName} event`); return emitter.on(newName, function (this: NodeJS.EventEmitter, ...args) { if (this.listenerCount(oldName) !== 0) { warn(); - this.emit(oldName, ...args); + const transformedArgs = transformer(...args); + if (transformedArgs) { + this.emit(oldName, ...transformedArgs); + } } }); } diff --git a/shell/browser/api/electron_api_web_contents.cc b/shell/browser/api/electron_api_web_contents.cc index d820fb8ba693..4bd23d5b7b16 100644 --- a/shell/browser/api/electron_api_web_contents.cc +++ b/shell/browser/api/electron_api_web_contents.cc @@ -1729,13 +1729,6 @@ void WebContents::RenderViewDeleted(content::RenderViewHost* render_view_host) { void WebContents::PrimaryMainFrameRenderProcessGone( base::TerminationStatus status) { - auto weak_this = GetWeakPtr(); - Emit("crashed", status == base::TERMINATION_STATUS_PROCESS_WAS_KILLED); - - // User might destroy WebContents in the crashed event. - if (!weak_this || !web_contents()) - return; - v8::Isolate* isolate = JavascriptEnvironment::GetIsolate(); v8::HandleScope handle_scope(isolate); gin_helper::Dictionary details = gin_helper::Dictionary::CreateEmpty(isolate);