Browse Source

fix: `BrowserView` crash when 'beforeunload' prevented (#37205)

fix: crash when beforeunload prevented
Shelley Vohr 2 years ago
parent
commit
8eee4f2df1

+ 1 - 1
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*) {

+ 3 - 1
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) {