| 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 0a4173af4a372dd04b97612ef05191edd3397219..d4e0baaa7a1bb318ad7d72161e65f32cd74a5ba9 100644
|
| --- a/chrome/browser/lifetime/browser_close_manager_browsertest.cc
|
| +++ b/chrome/browser/lifetime/browser_close_manager_browsertest.cc
|
| @@ -52,7 +52,6 @@
|
| #include "content/public/browser/web_contents.h"
|
| #include "content/public/test/browser_test_utils.h"
|
| #include "content/public/test/download_test_observer.h"
|
| -#include "content/public/test/repeated_notification_observer.h"
|
| #include "content/public/test/test_navigation_observer.h"
|
| #include "net/test/embedded_test_server/embedded_test_server.h"
|
| #include "net/test/url_request/url_request_mock_http_job.h"
|
| @@ -82,6 +81,41 @@
|
| void CancelClose() {
|
| GetNextDialog()->CancelAppModalDialog();
|
| }
|
| +
|
| +class RepeatedNotificationObserver : public content::NotificationObserver {
|
| + public:
|
| + explicit RepeatedNotificationObserver(int type, int count)
|
| + : num_outstanding_(count), running_(false) {
|
| + registrar_.Add(this, type, content::NotificationService::AllSources());
|
| + }
|
| +
|
| + void Observe(int type,
|
| + const content::NotificationSource& source,
|
| + const content::NotificationDetails& details) override {
|
| + ASSERT_GT(num_outstanding_, 0);
|
| + if (!--num_outstanding_ && running_) {
|
| + content::BrowserThread::PostTask(
|
| + content::BrowserThread::UI, FROM_HERE, run_loop_.QuitClosure());
|
| + }
|
| + }
|
| +
|
| + void Wait() {
|
| + if (num_outstanding_ <= 0)
|
| + return;
|
| +
|
| + running_ = true;
|
| + run_loop_.Run();
|
| + running_ = false;
|
| + }
|
| +
|
| + private:
|
| + int num_outstanding_;
|
| + content::NotificationRegistrar registrar_;
|
| + bool running_;
|
| + base::RunLoop run_loop_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(RepeatedNotificationObserver);
|
| +};
|
|
|
| class TabRestoreServiceChangesObserver
|
| : public sessions::TabRestoreServiceObserver {
|
| @@ -272,7 +306,7 @@
|
| browser(), embedded_test_server()->GetURL("/beforeunload.html")));
|
| PrepareForDialog(browser());
|
|
|
| - content::RepeatedNotificationObserver cancel_observer(
|
| + RepeatedNotificationObserver cancel_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
|
| chrome::CloseAllBrowsersAndQuit();
|
| ASSERT_NO_FATAL_FAILURE(CancelClose());
|
| @@ -280,7 +314,7 @@
|
| EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
|
| EXPECT_EQ(1, browser()->tab_strip_model()->count());
|
|
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 1);
|
| chrome::CloseAllBrowsersAndQuit();
|
| ASSERT_NO_FATAL_FAILURE(AcceptClose());
|
| @@ -296,7 +330,7 @@
|
| browser(), embedded_test_server()->GetURL("/beforeunload.html")));
|
| PrepareForDialog(browser());
|
|
|
| - content::RepeatedNotificationObserver cancel_observer(
|
| + RepeatedNotificationObserver cancel_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
|
| chrome::CloseAllBrowsersAndQuit();
|
| chrome::CloseAllBrowsersAndQuit();
|
| @@ -305,7 +339,7 @@
|
| EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
|
| EXPECT_EQ(1, browser()->tab_strip_model()->count());
|
|
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 1);
|
| chrome::CloseAllBrowsersAndQuit();
|
| chrome::CloseAllBrowsersAndQuit();
|
| @@ -325,7 +359,7 @@
|
| ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL)));
|
| PrepareForDialog(browser());
|
|
|
| - content::RepeatedNotificationObserver cancel_observer(
|
| + RepeatedNotificationObserver cancel_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
|
| chrome::CloseAllBrowsersAndQuit();
|
| ASSERT_NO_FATAL_FAILURE(CancelClose());
|
| @@ -342,7 +376,7 @@
|
| ASSERT_NO_FATAL_FAILURE(AcceptClose());
|
| navigation_observer.Wait();
|
|
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 1);
|
| chrome::CloseAllBrowsersAndQuit();
|
| close_observer.Wait();
|
| @@ -376,7 +410,7 @@
|
|
|
| // Cancel shutdown on the first beforeunload event.
|
| {
|
| - content::RepeatedNotificationObserver cancel_observer(
|
| + RepeatedNotificationObserver cancel_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
|
| chrome::CloseAllBrowsersAndQuit();
|
| ASSERT_NO_FATAL_FAILURE(CancelClose());
|
| @@ -388,7 +422,7 @@
|
|
|
| // Cancel shutdown on the second beforeunload event.
|
| {
|
| - content::RepeatedNotificationObserver cancel_observer(
|
| + RepeatedNotificationObserver cancel_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
|
| chrome::CloseAllBrowsersAndQuit();
|
| ASSERT_NO_FATAL_FAILURE(AcceptClose());
|
| @@ -400,7 +434,7 @@
|
| EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
|
|
|
| // Allow shutdown for both beforeunload events.
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 2);
|
| chrome::CloseAllBrowsersAndQuit();
|
| ASSERT_NO_FATAL_FAILURE(AcceptClose());
|
| @@ -428,7 +462,7 @@
|
| // the dialog is guaranteed to show.
|
| PrepareForDialog(browsers_[0]->tab_strip_model()->GetWebContentsAt(1));
|
|
|
| - content::RepeatedNotificationObserver cancel_observer(
|
| + RepeatedNotificationObserver cancel_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
|
| chrome::CloseAllBrowsersAndQuit();
|
| ASSERT_NO_FATAL_FAILURE(CancelClose());
|
| @@ -437,7 +471,7 @@
|
| // All tabs should still be open.
|
| EXPECT_EQ(3, browsers_[0]->tab_strip_model()->count());
|
|
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 1);
|
| chrome::CloseAllBrowsersAndQuit();
|
| ASSERT_NO_FATAL_FAILURE(AcceptClose());
|
| @@ -464,7 +498,7 @@
|
| // the dialog is guaranteed to show.
|
| PrepareForDialog(browsers_[1]);
|
|
|
| - content::RepeatedNotificationObserver cancel_observer(
|
| + RepeatedNotificationObserver cancel_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
|
| chrome::CloseAllBrowsersAndQuit();
|
| ASSERT_NO_FATAL_FAILURE(CancelClose());
|
| @@ -475,7 +509,7 @@
|
| EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
|
| EXPECT_EQ(1, browsers_[2]->tab_strip_model()->count());
|
|
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 3);
|
| chrome::CloseAllBrowsersAndQuit();
|
| ASSERT_NO_FATAL_FAILURE(AcceptClose());
|
| @@ -510,7 +544,7 @@
|
| PrepareForDialog(
|
| browsers_[0]->tab_strip_model()->GetWebContentsAt(kResposiveTabIndex));
|
|
|
| - content::RepeatedNotificationObserver cancel_observer(
|
| + RepeatedNotificationObserver cancel_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
|
| chrome::CloseAllBrowsersAndQuit();
|
| ASSERT_NO_FATAL_FAILURE(CancelClose());
|
| @@ -519,7 +553,7 @@
|
|
|
| // All tabs should still be open.
|
| EXPECT_EQ(kTabCount, browsers_[0]->tab_strip_model()->count());
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 1);
|
|
|
| // Quit, this time accepting close confirmation dialog.
|
| @@ -558,7 +592,7 @@
|
| // the dialog is guaranteed to show.
|
| PrepareForDialog(browsers_[kResposiveBrowserIndex]);
|
|
|
| - content::RepeatedNotificationObserver cancel_observer(
|
| + RepeatedNotificationObserver cancel_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, kResposiveBrowserIndex + 1);
|
| chrome::CloseAllBrowsersAndQuit();
|
| ASSERT_NO_FATAL_FAILURE(CancelClose());
|
| @@ -570,7 +604,7 @@
|
| EXPECT_EQ(1, browsers_[i]->tab_strip_model()->count());
|
|
|
| // Quit, this time accepting close confirmation dialog.
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, kBrowserCount);
|
| chrome::CloseAllBrowsersAndQuit();
|
| ASSERT_NO_FATAL_FAILURE(AcceptClose());
|
| @@ -587,7 +621,7 @@
|
| browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
|
| PrepareForDialog(browsers_[0]);
|
|
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 2);
|
| chrome::CloseAllBrowsersAndQuit();
|
| browsers_.push_back(CreateBrowser(browser()->profile()));
|
| @@ -606,7 +640,7 @@
|
| browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
|
| PrepareForDialog(browsers_[0]);
|
|
|
| - content::RepeatedNotificationObserver cancel_observer(
|
| + RepeatedNotificationObserver cancel_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
|
| chrome::CloseAllBrowsersAndQuit();
|
| browsers_.push_back(CreateBrowser(browser()->profile()));
|
| @@ -621,7 +655,7 @@
|
| EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
|
|
|
| // Allow shutdown for both beforeunload dialogs.
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 2);
|
| chrome::CloseAllBrowsersAndQuit();
|
| ASSERT_NO_FATAL_FAILURE(AcceptClose());
|
| @@ -643,7 +677,7 @@
|
| PrepareForDialog(browsers_[0]);
|
| PrepareForDialog(browsers_[1]);
|
|
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 2);
|
| chrome::CloseAllBrowsersAndQuit();
|
| ASSERT_NO_FATAL_FAILURE(AcceptClose());
|
| @@ -669,7 +703,7 @@
|
| PrepareForDialog(browsers_[0]);
|
| PrepareForDialog(browsers_[1]);
|
|
|
| - content::RepeatedNotificationObserver cancel_observer(
|
| + RepeatedNotificationObserver cancel_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
|
| chrome::CloseAllBrowsersAndQuit();
|
| ASSERT_NO_FATAL_FAILURE(AcceptClose());
|
| @@ -688,7 +722,7 @@
|
| EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count());
|
| EXPECT_EQ(2, browsers_[1]->tab_strip_model()->count());
|
|
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 2);
|
| chrome::CloseAllBrowsersAndQuit();
|
| ASSERT_NO_FATAL_FAILURE(AcceptClose());
|
| @@ -813,7 +847,7 @@
|
| browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
|
| PrepareForDialog(browsers_[0]);
|
|
|
| - content::RepeatedNotificationObserver cancel_observer(
|
| + RepeatedNotificationObserver cancel_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
|
| chrome::CloseAllBrowsersAndQuit();
|
|
|
| @@ -829,7 +863,7 @@
|
| EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
|
| EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
|
|
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 2);
|
| chrome::CloseAllBrowsersAndQuit();
|
| browsers_[1]->tab_strip_model()->CloseAllTabs();
|
| @@ -848,7 +882,7 @@
|
| browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
|
| PrepareForDialog(browsers_[0]);
|
|
|
| - content::RepeatedNotificationObserver cancel_observer(
|
| + RepeatedNotificationObserver cancel_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
|
| chrome::CloseAllBrowsersAndQuit();
|
|
|
| @@ -864,7 +898,7 @@
|
| EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
|
| EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
|
|
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 2);
|
| chrome::CloseAllBrowsersAndQuit();
|
| ASSERT_FALSE(browsers_[1]->ShouldCloseWindow());
|
| @@ -887,7 +921,7 @@
|
| PrepareForDialog(browsers_[0]);
|
| PrepareForDialog(browsers_[1]);
|
|
|
| - content::RepeatedNotificationObserver cancel_observer(
|
| + RepeatedNotificationObserver cancel_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
|
| chrome::CloseAllBrowsersAndQuit();
|
|
|
| @@ -898,7 +932,7 @@
|
| EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
|
| EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
|
|
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 2);
|
| chrome::CloseAllBrowsersAndQuit();
|
| ASSERT_FALSE(browsers_[0]->ShouldCloseWindow());
|
| @@ -948,7 +982,7 @@
|
| SetDownloadPathForProfile(browser()->profile());
|
| ASSERT_NO_FATAL_FAILURE(CreateStalledDownload(browser()));
|
|
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 1);
|
|
|
| TestBrowserCloseManager::AttemptClose(
|
| @@ -997,7 +1031,7 @@
|
| browser()->profile())->NonMaliciousInProgressCount());
|
|
|
| // Close the browser with no user action.
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 1);
|
| TestBrowserCloseManager::AttemptClose(
|
| TestBrowserCloseManager::NO_USER_CHOICE);
|
| @@ -1021,7 +1055,7 @@
|
| EXPECT_EQ(GURL(chrome::kChromeUIDownloadsURL),
|
| browser()->tab_strip_model()->GetActiveWebContents()->GetURL());
|
|
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 1);
|
|
|
| TestBrowserCloseManager::AttemptClose(
|
| @@ -1043,7 +1077,7 @@
|
| SetDownloadPathForProfile(otr_profile);
|
| Browser* otr_browser = CreateBrowser(otr_profile);
|
| {
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 1);
|
| browser()->window()->Close();
|
| close_observer.Wait();
|
| @@ -1058,7 +1092,7 @@
|
| EXPECT_EQ(GURL(chrome::kChromeUIDownloadsURL),
|
| otr_browser->tab_strip_model()->GetActiveWebContents()->GetURL());
|
|
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 1);
|
|
|
| TestBrowserCloseManager::AttemptClose(
|
| @@ -1092,7 +1126,7 @@
|
| ASSERT_EQ(0, num_downloads_blocking);
|
|
|
| {
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 1);
|
| otr_browser->window()->Close();
|
| close_observer.Wait();
|
| @@ -1104,7 +1138,7 @@
|
| ASSERT_EQ(1, num_downloads_blocking);
|
|
|
| {
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 2);
|
| TestBrowserCloseManager::AttemptClose(
|
| TestBrowserCloseManager::USER_CHOICE_USER_ALLOWS_CLOSE);
|
| @@ -1142,7 +1176,7 @@
|
| SetDownloadPathForProfile(other_profile);
|
| ASSERT_NO_FATAL_FAILURE(CreateStalledDownload(browser()));
|
| {
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 1);
|
| browser()->window()->Close();
|
| close_observer.Wait();
|
| @@ -1163,7 +1197,7 @@
|
| other_profile_browser->tab_strip_model()->GetActiveWebContents()
|
| ->GetURL());
|
|
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 2);
|
| TestBrowserCloseManager::AttemptClose(
|
| TestBrowserCloseManager::USER_CHOICE_USER_ALLOWS_CLOSE);
|
| @@ -1195,7 +1229,7 @@
|
| cancel_observer.Wait();
|
| EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
|
|
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 1);
|
| TestBrowserCloseManager::AttemptClose(
|
| TestBrowserCloseManager::USER_CHOICE_USER_ALLOWS_CLOSE);
|
| @@ -1241,7 +1275,7 @@
|
| std::unique_ptr<ScopedKeepAlive> tmp_keep_alive;
|
| Profile* profile = browser()->profile();
|
| {
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 1);
|
| tmp_keep_alive.reset(new ScopedKeepAlive(KeepAliveOrigin::PANEL_VIEW,
|
| KeepAliveRestartOption::DISABLED));
|
| @@ -1258,7 +1292,7 @@
|
| new_browser_observer.WaitForSingleNewBrowser();
|
| tmp_keep_alive.reset();
|
| EXPECT_FALSE(IsBackgroundModeSuspended());
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 1);
|
|
|
| // Background mode should not be suspended when quitting.
|
| @@ -1273,7 +1307,7 @@
|
| // background mode.
|
| IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest,
|
| DISABLED_CloseSingleBrowserWithBackgroundMode) {
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 1);
|
| EXPECT_FALSE(IsBackgroundModeSuspended());
|
| browser()->window()->Close();
|
| @@ -1287,7 +1321,7 @@
|
| // background mode but does not cause Chrome to quit.
|
| IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest,
|
| DISABLED_CloseAllBrowsersWithNoOpenBrowsersWithBackgroundMode) {
|
| - content::RepeatedNotificationObserver close_observer(
|
| + RepeatedNotificationObserver close_observer(
|
| chrome::NOTIFICATION_BROWSER_CLOSED, 1);
|
| EXPECT_FALSE(IsBackgroundModeSuspended());
|
| ScopedKeepAlive tmp_keep_alive(KeepAliveOrigin::PANEL_VIEW,
|
|
|