Index: chrome/browser/lifetime/browser_close_manager_browsertest.cc |
diff --git a/chrome/browser/lifetime/browser_close_manager_browsertest.cc b/chrome/browser/lifetime/browser_close_manager_browsertest.cc |
index ce61b244028c4b7e4ea4a2f1fbdc7fe02d91fae3..fb584a9567dcc707a4ed5213fc18d7bad3853062 100644 |
--- a/chrome/browser/lifetime/browser_close_manager_browsertest.cc |
+++ b/chrome/browser/lifetime/browser_close_manager_browsertest.cc |
@@ -5,6 +5,7 @@ |
#include <vector> |
#include "base/command_line.h" |
+#include "chrome/browser/background/background_mode_manager.h" |
#include "chrome/browser/browser_process.h" |
#include "chrome/browser/browser_shutdown.h" |
#include "chrome/browser/chrome_notification_types.h" |
@@ -17,6 +18,7 @@ |
#include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h" |
#include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h" |
#include "chrome/browser/ui/browser.h" |
+#include "chrome/browser/ui/browser_commands.h" |
#include "chrome/browser/ui/browser_iterator.h" |
#include "chrome/browser/ui/browser_window.h" |
#include "chrome/browser/ui/tabs/tab_strip_model.h" |
@@ -126,6 +128,7 @@ class TestBrowserCloseManager : public BrowserCloseManager { |
static void AttemptClose(UserChoice user_choice) { |
scoped_refptr<BrowserCloseManager> browser_close_manager = |
new TestBrowserCloseManager(user_choice); |
+ browser_shutdown::SetTryingToQuit(true); |
browser_close_manager->StartClosingBrowsers(); |
} |
@@ -156,6 +159,32 @@ class TestBrowserCloseManager : public BrowserCloseManager { |
DISALLOW_COPY_AND_ASSIGN(TestBrowserCloseManager); |
}; |
+class FakeBackgroundModeManager : public BackgroundModeManager { |
+ public: |
+ FakeBackgroundModeManager() |
+ : BackgroundModeManager( |
+ CommandLine::ForCurrentProcess(), |
+ &g_browser_process->profile_manager()->GetProfileInfoCache()), |
+ suspended_(false) {} |
+ |
+ virtual void SuspendBackgroundMode() OVERRIDE { |
+ BackgroundModeManager::SuspendBackgroundMode(); |
+ suspended_ = true; |
+ } |
+ |
+ virtual void ResumeBackgroundMode() OVERRIDE { |
+ BackgroundModeManager::ResumeBackgroundMode(); |
+ suspended_ = false; |
+ } |
+ |
+ bool IsBackgroundModeSuspended() { |
+ return suspended_; |
+ } |
+ |
+ private: |
+ bool suspended_; |
+}; |
+ |
} // namespace |
class BrowserCloseManagerBrowserTest |
@@ -203,7 +232,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) { |
browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
RepeatedNotificationObserver cancel_observer( |
chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
cancel_observer.Wait(); |
EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
@@ -211,7 +240,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) { |
RepeatedNotificationObserver close_observer( |
chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
close_observer.Wait(); |
EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
@@ -225,8 +254,8 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
RepeatedNotificationObserver cancel_observer( |
chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
- chrome::CloseAllBrowsers(); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
+ chrome::CloseAllBrowsersAndQuit(); |
ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
cancel_observer.Wait(); |
EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
@@ -234,8 +263,8 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
RepeatedNotificationObserver close_observer( |
chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
- chrome::CloseAllBrowsers(); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
+ chrome::CloseAllBrowsersAndQuit(); |
ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
close_observer.Wait(); |
EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
@@ -251,7 +280,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, PRE_TestSessionRestore) { |
ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL))); |
RepeatedNotificationObserver cancel_observer( |
chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
cancel_observer.Wait(); |
EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
@@ -270,7 +299,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, PRE_TestSessionRestore) { |
RepeatedNotificationObserver close_observer( |
chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
close_observer.Wait(); |
EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
EXPECT_TRUE(chrome::BrowserIterator().done()); |
@@ -301,7 +330,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestMultipleWindows) { |
{ |
RepeatedNotificationObserver cancel_observer( |
chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
cancel_observer.Wait(); |
} |
@@ -313,7 +342,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestMultipleWindows) { |
{ |
RepeatedNotificationObserver cancel_observer( |
chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
cancel_observer.Wait(); |
@@ -325,7 +354,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestMultipleWindows) { |
// Allow shutdown for both beforeunload events. |
RepeatedNotificationObserver close_observer( |
chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
close_observer.Wait(); |
EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
@@ -357,7 +386,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
RepeatedNotificationObserver cancel_observer( |
chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
cancel_observer.Wait(); |
EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
@@ -366,7 +395,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
RepeatedNotificationObserver close_observer( |
chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
close_observer.Wait(); |
EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
@@ -390,7 +419,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
RepeatedNotificationObserver cancel_observer( |
chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
cancel_observer.Wait(); |
EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
@@ -401,7 +430,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
RepeatedNotificationObserver close_observer( |
chrome::NOTIFICATION_BROWSER_CLOSED, 3); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
close_observer.Wait(); |
EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
@@ -417,7 +446,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
RepeatedNotificationObserver close_observer( |
chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
browsers_.push_back(CreateBrowser(browser()->profile())); |
ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
close_observer.Wait(); |
@@ -435,7 +464,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
RepeatedNotificationObserver cancel_observer( |
chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
browsers_.push_back(CreateBrowser(browser()->profile())); |
ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
@@ -449,7 +478,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
// Allow shutdown for both beforeunload dialogs. |
RepeatedNotificationObserver close_observer( |
chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
close_observer.Wait(); |
EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
@@ -468,7 +497,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
RepeatedNotificationObserver close_observer( |
chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
AddBlankTabAndShow(browsers_[0]); |
AddBlankTabAndShow(browsers_[1]); |
@@ -490,7 +519,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
RepeatedNotificationObserver cancel_observer( |
chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
AddBlankTabAndShow(browsers_[0]); |
ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
@@ -507,7 +536,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
RepeatedNotificationObserver close_observer( |
chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
@@ -523,7 +552,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
RepeatedNotificationObserver cancel_observer( |
chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
browsers_.push_back(CreateBrowser(browser()->profile())); |
ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
@@ -538,7 +567,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
RepeatedNotificationObserver close_observer( |
chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
browsers_[1]->tab_strip_model()->CloseAllTabs(); |
ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
@@ -563,7 +592,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
RepeatedNotificationObserver cancel_observer( |
chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
browsers_.push_back(CreateBrowser(browser()->profile())); |
ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
@@ -578,7 +607,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
RepeatedNotificationObserver close_observer( |
chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); |
ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
@@ -598,7 +627,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
RepeatedNotificationObserver cancel_observer( |
chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); |
ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
@@ -609,7 +638,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
RepeatedNotificationObserver close_observer( |
chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
- chrome::CloseAllBrowsers(); |
+ chrome::CloseAllBrowsersAndQuit(); |
ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); |
ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
@@ -718,3 +747,98 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
INSTANTIATE_TEST_CASE_P(BrowserCloseManagerBrowserTest, |
BrowserCloseManagerBrowserTest, |
testing::Bool()); |
+ |
+class BrowserCloseManagerWithBackgroundModeBrowserTest |
+ : public BrowserCloseManagerBrowserTest { |
+ public: |
+ virtual void SetUpOnMainThread() OVERRIDE { |
+ BrowserCloseManagerBrowserTest::SetUpOnMainThread(); |
+ g_browser_process->set_background_mode_manager_for_test( |
+ scoped_ptr<BackgroundModeManager>(new FakeBackgroundModeManager)); |
+ } |
+}; |
+ |
+IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest, |
+ CloseAllBrowsersWithBackgroundMode) { |
+ EXPECT_FALSE(static_cast<FakeBackgroundModeManager*>( |
+ g_browser_process->background_mode_manager()) |
+ ->IsBackgroundModeSuspended()); |
+ Profile* profile = browser()->profile(); |
+ { |
+ RepeatedNotificationObserver close_observer( |
+ chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
+ chrome::StartKeepAlive(); |
+ chrome::CloseAllBrowsers(); |
+ close_observer.Wait(); |
+ } |
+ EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
+ EXPECT_TRUE(chrome::BrowserIterator().done()); |
+ EXPECT_TRUE(static_cast<FakeBackgroundModeManager*>( |
benwells
2013/10/21 05:57:22
Nit: factor out this horribleness into IsBackgroun
Sam McNally
2013/10/21 06:45:35
Done.
benwells
2013/10/21 21:12:51
You missed this one.
Sam McNally
2013/10/22 00:16:27
Done.
|
+ g_browser_process->background_mode_manager()) |
+ ->IsBackgroundModeSuspended()); |
+ |
+ // Background mode should be resumed when a new browser window is opened. |
+ ui_test_utils::BrowserAddedObserver new_browser_observer; |
+ chrome::NewEmptyWindow(profile, chrome::HOST_DESKTOP_TYPE_NATIVE); |
+ new_browser_observer.WaitForSingleNewBrowser(); |
+ chrome::EndKeepAlive(); |
+ EXPECT_FALSE(static_cast<FakeBackgroundModeManager*>( |
+ g_browser_process->background_mode_manager()) |
+ ->IsBackgroundModeSuspended()); |
+ RepeatedNotificationObserver close_observer( |
+ chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
+ |
+ // Background mode should not be suspended when quitting. |
+ chrome::CloseAllBrowsersAndQuit(); |
+ close_observer.Wait(); |
+ EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
+ EXPECT_TRUE(chrome::BrowserIterator().done()); |
+ EXPECT_FALSE(static_cast<FakeBackgroundModeManager*>( |
+ g_browser_process->background_mode_manager()) |
+ ->IsBackgroundModeSuspended()); |
+ |
+} |
+ |
+IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest, |
+ CloseSingleBrowserWithBackgroundMode) { |
+ RepeatedNotificationObserver close_observer( |
+ chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
+ EXPECT_FALSE(static_cast<FakeBackgroundModeManager*>( |
+ g_browser_process->background_mode_manager()) |
+ ->IsBackgroundModeSuspended()); |
+ browser()->window()->Close(); |
+ close_observer.Wait(); |
+ EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
+ EXPECT_TRUE(chrome::BrowserIterator().done()); |
+ EXPECT_FALSE(static_cast<FakeBackgroundModeManager*>( |
+ g_browser_process->background_mode_manager()) |
+ ->IsBackgroundModeSuspended()); |
+} |
+ |
+IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest, |
+ CloseAllBrowsersWithNoOpenBrowsersWithBackgroundMode) { |
+ RepeatedNotificationObserver close_observer( |
+ chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
+ EXPECT_FALSE(static_cast<FakeBackgroundModeManager*>( |
+ g_browser_process->background_mode_manager()) |
+ ->IsBackgroundModeSuspended()); |
+ chrome::StartKeepAlive(); |
+ browser()->window()->Close(); |
+ close_observer.Wait(); |
+ EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
+ EXPECT_TRUE(chrome::BrowserIterator().done()); |
+ EXPECT_FALSE(static_cast<FakeBackgroundModeManager*>( |
+ g_browser_process->background_mode_manager()) |
+ ->IsBackgroundModeSuspended()); |
+ |
+ chrome::CloseAllBrowsers(); |
+ EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
+ EXPECT_TRUE(chrome::BrowserIterator().done()); |
+ EXPECT_TRUE(static_cast<FakeBackgroundModeManager*>( |
+ g_browser_process->background_mode_manager()) |
+ ->IsBackgroundModeSuspended()); |
+} |
+ |
+INSTANTIATE_TEST_CASE_P(BrowserCloseManagerWithBackgroundModeBrowserTest, |
+ BrowserCloseManagerWithBackgroundModeBrowserTest, |
+ testing::Bool()); |