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, |