Chromium Code Reviews| 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..0a33603c6b6e7b794c7440335b784d914977ca19 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,86 @@ 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)); |
| + } |
| + |
| + bool IsBackgroundModeSuspended() { |
| + return static_cast<FakeBackgroundModeManager*>( |
| + g_browser_process->background_mode_manager()) |
| + ->IsBackgroundModeSuspended(); |
| + } |
| +}; |
|
sky
2013/10/22 15:41:18
private:DISALLOW...
Sam McNally
2013/10/22 22:58:29
Done.
|
| + |
| +IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest, |
|
sky
2013/10/22 15:41:18
Please add descriptions as to what tests do. That
Sam McNally
2013/10/22 22:58:29
Done.
|
| + CloseAllBrowsersWithBackgroundMode) { |
| + EXPECT_FALSE(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(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(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(IsBackgroundModeSuspended()); |
| + |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest, |
| + CloseSingleBrowserWithBackgroundMode) { |
| + RepeatedNotificationObserver close_observer( |
| + chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
| + EXPECT_FALSE(IsBackgroundModeSuspended()); |
| + browser()->window()->Close(); |
| + close_observer.Wait(); |
| + EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| + EXPECT_TRUE(chrome::BrowserIterator().done()); |
| + EXPECT_FALSE(IsBackgroundModeSuspended()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest, |
| + CloseAllBrowsersWithNoOpenBrowsersWithBackgroundMode) { |
| + RepeatedNotificationObserver close_observer( |
| + chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
| + EXPECT_FALSE(IsBackgroundModeSuspended()); |
| + chrome::StartKeepAlive(); |
| + browser()->window()->Close(); |
| + close_observer.Wait(); |
| + EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| + EXPECT_TRUE(chrome::BrowserIterator().done()); |
| + EXPECT_FALSE(IsBackgroundModeSuspended()); |
| + |
| + chrome::CloseAllBrowsers(); |
| + EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| + EXPECT_TRUE(chrome::BrowserIterator().done()); |
| + EXPECT_TRUE(IsBackgroundModeSuspended()); |
| +} |
| + |
| +INSTANTIATE_TEST_CASE_P(BrowserCloseManagerWithBackgroundModeBrowserTest, |
| + BrowserCloseManagerWithBackgroundModeBrowserTest, |
| + testing::Bool()); |