Index: chrome/browser/ui/views/frame/browser_view.cc |
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc |
index 2eb4e5135e4df4ad6b7d16d114f9312699730ab9..014defcc9b5234a3154969c2894f7a5e2a8a0178 100644 |
--- a/chrome/browser/ui/views/frame/browser_view.cc |
+++ b/chrome/browser/ui/views/frame/browser_view.cc |
@@ -1752,6 +1752,15 @@ views::ClientView* BrowserView::CreateClientView(views::Widget* widget) { |
return this; |
} |
+void BrowserView::OnWidgetDestroying(views::Widget* widget) { |
+ // Destroy any remaining WebContents early on. Doing so may result in |
+ // calling back to one of the Views/LayoutManagers or supporting classes of |
+ // BrowserView. By destroying here we ensure all said classes are valid. |
+ ScopedVector<content::WebContents> contents; |
+ while (browser()->tab_strip_model()->count()) |
+ contents.push_back(browser()->tab_strip_model()->DetachWebContentsAt(0)); |
+} |
+ |
void BrowserView::OnWidgetActivationChanged(views::Widget* widget, |
bool active) { |
if (active) |