From c079253c8e96c1d2a3b4b5a983aed41bc653957c Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Tue, 14 Feb 2023 18:40:37 +0100 Subject: [PATCH] fix: `BrowserView` crash when 'beforeunload' prevented (#37205) fix: crash when beforeunload prevented --- shell/browser/api/electron_api_browser_window.cc | 2 +- shell/browser/api/electron_api_web_contents.cc | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/shell/browser/api/electron_api_browser_window.cc b/shell/browser/api/electron_api_browser_window.cc index 867b77786f519..f1fd37e0c740d 100644 --- a/shell/browser/api/electron_api_browser_window.cc +++ b/shell/browser/api/electron_api_browser_window.cc @@ -112,7 +112,6 @@ BrowserWindow::~BrowserWindow() { api_web_contents_->RemoveObserver(this); // Destroy the WebContents. OnCloseContents(); - api_web_contents_->Destroy(); } } @@ -140,6 +139,7 @@ void BrowserWindow::WebContentsDestroyed() { void BrowserWindow::OnCloseContents() { BaseWindow::ResetBrowserViews(); + api_web_contents_->Destroy(); } void BrowserWindow::OnRendererResponsive(content::RenderProcessHost*) { diff --git a/shell/browser/api/electron_api_web_contents.cc b/shell/browser/api/electron_api_web_contents.cc index 3f3ea285cf38a..c30fa2e8d2940 100644 --- a/shell/browser/api/electron_api_web_contents.cc +++ b/shell/browser/api/electron_api_web_contents.cc @@ -1222,7 +1222,9 @@ void WebContents::CloseContents(content::WebContents* source) { for (ExtendedWebContentsObserver& observer : observers_) observer.OnCloseContents(); - Destroy(); + // If there are observers, OnCloseContents will call Destroy() + if (observers_.empty()) + Destroy(); } void WebContents::ActivateContents(content::WebContents* source) {