Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4088)

Unified Diff: chrome/browser/lifetime/browser_close_manager_browsertest.cc

Issue 25603004: Leave apps running on Windows and Linux when quitting Chrome from the wrench menu. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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());

Powered by Google App Engine
This is Rietveld 408576698