| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "chrome/browser/background/background_mode_manager.h" |
| 8 #include "chrome/browser/browser_process.h" | 9 #include "chrome/browser/browser_process.h" |
| 9 #include "chrome/browser/browser_shutdown.h" | 10 #include "chrome/browser/browser_shutdown.h" |
| 10 #include "chrome/browser/chrome_notification_types.h" | 11 #include "chrome/browser/chrome_notification_types.h" |
| 11 #include "chrome/browser/download/chrome_download_manager_delegate.h" | 12 #include "chrome/browser/download/chrome_download_manager_delegate.h" |
| 12 #include "chrome/browser/download/download_service.h" | 13 #include "chrome/browser/download/download_service.h" |
| 13 #include "chrome/browser/download/download_service_factory.h" | 14 #include "chrome/browser/download/download_service_factory.h" |
| 14 #include "chrome/browser/lifetime/application_lifetime.h" | 15 #include "chrome/browser/lifetime/application_lifetime.h" |
| 15 #include "chrome/browser/lifetime/browser_close_manager.h" | 16 #include "chrome/browser/lifetime/browser_close_manager.h" |
| 16 #include "chrome/browser/net/url_request_mock_util.h" | 17 #include "chrome/browser/net/url_request_mock_util.h" |
| 17 #include "chrome/browser/prefs/session_startup_pref.h" | 18 #include "chrome/browser/prefs/session_startup_pref.h" |
| 18 #include "chrome/browser/profiles/profile.h" | 19 #include "chrome/browser/profiles/profile.h" |
| 19 #include "chrome/browser/profiles/profile_manager.h" | 20 #include "chrome/browser/profiles/profile_manager.h" |
| 20 #include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h" | 21 #include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h" |
| 21 #include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h" | 22 #include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h" |
| 22 #include "chrome/browser/ui/browser.h" | 23 #include "chrome/browser/ui/browser.h" |
| 24 #include "chrome/browser/ui/browser_commands.h" |
| 23 #include "chrome/browser/ui/browser_iterator.h" | 25 #include "chrome/browser/ui/browser_iterator.h" |
| 24 #include "chrome/browser/ui/browser_window.h" | 26 #include "chrome/browser/ui/browser_window.h" |
| 25 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 27 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 26 #include "chrome/common/chrome_switches.h" | 28 #include "chrome/common/chrome_switches.h" |
| 27 #include "chrome/common/url_constants.h" | 29 #include "chrome/common/url_constants.h" |
| 28 #include "chrome/test/base/in_process_browser_test.h" | 30 #include "chrome/test/base/in_process_browser_test.h" |
| 29 #include "chrome/test/base/ui_test_utils.h" | 31 #include "chrome/test/base/ui_test_utils.h" |
| 30 #include "content/public/browser/browser_context.h" | 32 #include "content/public/browser/browser_context.h" |
| 31 #include "content/public/browser/download_item.h" | 33 #include "content/public/browser/download_item.h" |
| 32 #include "content/public/browser/download_manager.h" | 34 #include "content/public/browser/download_manager.h" |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 public: | 126 public: |
| 125 enum UserChoice { | 127 enum UserChoice { |
| 126 USER_CHOICE_USER_CANCELS_CLOSE, | 128 USER_CHOICE_USER_CANCELS_CLOSE, |
| 127 USER_CHOICE_USER_ALLOWS_CLOSE, | 129 USER_CHOICE_USER_ALLOWS_CLOSE, |
| 128 NO_USER_CHOICE | 130 NO_USER_CHOICE |
| 129 }; | 131 }; |
| 130 | 132 |
| 131 static void AttemptClose(UserChoice user_choice) { | 133 static void AttemptClose(UserChoice user_choice) { |
| 132 scoped_refptr<BrowserCloseManager> browser_close_manager = | 134 scoped_refptr<BrowserCloseManager> browser_close_manager = |
| 133 new TestBrowserCloseManager(user_choice); | 135 new TestBrowserCloseManager(user_choice); |
| 136 browser_shutdown::SetTryingToQuit(true); |
| 134 browser_close_manager->StartClosingBrowsers(); | 137 browser_close_manager->StartClosingBrowsers(); |
| 135 } | 138 } |
| 136 | 139 |
| 137 protected: | 140 protected: |
| 138 virtual ~TestBrowserCloseManager() {} | 141 virtual ~TestBrowserCloseManager() {} |
| 139 | 142 |
| 140 virtual void ConfirmCloseWithPendingDownloads( | 143 virtual void ConfirmCloseWithPendingDownloads( |
| 141 int download_count, | 144 int download_count, |
| 142 const base::Callback<void(bool)>& callback) OVERRIDE { | 145 const base::Callback<void(bool)>& callback) OVERRIDE { |
| 143 EXPECT_NE(NO_USER_CHOICE, user_choice_); | 146 EXPECT_NE(NO_USER_CHOICE, user_choice_); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 callback.Run(target_path, | 191 callback.Run(target_path, |
| 189 disp, | 192 disp, |
| 190 content::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL, | 193 content::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL, |
| 191 intermediate_path); | 194 intermediate_path); |
| 192 } | 195 } |
| 193 | 196 |
| 194 private: | 197 private: |
| 195 virtual ~TestDownloadManagerDelegate() {} | 198 virtual ~TestDownloadManagerDelegate() {} |
| 196 }; | 199 }; |
| 197 | 200 |
| 201 class FakeBackgroundModeManager : public BackgroundModeManager { |
| 202 public: |
| 203 FakeBackgroundModeManager() |
| 204 : BackgroundModeManager( |
| 205 CommandLine::ForCurrentProcess(), |
| 206 &g_browser_process->profile_manager()->GetProfileInfoCache()), |
| 207 suspended_(false) {} |
| 208 |
| 209 virtual void SuspendBackgroundMode() OVERRIDE { |
| 210 BackgroundModeManager::SuspendBackgroundMode(); |
| 211 suspended_ = true; |
| 212 } |
| 213 |
| 214 virtual void ResumeBackgroundMode() OVERRIDE { |
| 215 BackgroundModeManager::ResumeBackgroundMode(); |
| 216 suspended_ = false; |
| 217 } |
| 218 |
| 219 bool IsBackgroundModeSuspended() { |
| 220 return suspended_; |
| 221 } |
| 222 |
| 223 private: |
| 224 bool suspended_; |
| 225 |
| 226 DISALLOW_COPY_AND_ASSIGN(FakeBackgroundModeManager); |
| 227 }; |
| 228 |
| 198 } // namespace | 229 } // namespace |
| 199 | 230 |
| 200 class BrowserCloseManagerBrowserTest | 231 class BrowserCloseManagerBrowserTest |
| 201 : public InProcessBrowserTest, | 232 : public InProcessBrowserTest, |
| 202 public testing::WithParamInterface<bool> { | 233 public testing::WithParamInterface<bool> { |
| 203 protected: | 234 protected: |
| 204 virtual void SetUpOnMainThread() OVERRIDE { | 235 virtual void SetUpOnMainThread() OVERRIDE { |
| 205 InProcessBrowserTest::SetUpOnMainThread(); | 236 InProcessBrowserTest::SetUpOnMainThread(); |
| 206 SessionStartupPref::SetStartupPref( | 237 SessionStartupPref::SetStartupPref( |
| 207 browser()->profile(), SessionStartupPref(SessionStartupPref::LAST)); | 238 browser()->profile(), SessionStartupPref(SessionStartupPref::LAST)); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 235 std::vector<Browser*> browsers_; | 266 std::vector<Browser*> browsers_; |
| 236 AppModalDialogObserver dialogs_; | 267 AppModalDialogObserver dialogs_; |
| 237 }; | 268 }; |
| 238 | 269 |
| 239 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) { | 270 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) { |
| 240 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 271 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 241 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 272 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 242 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 273 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
| 243 RepeatedNotificationObserver cancel_observer( | 274 RepeatedNotificationObserver cancel_observer( |
| 244 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 275 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 245 chrome::CloseAllBrowsers(); | 276 chrome::CloseAllBrowsersAndQuit(); |
| 246 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 277 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 247 cancel_observer.Wait(); | 278 cancel_observer.Wait(); |
| 248 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 279 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 249 EXPECT_EQ(1, browser()->tab_strip_model()->count()); | 280 EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
| 250 | 281 |
| 251 RepeatedNotificationObserver close_observer( | 282 RepeatedNotificationObserver close_observer( |
| 252 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 283 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
| 253 chrome::CloseAllBrowsers(); | 284 chrome::CloseAllBrowsersAndQuit(); |
| 254 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 285 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 255 close_observer.Wait(); | 286 close_observer.Wait(); |
| 256 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 287 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 257 EXPECT_TRUE(chrome::BrowserIterator().done()); | 288 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 258 } | 289 } |
| 259 | 290 |
| 260 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 291 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 261 TestShutdownMoreThanOnce) { | 292 TestShutdownMoreThanOnce) { |
| 262 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 293 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 263 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 294 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 264 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 295 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
| 265 RepeatedNotificationObserver cancel_observer( | 296 RepeatedNotificationObserver cancel_observer( |
| 266 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 297 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 267 chrome::CloseAllBrowsers(); | 298 chrome::CloseAllBrowsersAndQuit(); |
| 268 chrome::CloseAllBrowsers(); | 299 chrome::CloseAllBrowsersAndQuit(); |
| 269 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 300 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 270 cancel_observer.Wait(); | 301 cancel_observer.Wait(); |
| 271 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 302 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 272 EXPECT_EQ(1, browser()->tab_strip_model()->count()); | 303 EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
| 273 | 304 |
| 274 RepeatedNotificationObserver close_observer( | 305 RepeatedNotificationObserver close_observer( |
| 275 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 306 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
| 276 chrome::CloseAllBrowsers(); | 307 chrome::CloseAllBrowsersAndQuit(); |
| 277 chrome::CloseAllBrowsers(); | 308 chrome::CloseAllBrowsersAndQuit(); |
| 278 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 309 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 279 close_observer.Wait(); | 310 close_observer.Wait(); |
| 280 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 311 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 281 EXPECT_TRUE(chrome::BrowserIterator().done()); | 312 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 282 } | 313 } |
| 283 | 314 |
| 284 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, PRE_TestSessionRestore) { | 315 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, PRE_TestSessionRestore) { |
| 285 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 316 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 286 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 317 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 287 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 318 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
| 288 AddBlankTabAndShow(browser()); | 319 AddBlankTabAndShow(browser()); |
| 289 ASSERT_NO_FATAL_FAILURE( | 320 ASSERT_NO_FATAL_FAILURE( |
| 290 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL))); | 321 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL))); |
| 291 RepeatedNotificationObserver cancel_observer( | 322 RepeatedNotificationObserver cancel_observer( |
| 292 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 323 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 293 chrome::CloseAllBrowsers(); | 324 chrome::CloseAllBrowsersAndQuit(); |
| 294 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 325 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 295 cancel_observer.Wait(); | 326 cancel_observer.Wait(); |
| 296 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 327 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 297 | 328 |
| 298 browser()->tab_strip_model() | 329 browser()->tab_strip_model() |
| 299 ->CloseWebContentsAt(1, TabStripModel::CLOSE_USER_GESTURE); | 330 ->CloseWebContentsAt(1, TabStripModel::CLOSE_USER_GESTURE); |
| 300 content::TestNavigationObserver navigation_observer( | 331 content::TestNavigationObserver navigation_observer( |
| 301 browser()->tab_strip_model()->GetActiveWebContents(), 1); | 332 browser()->tab_strip_model()->GetActiveWebContents(), 1); |
| 302 ASSERT_NO_FATAL_FAILURE( | 333 ASSERT_NO_FATAL_FAILURE( |
| 303 NavigateToURLWithDisposition(browser(), | 334 NavigateToURLWithDisposition(browser(), |
| 304 GURL(chrome::kChromeUIVersionURL), | 335 GURL(chrome::kChromeUIVersionURL), |
| 305 CURRENT_TAB, | 336 CURRENT_TAB, |
| 306 ui_test_utils::BROWSER_TEST_NONE)); | 337 ui_test_utils::BROWSER_TEST_NONE)); |
| 307 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 338 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 308 navigation_observer.Wait(); | 339 navigation_observer.Wait(); |
| 309 | 340 |
| 310 RepeatedNotificationObserver close_observer( | 341 RepeatedNotificationObserver close_observer( |
| 311 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 342 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
| 312 chrome::CloseAllBrowsers(); | 343 chrome::CloseAllBrowsersAndQuit(); |
| 313 close_observer.Wait(); | 344 close_observer.Wait(); |
| 314 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 345 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 315 EXPECT_TRUE(chrome::BrowserIterator().done()); | 346 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 316 } | 347 } |
| 317 | 348 |
| 318 // Test that the tab closed after the aborted shutdown attempt is not re-opened | 349 // Test that the tab closed after the aborted shutdown attempt is not re-opened |
| 319 // when restoring the session. | 350 // when restoring the session. |
| 320 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSessionRestore) { | 351 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSessionRestore) { |
| 321 // The testing framework launches Chrome with about:blank as args. | 352 // The testing framework launches Chrome with about:blank as args. |
| 322 EXPECT_EQ(2, browser()->tab_strip_model()->count()); | 353 EXPECT_EQ(2, browser()->tab_strip_model()->count()); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 334 browsers_.push_back(CreateBrowser(browser()->profile())); | 365 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 335 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 366 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 336 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 367 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 337 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 368 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 338 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 369 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 339 | 370 |
| 340 // Cancel shutdown on the first beforeunload event. | 371 // Cancel shutdown on the first beforeunload event. |
| 341 { | 372 { |
| 342 RepeatedNotificationObserver cancel_observer( | 373 RepeatedNotificationObserver cancel_observer( |
| 343 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 374 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 344 chrome::CloseAllBrowsers(); | 375 chrome::CloseAllBrowsersAndQuit(); |
| 345 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 376 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 346 cancel_observer.Wait(); | 377 cancel_observer.Wait(); |
| 347 } | 378 } |
| 348 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 379 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 349 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 380 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 350 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 381 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| 351 | 382 |
| 352 // Cancel shutdown on the second beforeunload event. | 383 // Cancel shutdown on the second beforeunload event. |
| 353 { | 384 { |
| 354 RepeatedNotificationObserver cancel_observer( | 385 RepeatedNotificationObserver cancel_observer( |
| 355 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 386 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
| 356 chrome::CloseAllBrowsers(); | 387 chrome::CloseAllBrowsersAndQuit(); |
| 357 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 388 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 358 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 389 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 359 cancel_observer.Wait(); | 390 cancel_observer.Wait(); |
| 360 } | 391 } |
| 361 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 392 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 362 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 393 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 363 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 394 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| 364 | 395 |
| 365 // Allow shutdown for both beforeunload events. | 396 // Allow shutdown for both beforeunload events. |
| 366 RepeatedNotificationObserver close_observer( | 397 RepeatedNotificationObserver close_observer( |
| 367 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 398 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 368 chrome::CloseAllBrowsers(); | 399 chrome::CloseAllBrowsersAndQuit(); |
| 369 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 400 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 370 close_observer.Wait(); | 401 close_observer.Wait(); |
| 371 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 402 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 372 EXPECT_TRUE(chrome::BrowserIterator().done()); | 403 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 373 } | 404 } |
| 374 | 405 |
| 375 // Test that tabs in the same window with a beforeunload event that hangs are | 406 // Test that tabs in the same window with a beforeunload event that hangs are |
| 376 // treated the same as the user accepting the close, but do not close the tab | 407 // treated the same as the user accepting the close, but do not close the tab |
| 377 // early. | 408 // early. |
| 378 // Test is flaky on windows, disabled. See http://crbug.com/276366 | 409 // Test is flaky on windows, disabled. See http://crbug.com/276366 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 390 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 421 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); |
| 391 AddBlankTabAndShow(browsers_[0]); | 422 AddBlankTabAndShow(browsers_[0]); |
| 392 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 423 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 393 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 424 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 394 AddBlankTabAndShow(browsers_[0]); | 425 AddBlankTabAndShow(browsers_[0]); |
| 395 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 426 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 396 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 427 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); |
| 397 | 428 |
| 398 RepeatedNotificationObserver cancel_observer( | 429 RepeatedNotificationObserver cancel_observer( |
| 399 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 430 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 400 chrome::CloseAllBrowsers(); | 431 chrome::CloseAllBrowsersAndQuit(); |
| 401 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 432 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 402 cancel_observer.Wait(); | 433 cancel_observer.Wait(); |
| 403 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 434 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 404 // All tabs should still be open. | 435 // All tabs should still be open. |
| 405 EXPECT_EQ(3, browsers_[0]->tab_strip_model()->count()); | 436 EXPECT_EQ(3, browsers_[0]->tab_strip_model()->count()); |
| 406 | 437 |
| 407 RepeatedNotificationObserver close_observer( | 438 RepeatedNotificationObserver close_observer( |
| 408 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 439 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
| 409 chrome::CloseAllBrowsers(); | 440 chrome::CloseAllBrowsersAndQuit(); |
| 410 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 441 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 411 close_observer.Wait(); | 442 close_observer.Wait(); |
| 412 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 443 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 413 EXPECT_TRUE(chrome::BrowserIterator().done()); | 444 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 414 } | 445 } |
| 415 | 446 |
| 416 // Test that tabs in different windows with a beforeunload event that hangs are | 447 // Test that tabs in different windows with a beforeunload event that hangs are |
| 417 // treated the same as the user accepting the close, but do not close the tab | 448 // treated the same as the user accepting the close, but do not close the tab |
| 418 // early. | 449 // early. |
| 419 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 450 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 420 TestHangInBeforeUnloadMultipleWindows) { | 451 TestHangInBeforeUnloadMultipleWindows) { |
| 421 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 452 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 422 browsers_.push_back(CreateBrowser(browser()->profile())); | 453 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 423 browsers_.push_back(CreateBrowser(browser()->profile())); | 454 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 424 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 455 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 425 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 456 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); |
| 426 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 457 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 427 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 458 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 428 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 459 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 429 browsers_[2], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 460 browsers_[2], embedded_test_server()->GetURL("/beforeunload_hang.html"))); |
| 430 | 461 |
| 431 RepeatedNotificationObserver cancel_observer( | 462 RepeatedNotificationObserver cancel_observer( |
| 432 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 463 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
| 433 chrome::CloseAllBrowsers(); | 464 chrome::CloseAllBrowsersAndQuit(); |
| 434 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 465 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 435 cancel_observer.Wait(); | 466 cancel_observer.Wait(); |
| 436 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 467 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 437 // All windows should still be open. | 468 // All windows should still be open. |
| 438 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 469 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 439 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 470 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| 440 EXPECT_EQ(1, browsers_[2]->tab_strip_model()->count()); | 471 EXPECT_EQ(1, browsers_[2]->tab_strip_model()->count()); |
| 441 | 472 |
| 442 RepeatedNotificationObserver close_observer( | 473 RepeatedNotificationObserver close_observer( |
| 443 chrome::NOTIFICATION_BROWSER_CLOSED, 3); | 474 chrome::NOTIFICATION_BROWSER_CLOSED, 3); |
| 444 chrome::CloseAllBrowsers(); | 475 chrome::CloseAllBrowsersAndQuit(); |
| 445 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 476 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 446 close_observer.Wait(); | 477 close_observer.Wait(); |
| 447 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 478 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 448 EXPECT_TRUE(chrome::BrowserIterator().done()); | 479 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 449 } | 480 } |
| 450 | 481 |
| 451 // Test that a window created during shutdown is closed. | 482 // Test that a window created during shutdown is closed. |
| 452 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 483 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 453 TestAddWindowDuringShutdown) { | 484 TestAddWindowDuringShutdown) { |
| 454 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 485 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 455 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 486 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 456 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 487 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 457 | 488 |
| 458 RepeatedNotificationObserver close_observer( | 489 RepeatedNotificationObserver close_observer( |
| 459 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 490 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 460 chrome::CloseAllBrowsers(); | 491 chrome::CloseAllBrowsersAndQuit(); |
| 461 browsers_.push_back(CreateBrowser(browser()->profile())); | 492 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 462 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 493 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 463 close_observer.Wait(); | 494 close_observer.Wait(); |
| 464 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 495 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 465 EXPECT_TRUE(chrome::BrowserIterator().done()); | 496 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 466 } | 497 } |
| 467 | 498 |
| 468 // Test that a window created during shutdown with a beforeunload handler can | 499 // Test that a window created during shutdown with a beforeunload handler can |
| 469 // cancel the shutdown. | 500 // cancel the shutdown. |
| 470 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 501 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 471 DISABLED_TestAddWindowWithBeforeUnloadDuringShutdown) { | 502 DISABLED_TestAddWindowWithBeforeUnloadDuringShutdown) { |
| 472 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 503 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 473 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 504 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 474 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 505 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 475 | 506 |
| 476 RepeatedNotificationObserver cancel_observer( | 507 RepeatedNotificationObserver cancel_observer( |
| 477 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 508 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
| 478 chrome::CloseAllBrowsers(); | 509 chrome::CloseAllBrowsersAndQuit(); |
| 479 browsers_.push_back(CreateBrowser(browser()->profile())); | 510 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 480 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 511 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 481 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 512 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 482 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 513 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 483 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 514 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 484 cancel_observer.Wait(); | 515 cancel_observer.Wait(); |
| 485 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 516 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 486 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 517 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 487 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 518 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| 488 | 519 |
| 489 // Allow shutdown for both beforeunload dialogs. | 520 // Allow shutdown for both beforeunload dialogs. |
| 490 RepeatedNotificationObserver close_observer( | 521 RepeatedNotificationObserver close_observer( |
| 491 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 522 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 492 chrome::CloseAllBrowsers(); | 523 chrome::CloseAllBrowsersAndQuit(); |
| 493 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 524 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 494 close_observer.Wait(); | 525 close_observer.Wait(); |
| 495 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 526 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 496 EXPECT_TRUE(chrome::BrowserIterator().done()); | 527 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 497 } | 528 } |
| 498 | 529 |
| 499 // Test that tabs added during shutdown are closed. | 530 // Test that tabs added during shutdown are closed. |
| 500 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 531 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 501 TestAddTabDuringShutdown) { | 532 TestAddTabDuringShutdown) { |
| 502 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 533 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 503 browsers_.push_back(CreateBrowser(browser()->profile())); | 534 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 504 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 535 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 505 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 536 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 506 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 537 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 507 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 538 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 508 | 539 |
| 509 RepeatedNotificationObserver close_observer( | 540 RepeatedNotificationObserver close_observer( |
| 510 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 541 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 511 chrome::CloseAllBrowsers(); | 542 chrome::CloseAllBrowsersAndQuit(); |
| 512 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 543 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 513 AddBlankTabAndShow(browsers_[0]); | 544 AddBlankTabAndShow(browsers_[0]); |
| 514 AddBlankTabAndShow(browsers_[1]); | 545 AddBlankTabAndShow(browsers_[1]); |
| 515 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 546 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 516 close_observer.Wait(); | 547 close_observer.Wait(); |
| 517 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 548 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 518 EXPECT_TRUE(chrome::BrowserIterator().done()); | 549 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 519 } | 550 } |
| 520 | 551 |
| 521 // Test that tabs created during shutdown with beforeunload handlers can cancel | 552 // Test that tabs created during shutdown with beforeunload handlers can cancel |
| 522 // the shutdown. | 553 // the shutdown. |
| 523 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 554 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 524 DISABLED_TestAddTabWithBeforeUnloadDuringShutdown) { | 555 DISABLED_TestAddTabWithBeforeUnloadDuringShutdown) { |
| 525 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 556 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 526 browsers_.push_back(CreateBrowser(browser()->profile())); | 557 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 527 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 558 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 528 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 559 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 529 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 560 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 530 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 561 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 531 RepeatedNotificationObserver cancel_observer( | 562 RepeatedNotificationObserver cancel_observer( |
| 532 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 563 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
| 533 chrome::CloseAllBrowsers(); | 564 chrome::CloseAllBrowsersAndQuit(); |
| 534 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 565 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 535 AddBlankTabAndShow(browsers_[0]); | 566 AddBlankTabAndShow(browsers_[0]); |
| 536 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 567 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 537 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 568 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 538 AddBlankTabAndShow(browsers_[1]); | 569 AddBlankTabAndShow(browsers_[1]); |
| 539 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 570 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 540 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 571 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 541 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 572 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 542 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 573 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 543 cancel_observer.Wait(); | 574 cancel_observer.Wait(); |
| 544 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 575 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 545 EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count()); | 576 EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count()); |
| 546 EXPECT_EQ(2, browsers_[1]->tab_strip_model()->count()); | 577 EXPECT_EQ(2, browsers_[1]->tab_strip_model()->count()); |
| 547 | 578 |
| 548 RepeatedNotificationObserver close_observer( | 579 RepeatedNotificationObserver close_observer( |
| 549 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 580 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 550 chrome::CloseAllBrowsers(); | 581 chrome::CloseAllBrowsersAndQuit(); |
| 551 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 582 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 552 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 583 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 553 | 584 |
| 554 close_observer.Wait(); | 585 close_observer.Wait(); |
| 555 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 586 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 556 EXPECT_TRUE(chrome::BrowserIterator().done()); | 587 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 557 } | 588 } |
| 558 | 589 |
| 559 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 590 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 560 TestCloseTabDuringShutdown) { | 591 TestCloseTabDuringShutdown) { |
| 561 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 592 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 562 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 593 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 563 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 594 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 564 RepeatedNotificationObserver cancel_observer( | 595 RepeatedNotificationObserver cancel_observer( |
| 565 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 596 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 566 chrome::CloseAllBrowsers(); | 597 chrome::CloseAllBrowsersAndQuit(); |
| 567 | 598 |
| 568 browsers_.push_back(CreateBrowser(browser()->profile())); | 599 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 569 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 600 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 570 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 601 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 571 browsers_[1]->tab_strip_model()->CloseAllTabs(); | 602 browsers_[1]->tab_strip_model()->CloseAllTabs(); |
| 572 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 603 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 573 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 604 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 574 cancel_observer.Wait(); | 605 cancel_observer.Wait(); |
| 575 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 606 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 576 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 607 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 577 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 608 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| 578 | 609 |
| 579 RepeatedNotificationObserver close_observer( | 610 RepeatedNotificationObserver close_observer( |
| 580 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 611 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 581 chrome::CloseAllBrowsers(); | 612 chrome::CloseAllBrowsersAndQuit(); |
| 582 browsers_[1]->tab_strip_model()->CloseAllTabs(); | 613 browsers_[1]->tab_strip_model()->CloseAllTabs(); |
| 583 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 614 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 584 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 615 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 585 | 616 |
| 586 close_observer.Wait(); | 617 close_observer.Wait(); |
| 587 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 618 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 588 EXPECT_TRUE(chrome::BrowserIterator().done()); | 619 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 589 } | 620 } |
| 590 | 621 |
| 591 // Test is flaky on windows, disabled. See http://crbug.com/276366 | 622 // Test is flaky on windows, disabled. See http://crbug.com/276366 |
| 592 #if defined(OS_WIN) | 623 #if defined(OS_WIN) |
| 593 #define MAYBE_TestOpenAndCloseWindowDuringShutdown \ | 624 #define MAYBE_TestOpenAndCloseWindowDuringShutdown \ |
| 594 DISABLED_TestOpenAndCloseWindowDuringShutdown | 625 DISABLED_TestOpenAndCloseWindowDuringShutdown |
| 595 #else | 626 #else |
| 596 #define MAYBE_TestOpenAndCloseWindowDuringShutdown \ | 627 #define MAYBE_TestOpenAndCloseWindowDuringShutdown \ |
| 597 TestOpenAndCloseWindowDuringShutdown | 628 TestOpenAndCloseWindowDuringShutdown |
| 598 #endif | 629 #endif |
| 599 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 630 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 600 MAYBE_TestOpenAndCloseWindowDuringShutdown) { | 631 MAYBE_TestOpenAndCloseWindowDuringShutdown) { |
| 601 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 632 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 602 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 633 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 603 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 634 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 604 RepeatedNotificationObserver cancel_observer( | 635 RepeatedNotificationObserver cancel_observer( |
| 605 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 636 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
| 606 chrome::CloseAllBrowsers(); | 637 chrome::CloseAllBrowsersAndQuit(); |
| 607 | 638 |
| 608 browsers_.push_back(CreateBrowser(browser()->profile())); | 639 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 609 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 640 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 610 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 641 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 611 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); | 642 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); |
| 612 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 643 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 613 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 644 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 614 cancel_observer.Wait(); | 645 cancel_observer.Wait(); |
| 615 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 646 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 616 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 647 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 617 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 648 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| 618 | 649 |
| 619 RepeatedNotificationObserver close_observer( | 650 RepeatedNotificationObserver close_observer( |
| 620 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 651 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 621 chrome::CloseAllBrowsers(); | 652 chrome::CloseAllBrowsersAndQuit(); |
| 622 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); | 653 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); |
| 623 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 654 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 624 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 655 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 625 | 656 |
| 626 close_observer.Wait(); | 657 close_observer.Wait(); |
| 627 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 658 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 628 EXPECT_TRUE(chrome::BrowserIterator().done()); | 659 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 629 } | 660 } |
| 630 | 661 |
| 631 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 662 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 632 TestCloseWindowDuringShutdown) { | 663 TestCloseWindowDuringShutdown) { |
| 633 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 664 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 634 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 665 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 635 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 666 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 636 browsers_.push_back(CreateBrowser(browser()->profile())); | 667 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 637 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 668 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 638 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 669 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 639 RepeatedNotificationObserver cancel_observer( | 670 RepeatedNotificationObserver cancel_observer( |
| 640 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 671 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 641 chrome::CloseAllBrowsers(); | 672 chrome::CloseAllBrowsersAndQuit(); |
| 642 | 673 |
| 643 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); | 674 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); |
| 644 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 675 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 645 cancel_observer.Wait(); | 676 cancel_observer.Wait(); |
| 646 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 677 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 647 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 678 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 648 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 679 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| 649 | 680 |
| 650 RepeatedNotificationObserver close_observer( | 681 RepeatedNotificationObserver close_observer( |
| 651 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 682 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 652 chrome::CloseAllBrowsers(); | 683 chrome::CloseAllBrowsersAndQuit(); |
| 653 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); | 684 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); |
| 654 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 685 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 655 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 686 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 656 | 687 |
| 657 close_observer.Wait(); | 688 close_observer.Wait(); |
| 658 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 689 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 659 EXPECT_TRUE(chrome::BrowserIterator().done()); | 690 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 660 } | 691 } |
| 661 | 692 |
| 662 // Test shutdown with a DANGEROUS_URL download undecided. | 693 // Test shutdown with a DANGEROUS_URL download undecided. |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 794 TestBrowserCloseManager::AttemptClose( | 825 TestBrowserCloseManager::AttemptClose( |
| 795 TestBrowserCloseManager::USER_CHOICE_USER_ALLOWS_CLOSE); | 826 TestBrowserCloseManager::USER_CHOICE_USER_ALLOWS_CLOSE); |
| 796 close_observer.Wait(); | 827 close_observer.Wait(); |
| 797 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 828 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 798 EXPECT_TRUE(chrome::BrowserIterator().done()); | 829 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 799 } | 830 } |
| 800 | 831 |
| 801 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerBrowserTest, | 832 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerBrowserTest, |
| 802 BrowserCloseManagerBrowserTest, | 833 BrowserCloseManagerBrowserTest, |
| 803 testing::Bool()); | 834 testing::Bool()); |
| 835 |
| 836 class BrowserCloseManagerWithBackgroundModeBrowserTest |
| 837 : public BrowserCloseManagerBrowserTest { |
| 838 public: |
| 839 BrowserCloseManagerWithBackgroundModeBrowserTest() {} |
| 840 |
| 841 virtual void SetUpOnMainThread() OVERRIDE { |
| 842 BrowserCloseManagerBrowserTest::SetUpOnMainThread(); |
| 843 g_browser_process->set_background_mode_manager_for_test( |
| 844 scoped_ptr<BackgroundModeManager>(new FakeBackgroundModeManager)); |
| 845 } |
| 846 |
| 847 bool IsBackgroundModeSuspended() { |
| 848 return static_cast<FakeBackgroundModeManager*>( |
| 849 g_browser_process->background_mode_manager()) |
| 850 ->IsBackgroundModeSuspended(); |
| 851 } |
| 852 |
| 853 private: |
| 854 DISALLOW_COPY_AND_ASSIGN(BrowserCloseManagerWithBackgroundModeBrowserTest); |
| 855 }; |
| 856 |
| 857 // Check that background mode is suspended when closing all browsers unless we |
| 858 // are quitting and that background mode is resumed when a new browser window is |
| 859 // opened. |
| 860 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest, |
| 861 CloseAllBrowsersWithBackgroundMode) { |
| 862 EXPECT_FALSE(IsBackgroundModeSuspended()); |
| 863 Profile* profile = browser()->profile(); |
| 864 { |
| 865 RepeatedNotificationObserver close_observer( |
| 866 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
| 867 chrome::StartKeepAlive(); |
| 868 chrome::CloseAllBrowsers(); |
| 869 close_observer.Wait(); |
| 870 } |
| 871 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 872 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 873 EXPECT_TRUE(IsBackgroundModeSuspended()); |
| 874 |
| 875 // Background mode should be resumed when a new browser window is opened. |
| 876 ui_test_utils::BrowserAddedObserver new_browser_observer; |
| 877 chrome::NewEmptyWindow(profile, chrome::HOST_DESKTOP_TYPE_NATIVE); |
| 878 new_browser_observer.WaitForSingleNewBrowser(); |
| 879 chrome::EndKeepAlive(); |
| 880 EXPECT_FALSE(IsBackgroundModeSuspended()); |
| 881 RepeatedNotificationObserver close_observer( |
| 882 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
| 883 |
| 884 // Background mode should not be suspended when quitting. |
| 885 chrome::CloseAllBrowsersAndQuit(); |
| 886 close_observer.Wait(); |
| 887 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 888 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 889 EXPECT_FALSE(IsBackgroundModeSuspended()); |
| 890 |
| 891 } |
| 892 |
| 893 // Check that closing the last browser window individually does not affect |
| 894 // background mode. |
| 895 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest, |
| 896 CloseSingleBrowserWithBackgroundMode) { |
| 897 RepeatedNotificationObserver close_observer( |
| 898 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
| 899 EXPECT_FALSE(IsBackgroundModeSuspended()); |
| 900 browser()->window()->Close(); |
| 901 close_observer.Wait(); |
| 902 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 903 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 904 EXPECT_FALSE(IsBackgroundModeSuspended()); |
| 905 } |
| 906 |
| 907 // Check that closing all browsers with no browser windows open suspends |
| 908 // background mode but does not cause Chrome to quit. |
| 909 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest, |
| 910 CloseAllBrowsersWithNoOpenBrowsersWithBackgroundMode) { |
| 911 RepeatedNotificationObserver close_observer( |
| 912 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
| 913 EXPECT_FALSE(IsBackgroundModeSuspended()); |
| 914 chrome::StartKeepAlive(); |
| 915 browser()->window()->Close(); |
| 916 close_observer.Wait(); |
| 917 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 918 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 919 EXPECT_FALSE(IsBackgroundModeSuspended()); |
| 920 |
| 921 chrome::CloseAllBrowsers(); |
| 922 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 923 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 924 EXPECT_TRUE(IsBackgroundModeSuspended()); |
| 925 } |
| 926 |
| 927 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerWithBackgroundModeBrowserTest, |
| 928 BrowserCloseManagerWithBackgroundModeBrowserTest, |
| 929 testing::Bool()); |
| OLD | NEW |