Index: chrome/browser/extensions/extension_crash_recovery_browsertest.cc |
diff --git a/chrome/browser/extensions/extension_crash_recovery_browsertest.cc b/chrome/browser/extensions/extension_crash_recovery_browsertest.cc |
index 98f63f5e07d17ddc32b31156ffcb46d91a7bd3c6..83f032f8779b8a88c9708b96928dc3676ad46dfb 100644 |
--- a/chrome/browser/extensions/extension_crash_recovery_browsertest.cc |
+++ b/chrome/browser/extensions/extension_crash_recovery_browsertest.cc |
@@ -15,6 +15,7 @@ |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/tabs/tab_strip_model.h" |
#include "chrome/browser/ui/browser.h" |
+#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
#include "chrome/test/base/ui_test_utils.h" |
#include "content/browser/renderer_host/render_process_host.h" |
#include "content/browser/renderer_host/render_view_host.h" |
@@ -453,3 +454,42 @@ IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, MAYBE_CrashAndUnloadAll) { |
ASSERT_EQ(crash_size_before, |
GetExtensionService()->terminated_extensions()->size()); |
} |
+ |
+// Test that when an extension with a background page that has a tab open |
+// crashes, the tab stays open, and reloading it reloads the extension. |
+// Regression test for issue 71629. |
+IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, |
+ ReloadTabsWithBackgroundPage) { |
+ TabStripModel* tab_strip = browser()->tabstrip_model(); |
+ const size_t size_before = GetExtensionService()->extensions()->size(); |
+ const size_t crash_size_before = |
+ GetExtensionService()->terminated_extensions()->size(); |
+ LoadTestExtension(); |
+ |
+ // Open a tab extension. |
+ browser()->NewTab(); |
+ ui_test_utils::NavigateToURL( |
+ browser(), |
+ GURL("chrome-extension://" + first_extension_id_ + "/background.html")); |
+ |
+ const int tabs_before = tab_strip->count(); |
+ CrashExtension(size_before); |
+ |
+ // Tab should still be open, and extension should be crashed. |
+ EXPECT_EQ(tabs_before, tab_strip->count()); |
+ EXPECT_EQ(size_before, GetExtensionService()->extensions()->size()); |
+ EXPECT_EQ(crash_size_before + 1, |
+ GetExtensionService()->terminated_extensions()->size()); |
+ |
+ { |
+ ui_test_utils::WindowedNotificationObserver observer( |
+ content::NOTIFICATION_LOAD_STOP, |
+ content::Source<NavigationController>( |
+ &browser()->GetSelectedTabContentsWrapper()->controller())); |
+ browser()->Reload(CURRENT_TAB); |
+ observer.Wait(); |
+ } |
+ // Extension should now be loaded. |
+ ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size()); |
+ ASSERT_EQ(0U, CountBalloons()); |
+} |