mirror of
https://github.com/electron/electron.git
synced 2026-04-10 03:01:51 -04:00
fix: render process crash handling (#34432)
* fix: crash when renderer process is reused Could occur when a renderer crashes and the same-origin URL is loaded again which leads to reusing the renderer process. * test: renderer process crash recovery * fix: handle case which leads to render frame DCHECK * fix: lint Co-authored-by: samuelmaddock <samuel.maddock@gmail.com>
This commit is contained in:
@@ -188,13 +188,20 @@ const mojo::Remote<mojom::ElectronRenderer>& WebFrameMain::GetRendererApi() {
|
||||
}
|
||||
|
||||
void WebFrameMain::MaybeSetupMojoConnection() {
|
||||
if (render_frame_disposed_) {
|
||||
// RFH may not be set yet if called between when a new RFH is created and
|
||||
// before it's been swapped with an old RFH.
|
||||
LOG(INFO) << "Attempt to setup WebFrameMain connection while render frame "
|
||||
"is disposed";
|
||||
return;
|
||||
}
|
||||
|
||||
if (!renderer_api_) {
|
||||
pending_receiver_ = renderer_api_.BindNewPipeAndPassReceiver();
|
||||
renderer_api_.set_disconnect_handler(base::BindOnce(
|
||||
&WebFrameMain::OnRendererConnectionError, weak_factory_.GetWeakPtr()));
|
||||
}
|
||||
|
||||
// Render frame should exist when this method is called.
|
||||
DCHECK(render_frame_);
|
||||
|
||||
// Wait for RenderFrame to be created in renderer before accessing remote.
|
||||
|
||||
@@ -451,6 +451,9 @@ void ElectronBrowserClient::RenderProcessWillLaunch(
|
||||
new extensions::MessagingAPIMessageFilter(process_id, browser_context));
|
||||
#endif
|
||||
|
||||
// Remove in case the host is reused after a crash, otherwise noop.
|
||||
host->RemoveObserver(this);
|
||||
|
||||
// ensure the ProcessPreferences is removed later
|
||||
host->AddObserver(this);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user