Index: content/browser/frame_host/interstitial_page_impl.cc |
diff --git a/content/browser/frame_host/interstitial_page_impl.cc b/content/browser/frame_host/interstitial_page_impl.cc |
index 10f99b4eadc3586208c6768500a0ec1ef3fdfff2..3d9240833811380b24e0fb1701c030faa2d97541 100644 |
--- a/content/browser/frame_host/interstitial_page_impl.cc |
+++ b/content/browser/frame_host/interstitial_page_impl.cc |
@@ -357,7 +357,18 @@ void InterstitialPageImpl::NavigationEntryCommitted( |
OnNavigatingAwayOrTabClosing(); |
} |
+void InterstitialPageImpl::WebContentsWillBeDestroyed() { |
+ OnNavigatingAwayOrTabClosing(); |
+} |
+ |
void InterstitialPageImpl::WebContentsDestroyed(WebContents* web_contents) { |
+ // WebContentsImpl will only call WebContentsWillBeDestroyed for interstitial |
+ // pages that it knows about, pages that called |
+ // WebContentsImpl::AttachInterstitialPage. But it's possible to have an |
+ // interstitial page that never progressed that far. In that case, ensure that |
+ // this interstitial page is destroyed. (And if it was attached, and |
+ // OnNavigatingAwayOrTabClosing was called, it's safe to call |
+ // OnNavigatingAwayOrTabClosing twice.) |
OnNavigatingAwayOrTabClosing(); |
} |