| 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 "chrome/browser/lifetime/browser_close_manager.h" | 5 #include "chrome/browser/lifetime/browser_close_manager.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 #include "chrome/common/chrome_switches.h" | 35 #include "chrome/common/chrome_switches.h" |
| 36 #include "chrome/common/url_constants.h" | 36 #include "chrome/common/url_constants.h" |
| 37 #include "chrome/test/base/in_process_browser_test.h" | 37 #include "chrome/test/base/in_process_browser_test.h" |
| 38 #include "chrome/test/base/ui_test_utils.h" | 38 #include "chrome/test/base/ui_test_utils.h" |
| 39 #include "components/app_modal/javascript_app_modal_dialog.h" | 39 #include "components/app_modal/javascript_app_modal_dialog.h" |
| 40 #include "components/app_modal/native_app_modal_dialog.h" | 40 #include "components/app_modal/native_app_modal_dialog.h" |
| 41 #include "content/public/browser/browser_context.h" | 41 #include "content/public/browser/browser_context.h" |
| 42 #include "content/public/browser/download_item.h" | 42 #include "content/public/browser/download_item.h" |
| 43 #include "content/public/browser/download_manager.h" | 43 #include "content/public/browser/download_manager.h" |
| 44 #include "content/public/browser/notification_service.h" | 44 #include "content/public/browser/notification_service.h" |
| 45 #include "content/public/browser/render_view_host.h" |
| 46 #include "content/public/browser/render_widget_host.h" |
| 45 #include "content/public/browser/web_contents.h" | 47 #include "content/public/browser/web_contents.h" |
| 46 #include "content/public/test/download_test_observer.h" | 48 #include "content/public/test/download_test_observer.h" |
| 47 #include "content/public/test/test_navigation_observer.h" | 49 #include "content/public/test/test_navigation_observer.h" |
| 48 #include "net/test/embedded_test_server/embedded_test_server.h" | 50 #include "net/test/embedded_test_server/embedded_test_server.h" |
| 49 #include "net/test/url_request/url_request_mock_http_job.h" | 51 #include "net/test/url_request/url_request_mock_http_job.h" |
| 50 #include "net/test/url_request/url_request_slow_download_job.h" | 52 #include "net/test/url_request/url_request_slow_download_job.h" |
| 51 | 53 |
| 52 #if defined(OS_CHROMEOS) | 54 #if defined(OS_CHROMEOS) |
| 53 #include "chromeos/chromeos_switches.h" | 55 #include "chromeos/chromeos_switches.h" |
| 54 #endif | 56 #endif |
| 55 | 57 |
| 56 namespace { | 58 namespace { |
| 57 | 59 |
| 58 app_modal::NativeAppModalDialog* GetNextDialog() { | 60 app_modal::NativeAppModalDialog* GetNextDialog() { |
| 59 app_modal::AppModalDialog* dialog = ui_test_utils::WaitForAppModalDialog(); | 61 app_modal::AppModalDialog* dialog = ui_test_utils::WaitForAppModalDialog(); |
| 60 EXPECT_TRUE(dialog->IsJavaScriptModalDialog()); | 62 EXPECT_TRUE(dialog->IsJavaScriptModalDialog()); |
| 61 app_modal::JavaScriptAppModalDialog* js_dialog = | 63 app_modal::JavaScriptAppModalDialog* js_dialog = |
| 62 static_cast<app_modal::JavaScriptAppModalDialog*>(dialog); | 64 static_cast<app_modal::JavaScriptAppModalDialog*>(dialog); |
| 63 CHECK(js_dialog->native_dialog()); | 65 CHECK(js_dialog->native_dialog()); |
| 64 return js_dialog->native_dialog(); | 66 return js_dialog->native_dialog(); |
| 65 } | 67 } |
| 66 | 68 |
| 69 // Note: call |DisableHangMonitor| on the relevant WebContents or Browser before |
| 70 // trying to close it, to avoid flakiness. https://crbug.com/519646 |
| 67 void AcceptClose() { | 71 void AcceptClose() { |
| 68 GetNextDialog()->AcceptAppModalDialog(); | 72 GetNextDialog()->AcceptAppModalDialog(); |
| 69 } | 73 } |
| 70 | 74 |
| 75 // Note: call |DisableHangMonitor| on the relevant WebContents or Browser before |
| 76 // trying to close it, to avoid flakiness. https://crbug.com/519646 |
| 71 void CancelClose() { | 77 void CancelClose() { |
| 72 GetNextDialog()->CancelAppModalDialog(); | 78 GetNextDialog()->CancelAppModalDialog(); |
| 73 } | 79 } |
| 74 | 80 |
| 75 class RepeatedNotificationObserver : public content::NotificationObserver { | 81 class RepeatedNotificationObserver : public content::NotificationObserver { |
| 76 public: | 82 public: |
| 77 explicit RepeatedNotificationObserver(int type, int count) | 83 explicit RepeatedNotificationObserver(int type, int count) |
| 78 : num_outstanding_(count), running_(false) { | 84 : num_outstanding_(count), running_(false) { |
| 79 registrar_.Add(this, type, content::NotificationService::AllSources()); | 85 registrar_.Add(this, type, content::NotificationService::AllSources()); |
| 80 } | 86 } |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 browser, | 248 browser, |
| 243 GURL(net::URLRequestSlowDownloadJob::kKnownSizeUrl), | 249 GURL(net::URLRequestSlowDownloadJob::kKnownSizeUrl), |
| 244 NEW_BACKGROUND_TAB, | 250 NEW_BACKGROUND_TAB, |
| 245 ui_test_utils::BROWSER_TEST_NONE); | 251 ui_test_utils::BROWSER_TEST_NONE); |
| 246 observer.WaitForFinished(); | 252 observer.WaitForFinished(); |
| 247 EXPECT_EQ( | 253 EXPECT_EQ( |
| 248 1UL, | 254 1UL, |
| 249 observer.NumDownloadsSeenInState(content::DownloadItem::IN_PROGRESS)); | 255 observer.NumDownloadsSeenInState(content::DownloadItem::IN_PROGRESS)); |
| 250 } | 256 } |
| 251 | 257 |
| 258 // Makes sure that hang monitor will not trigger RendererUnresponsive |
| 259 // for that web content or browser. That must be called before close action |
| 260 // when using |AcceptClose| or |CancelClose|, to ensure the timeout does not |
| 261 // prevent the dialog from appearing. https://crbug.com/519646 |
| 262 void DisableHangMonitor(content::WebContents* web_contents) { |
| 263 web_contents->GetRenderViewHost() |
| 264 ->GetWidget() |
| 265 ->DisableHangMonitorForTesting(); |
| 266 } |
| 267 |
| 268 void DisableHangMonitor(Browser* browser) { |
| 269 for (int i = 0; i < browser->tab_strip_model()->count(); i++) |
| 270 DisableHangMonitor(browser->tab_strip_model()->GetWebContentsAt(i)); |
| 271 } |
| 272 |
| 252 std::vector<Browser*> browsers_; | 273 std::vector<Browser*> browsers_; |
| 253 }; | 274 }; |
| 254 | 275 |
| 255 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) { | 276 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) { |
| 256 ASSERT_TRUE(embedded_test_server()->Start()); | 277 ASSERT_TRUE(embedded_test_server()->Start()); |
| 257 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 278 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 258 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 279 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
| 280 DisableHangMonitor(browser()); |
| 281 |
| 259 RepeatedNotificationObserver cancel_observer( | 282 RepeatedNotificationObserver cancel_observer( |
| 260 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 283 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 261 chrome::CloseAllBrowsersAndQuit(); | 284 chrome::CloseAllBrowsersAndQuit(); |
| 262 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 285 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 263 cancel_observer.Wait(); | 286 cancel_observer.Wait(); |
| 264 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 287 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 265 EXPECT_EQ(1, browser()->tab_strip_model()->count()); | 288 EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
| 266 | 289 |
| 267 RepeatedNotificationObserver close_observer( | 290 RepeatedNotificationObserver close_observer( |
| 268 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 291 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
| 269 chrome::CloseAllBrowsersAndQuit(); | 292 chrome::CloseAllBrowsersAndQuit(); |
| 270 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 293 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 271 close_observer.Wait(); | 294 close_observer.Wait(); |
| 272 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 295 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 273 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 296 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 274 } | 297 } |
| 275 | 298 |
| 276 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 299 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 277 TestShutdownMoreThanOnce) { | 300 TestShutdownMoreThanOnce) { |
| 278 ASSERT_TRUE(embedded_test_server()->Start()); | 301 ASSERT_TRUE(embedded_test_server()->Start()); |
| 279 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 302 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 280 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 303 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
| 304 DisableHangMonitor(browser()); |
| 305 |
| 281 RepeatedNotificationObserver cancel_observer( | 306 RepeatedNotificationObserver cancel_observer( |
| 282 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 307 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 283 chrome::CloseAllBrowsersAndQuit(); | 308 chrome::CloseAllBrowsersAndQuit(); |
| 284 chrome::CloseAllBrowsersAndQuit(); | 309 chrome::CloseAllBrowsersAndQuit(); |
| 285 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 310 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 286 cancel_observer.Wait(); | 311 cancel_observer.Wait(); |
| 287 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 312 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 288 EXPECT_EQ(1, browser()->tab_strip_model()->count()); | 313 EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
| 289 | 314 |
| 290 RepeatedNotificationObserver close_observer( | 315 RepeatedNotificationObserver close_observer( |
| 291 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 316 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
| 292 chrome::CloseAllBrowsersAndQuit(); | 317 chrome::CloseAllBrowsersAndQuit(); |
| 293 chrome::CloseAllBrowsersAndQuit(); | 318 chrome::CloseAllBrowsersAndQuit(); |
| 294 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 319 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 295 close_observer.Wait(); | 320 close_observer.Wait(); |
| 296 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 321 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 297 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 322 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 298 } | 323 } |
| 299 | 324 |
| 300 // Test is flaky on Mac. http://crbug.com/517687 | |
| 301 #if defined(OS_MACOSX) | |
| 302 #define MAYBE_PRE_TestSessionRestore DISABLED_PRE_TestSessionRestore | |
| 303 #else | |
| 304 #define MAYBE_PRE_TestSessionRestore DISABLED_PRE_TestSessionRestore | |
| 305 #endif | |
| 306 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 325 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 307 MAYBE_PRE_TestSessionRestore) { | 326 PRE_TestSessionRestore) { |
| 308 ASSERT_TRUE(embedded_test_server()->Start()); | 327 ASSERT_TRUE(embedded_test_server()->Start()); |
| 309 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 328 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 310 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 329 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
| 311 AddBlankTabAndShow(browser()); | 330 AddBlankTabAndShow(browser()); |
| 312 ASSERT_NO_FATAL_FAILURE( | 331 ASSERT_NO_FATAL_FAILURE( |
| 313 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL))); | 332 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL))); |
| 333 DisableHangMonitor(browser()); |
| 334 |
| 314 RepeatedNotificationObserver cancel_observer( | 335 RepeatedNotificationObserver cancel_observer( |
| 315 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 336 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 316 chrome::CloseAllBrowsersAndQuit(); | 337 chrome::CloseAllBrowsersAndQuit(); |
| 317 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 338 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 318 cancel_observer.Wait(); | 339 cancel_observer.Wait(); |
| 319 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 340 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 320 | 341 |
| 321 browser()->tab_strip_model() | 342 browser()->tab_strip_model() |
| 322 ->CloseWebContentsAt(1, TabStripModel::CLOSE_USER_GESTURE); | 343 ->CloseWebContentsAt(1, TabStripModel::CLOSE_USER_GESTURE); |
| 323 content::TestNavigationObserver navigation_observer( | 344 content::TestNavigationObserver navigation_observer( |
| 324 browser()->tab_strip_model()->GetActiveWebContents(), 1); | 345 browser()->tab_strip_model()->GetActiveWebContents(), 1); |
| 325 ASSERT_NO_FATAL_FAILURE( | 346 ASSERT_NO_FATAL_FAILURE( |
| 326 NavigateToURLWithDisposition(browser(), | 347 NavigateToURLWithDisposition(browser(), |
| 327 GURL(chrome::kChromeUIVersionURL), | 348 GURL(chrome::kChromeUIVersionURL), |
| 328 CURRENT_TAB, | 349 CURRENT_TAB, |
| 329 ui_test_utils::BROWSER_TEST_NONE)); | 350 ui_test_utils::BROWSER_TEST_NONE)); |
| 330 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 351 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 331 navigation_observer.Wait(); | 352 navigation_observer.Wait(); |
| 332 | 353 |
| 333 RepeatedNotificationObserver close_observer( | 354 RepeatedNotificationObserver close_observer( |
| 334 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 355 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
| 335 chrome::CloseAllBrowsersAndQuit(); | 356 chrome::CloseAllBrowsersAndQuit(); |
| 336 close_observer.Wait(); | 357 close_observer.Wait(); |
| 337 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 358 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 338 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 359 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 339 } | 360 } |
| 340 | 361 |
| 341 // Test that the tab closed after the aborted shutdown attempt is not re-opened | 362 // Test that the tab closed after the aborted shutdown attempt is not re-opened |
| 342 // when restoring the session. | 363 // when restoring the session. |
| 343 // Test is flaky on Mac. http://crbug.com/517687 | |
| 344 #if defined(OS_MACOSX) | |
| 345 #define MAYBE_TestSessionRestore DISABLED_TestSessionRestore | |
| 346 #else | |
| 347 #define MAYBE_TestSessionRestore DISABLED_TestSessionRestore | |
| 348 #endif | |
| 349 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 364 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 350 MAYBE_TestSessionRestore) { | 365 TestSessionRestore) { |
| 351 // The testing framework launches Chrome with about:blank as args. | 366 // The testing framework launches Chrome with about:blank as args. |
| 352 EXPECT_EQ(2, browser()->tab_strip_model()->count()); | 367 EXPECT_EQ(2, browser()->tab_strip_model()->count()); |
| 353 EXPECT_EQ(GURL(chrome::kChromeUIVersionURL), | 368 EXPECT_EQ(GURL(chrome::kChromeUIVersionURL), |
| 354 browser()->tab_strip_model()->GetWebContentsAt(0)->GetURL()); | 369 browser()->tab_strip_model()->GetWebContentsAt(0)->GetURL()); |
| 355 EXPECT_EQ(GURL("about:blank"), | 370 EXPECT_EQ(GURL("about:blank"), |
| 356 browser()->tab_strip_model()->GetWebContentsAt(1)->GetURL()); | 371 browser()->tab_strip_model()->GetWebContentsAt(1)->GetURL()); |
| 357 } | 372 } |
| 358 | 373 |
| 359 // Test that browser windows are only closed if all browsers are ready to close | 374 // Test that browser windows are only closed if all browsers are ready to close |
| 360 // and that all beforeunload dialogs are shown again after a cancel. | 375 // and that all beforeunload dialogs are shown again after a cancel. |
| 361 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestMultipleWindows) { | 376 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestMultipleWindows) { |
| 362 ASSERT_TRUE(embedded_test_server()->Start()); | 377 ASSERT_TRUE(embedded_test_server()->Start()); |
| 363 browsers_.push_back(CreateBrowser(browser()->profile())); | 378 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 364 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 379 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 365 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 380 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 366 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 381 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 367 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 382 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 383 DisableHangMonitor(browsers_[0]); |
| 384 DisableHangMonitor(browsers_[1]); |
| 368 | 385 |
| 369 // Cancel shutdown on the first beforeunload event. | 386 // Cancel shutdown on the first beforeunload event. |
| 370 { | 387 { |
| 371 RepeatedNotificationObserver cancel_observer( | 388 RepeatedNotificationObserver cancel_observer( |
| 372 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 389 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 373 chrome::CloseAllBrowsersAndQuit(); | 390 chrome::CloseAllBrowsersAndQuit(); |
| 374 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 391 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 375 cancel_observer.Wait(); | 392 cancel_observer.Wait(); |
| 376 } | 393 } |
| 377 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 394 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 398 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 415 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 399 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 416 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 400 close_observer.Wait(); | 417 close_observer.Wait(); |
| 401 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 418 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 402 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 419 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 403 } | 420 } |
| 404 | 421 |
| 405 // Test that tabs in the same window with a beforeunload event that hangs are | 422 // Test that tabs in the same window with a beforeunload event that hangs are |
| 406 // treated the same as the user accepting the close, but do not close the tab | 423 // treated the same as the user accepting the close, but do not close the tab |
| 407 // early. | 424 // early. |
| 408 // Test is flaky on windows, disabled. See http://crbug.com/276366 | |
| 409 // Test is flaky on Mac. See http://crbug.com/517687. | |
| 410 #if defined(OS_WIN) || defined(OS_MACOSX) | |
| 411 #define MAYBE_TestHangInBeforeUnloadMultipleTabs \ | |
| 412 DISABLED_TestHangInBeforeUnloadMultipleTabs | |
| 413 #else | |
| 414 #define MAYBE_TestHangInBeforeUnloadMultipleTabs \ | |
| 415 TestHangInBeforeUnloadMultipleTabs | |
| 416 #endif | |
| 417 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 425 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 418 MAYBE_TestHangInBeforeUnloadMultipleTabs) { | 426 TestHangInBeforeUnloadMultipleTabs) { |
| 419 ASSERT_TRUE(embedded_test_server()->Start()); | 427 ASSERT_TRUE(embedded_test_server()->Start()); |
| 420 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 428 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 421 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 429 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); |
| 422 AddBlankTabAndShow(browsers_[0]); | 430 AddBlankTabAndShow(browsers_[0]); |
| 423 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 431 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 424 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 432 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 425 AddBlankTabAndShow(browsers_[0]); | 433 AddBlankTabAndShow(browsers_[0]); |
| 426 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 434 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 427 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 435 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); |
| 436 // Disable the hang monitor in the tab that is not expected to hang, so that |
| 437 // the dialog is guaranteed to show. |
| 438 DisableHangMonitor(browsers_[0]->tab_strip_model()->GetWebContentsAt(1)); |
| 428 | 439 |
| 429 RepeatedNotificationObserver cancel_observer( | 440 RepeatedNotificationObserver cancel_observer( |
| 430 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 441 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 431 chrome::CloseAllBrowsersAndQuit(); | 442 chrome::CloseAllBrowsersAndQuit(); |
| 432 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 443 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 433 cancel_observer.Wait(); | 444 cancel_observer.Wait(); |
| 434 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 445 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 435 // All tabs should still be open. | 446 // All tabs should still be open. |
| 436 EXPECT_EQ(3, browsers_[0]->tab_strip_model()->count()); | 447 EXPECT_EQ(3, browsers_[0]->tab_strip_model()->count()); |
| 437 | 448 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 451 TestHangInBeforeUnloadMultipleWindows) { | 462 TestHangInBeforeUnloadMultipleWindows) { |
| 452 ASSERT_TRUE(embedded_test_server()->Start()); | 463 ASSERT_TRUE(embedded_test_server()->Start()); |
| 453 browsers_.push_back(CreateBrowser(browser()->profile())); | 464 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 454 browsers_.push_back(CreateBrowser(browser()->profile())); | 465 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 455 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 466 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 456 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 467 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); |
| 457 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 468 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 458 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 469 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 459 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 470 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 460 browsers_[2], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 471 browsers_[2], embedded_test_server()->GetURL("/beforeunload_hang.html"))); |
| 472 // Disable the hang monitor in the tab that is not expected to hang, so that |
| 473 // the dialog is guaranteed to show. |
| 474 DisableHangMonitor(browsers_[1]); |
| 461 | 475 |
| 462 RepeatedNotificationObserver cancel_observer( | 476 RepeatedNotificationObserver cancel_observer( |
| 463 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 477 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
| 464 chrome::CloseAllBrowsersAndQuit(); | 478 chrome::CloseAllBrowsersAndQuit(); |
| 465 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 479 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 466 cancel_observer.Wait(); | 480 cancel_observer.Wait(); |
| 467 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 481 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 468 // All windows should still be open. | 482 // All windows should still be open. |
| 469 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 483 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 470 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 484 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| 471 EXPECT_EQ(1, browsers_[2]->tab_strip_model()->count()); | 485 EXPECT_EQ(1, browsers_[2]->tab_strip_model()->count()); |
| 472 | 486 |
| 473 RepeatedNotificationObserver close_observer( | 487 RepeatedNotificationObserver close_observer( |
| 474 chrome::NOTIFICATION_BROWSER_CLOSED, 3); | 488 chrome::NOTIFICATION_BROWSER_CLOSED, 3); |
| 475 chrome::CloseAllBrowsersAndQuit(); | 489 chrome::CloseAllBrowsersAndQuit(); |
| 476 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 490 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 477 close_observer.Wait(); | 491 close_observer.Wait(); |
| 478 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 492 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 479 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 493 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 480 } | 494 } |
| 481 | 495 |
| 482 // Test that tabs that are slow to respond are not closed prematurely. | 496 // Test that tabs that are slow to respond are not closed prematurely. |
| 483 // Regression for crbug.com/365052 caused some of tabs to be closed even if | 497 // Regression for crbug.com/365052 caused some of tabs to be closed even if |
| 484 // user chose to cancel browser close. | 498 // user chose to cancel browser close. |
| 485 // | |
| 486 // Test is disabled as it likely to flack for the same reason as | |
| 487 // TestHangInBeforeUnloadMultipleTabs: there is a chance (especially under | |
| 488 // load) that normal tab will not answer within | |
| 489 // RenderViewHostImpl::kUnloadTimeoutMS thus |AcceptClose| or |CancelClose| | |
| 490 // will not find a dialog and fail. | |
| 491 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 499 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 492 DISABLED_TestUnloadMultipleSlowTabs) { | 500 TestUnloadMultipleSlowTabs) { |
| 493 ASSERT_TRUE(embedded_test_server()->Start()); | 501 ASSERT_TRUE(embedded_test_server()->Start()); |
| 494 const int kTabCount = 5; | 502 const int kTabCount = 5; |
| 495 const int kResposiveTabIndex = 2; | 503 const int kResposiveTabIndex = 2; |
| 496 // Create tab strip with all tabs except one responding after | 504 // Create tab strip with all tabs except one responding after |
| 497 // RenderViewHostImpl::kUnloadTimeoutMS. | 505 // RenderViewHostImpl::kUnloadTimeoutMS. |
| 498 // Minimum configuration is two slow tabs and then responsive tab. | 506 // Minimum configuration is two slow tabs and then responsive tab. |
| 499 // But we also want to check how slow tabs behave in tail. | 507 // But we also want to check how slow tabs behave in tail. |
| 500 for (int i = 0; i < kTabCount; i++) { | 508 for (int i = 0; i < kTabCount; i++) { |
| 501 if (i) | 509 if (i) |
| 502 AddBlankTabAndShow(browsers_[0]); | 510 AddBlankTabAndShow(browsers_[0]); |
| 503 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 511 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 504 browsers_[0], | 512 browsers_[0], |
| 505 embedded_test_server()->GetURL((i == kResposiveTabIndex) | 513 embedded_test_server()->GetURL((i == kResposiveTabIndex) |
| 506 ? "/beforeunload.html" | 514 ? "/beforeunload.html" |
| 507 : "/beforeunload_slow.html"))); | 515 : "/beforeunload_slow.html"))); |
| 508 } | 516 } |
| 517 // Disable the hang monitor in the tab that is not expected to hang, so that |
| 518 // the dialog is guaranteed to show. |
| 519 DisableHangMonitor( |
| 520 browsers_[0]->tab_strip_model()->GetWebContentsAt(kResposiveTabIndex)); |
| 521 |
| 509 RepeatedNotificationObserver cancel_observer( | 522 RepeatedNotificationObserver cancel_observer( |
| 510 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 523 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 511 chrome::CloseAllBrowsersAndQuit(); | 524 chrome::CloseAllBrowsersAndQuit(); |
| 512 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 525 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 513 cancel_observer.Wait(); | 526 cancel_observer.Wait(); |
| 514 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 527 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 515 | 528 |
| 516 // All tabs should still be open. | 529 // All tabs should still be open. |
| 517 EXPECT_EQ(kTabCount, browsers_[0]->tab_strip_model()->count()); | 530 EXPECT_EQ(kTabCount, browsers_[0]->tab_strip_model()->count()); |
| 518 RepeatedNotificationObserver close_observer( | 531 RepeatedNotificationObserver close_observer( |
| 519 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 532 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
| 520 | 533 |
| 521 // Quit, this time accepting close confirmation dialog. | 534 // Quit, this time accepting close confirmation dialog. |
| 522 chrome::CloseAllBrowsersAndQuit(); | 535 chrome::CloseAllBrowsersAndQuit(); |
| 523 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 536 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 524 close_observer.Wait(); | 537 close_observer.Wait(); |
| 525 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 538 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 526 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 539 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 527 } | 540 } |
| 528 | 541 |
| 529 // Test that tabs in different windows with a slow beforeunload event response | 542 // Test that tabs in different windows with a slow beforeunload event response |
| 530 // are treated the same as the user accepting the close, but do not close the | 543 // are treated the same as the user accepting the close, but do not close the |
| 531 // tab early. | 544 // tab early. |
| 532 // Regression for crbug.com/365052 caused CHECK in tabstrip. | 545 // Regression for crbug.com/365052 caused CHECK in tabstrip. |
| 533 // | |
| 534 // Test is disabled as it likely to flack for the same reason as | |
| 535 // TestHangInBeforeUnloadMultipleTabs: there is a chance (especially under | |
| 536 // load) that normal tab will not answer within | |
| 537 // RenderViewHostImpl::kUnloadTimeoutMS thus |AcceptClose| or |CancelClose| | |
| 538 // will not find a dialog and fail. | |
| 539 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 546 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 540 DISABLED_TestBeforeUnloadMultipleSlowWindows) { | 547 TestBeforeUnloadMultipleSlowWindows) { |
| 541 ASSERT_TRUE(embedded_test_server()->Start()); | 548 ASSERT_TRUE(embedded_test_server()->Start()); |
| 542 const int kBrowserCount = 5; | 549 const int kBrowserCount = 5; |
| 543 const int kResposiveBrowserIndex = 2; | 550 const int kResposiveBrowserIndex = 2; |
| 544 // Create multiple browsers with all tabs except one responding after | 551 // Create multiple browsers with all tabs except one responding after |
| 545 // RenderViewHostImpl::kUnloadTimeoutMS . | 552 // RenderViewHostImpl::kUnloadTimeoutMS . |
| 546 // Minimum configuration is just one browser with slow tab and then | 553 // Minimum configuration is just one browser with slow tab and then |
| 547 // browser with responsive tab. | 554 // browser with responsive tab. |
| 548 // But we also want to check how slow tabs behave in tail and make test | 555 // But we also want to check how slow tabs behave in tail and make test |
| 549 // more robust. | 556 // more robust. |
| 550 for (int i = 0; i < kBrowserCount; i++) { | 557 for (int i = 0; i < kBrowserCount; i++) { |
| 551 if (i) | 558 if (i) |
| 552 browsers_.push_back(CreateBrowser(browser()->profile())); | 559 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 553 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 560 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 554 browsers_[i], | 561 browsers_[i], |
| 555 embedded_test_server()->GetURL((i == kResposiveBrowserIndex) | 562 embedded_test_server()->GetURL((i == kResposiveBrowserIndex) |
| 556 ? "/beforeunload.html" | 563 ? "/beforeunload.html" |
| 557 : "/beforeunload_slow.html"))); | 564 : "/beforeunload_slow.html"))); |
| 558 } | 565 } |
| 566 // Disable the hang monitor in the tab that is not expected to hang, so that |
| 567 // the dialog is guaranteed to show. |
| 568 DisableHangMonitor(browsers_[kResposiveBrowserIndex]); |
| 559 | 569 |
| 560 RepeatedNotificationObserver cancel_observer( | 570 RepeatedNotificationObserver cancel_observer( |
| 561 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, kResposiveBrowserIndex + 1); | 571 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, kResposiveBrowserIndex + 1); |
| 562 chrome::CloseAllBrowsersAndQuit(); | 572 chrome::CloseAllBrowsersAndQuit(); |
| 563 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 573 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 564 cancel_observer.Wait(); | 574 cancel_observer.Wait(); |
| 565 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 575 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 566 | 576 |
| 567 // All windows should still be open. | 577 // All windows should still be open. |
| 568 for (int i = 0; i < kBrowserCount; i++) | 578 for (int i = 0; i < kBrowserCount; i++) |
| 569 EXPECT_EQ(1, browsers_[i]->tab_strip_model()->count()); | 579 EXPECT_EQ(1, browsers_[i]->tab_strip_model()->count()); |
| 570 | 580 |
| 571 // Quit, this time accepting close confirmation dialog. | 581 // Quit, this time accepting close confirmation dialog. |
| 572 RepeatedNotificationObserver close_observer( | 582 RepeatedNotificationObserver close_observer( |
| 573 chrome::NOTIFICATION_BROWSER_CLOSED, kBrowserCount); | 583 chrome::NOTIFICATION_BROWSER_CLOSED, kBrowserCount); |
| 574 chrome::CloseAllBrowsersAndQuit(); | 584 chrome::CloseAllBrowsersAndQuit(); |
| 575 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 585 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 576 close_observer.Wait(); | 586 close_observer.Wait(); |
| 577 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 587 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 578 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 588 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 579 } | 589 } |
| 580 | 590 |
| 581 // Test that a window created during shutdown is closed. | 591 // Test that a window created during shutdown is closed. |
| 582 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 592 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 583 TestAddWindowDuringShutdown) { | 593 TestAddWindowDuringShutdown) { |
| 584 ASSERT_TRUE(embedded_test_server()->Start()); | 594 ASSERT_TRUE(embedded_test_server()->Start()); |
| 585 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 595 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 586 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 596 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 597 DisableHangMonitor(browsers_[0]); |
| 587 | 598 |
| 588 RepeatedNotificationObserver close_observer( | 599 RepeatedNotificationObserver close_observer( |
| 589 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 600 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 590 chrome::CloseAllBrowsersAndQuit(); | 601 chrome::CloseAllBrowsersAndQuit(); |
| 591 browsers_.push_back(CreateBrowser(browser()->profile())); | 602 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 592 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 603 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 593 close_observer.Wait(); | 604 close_observer.Wait(); |
| 594 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 605 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 595 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 606 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 596 } | 607 } |
| 597 | 608 |
| 598 // Test that a window created during shutdown with a beforeunload handler can | 609 // Test that a window created during shutdown with a beforeunload handler can |
| 599 // cancel the shutdown. | 610 // cancel the shutdown. |
| 600 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 611 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 601 TestAddWindowWithBeforeUnloadDuringShutdown) { | 612 TestAddWindowWithBeforeUnloadDuringShutdown) { |
| 602 ASSERT_TRUE(embedded_test_server()->Start()); | 613 ASSERT_TRUE(embedded_test_server()->Start()); |
| 603 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 614 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 604 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 615 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 616 DisableHangMonitor(browsers_[0]); |
| 605 | 617 |
| 606 RepeatedNotificationObserver cancel_observer( | 618 RepeatedNotificationObserver cancel_observer( |
| 607 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 619 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
| 608 chrome::CloseAllBrowsersAndQuit(); | 620 chrome::CloseAllBrowsersAndQuit(); |
| 609 browsers_.push_back(CreateBrowser(browser()->profile())); | 621 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 610 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 622 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 611 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 623 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 624 DisableHangMonitor(browsers_[1]); |
| 612 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 625 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 613 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 626 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 614 cancel_observer.Wait(); | 627 cancel_observer.Wait(); |
| 615 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 628 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 616 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 629 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 617 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 630 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| 618 | 631 |
| 619 // Allow shutdown for both beforeunload dialogs. | 632 // Allow shutdown for both beforeunload dialogs. |
| 620 RepeatedNotificationObserver close_observer( | 633 RepeatedNotificationObserver close_observer( |
| 621 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 634 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 622 chrome::CloseAllBrowsersAndQuit(); | 635 chrome::CloseAllBrowsersAndQuit(); |
| 623 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 636 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 624 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 637 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 625 close_observer.Wait(); | 638 close_observer.Wait(); |
| 626 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 639 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 627 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 640 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 628 } | 641 } |
| 629 | 642 |
| 630 // Test that tabs added during shutdown are closed. | 643 // Test that tabs added during shutdown are closed. |
| 631 // Disabled for being flaky tests: crbug.com/519646 | |
| 632 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 644 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 633 DISABLED_TestAddTabDuringShutdown) { | 645 TestAddTabDuringShutdown) { |
| 634 ASSERT_TRUE(embedded_test_server()->Start()); | 646 ASSERT_TRUE(embedded_test_server()->Start()); |
| 635 browsers_.push_back(CreateBrowser(browser()->profile())); | 647 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 636 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 648 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 637 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 649 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 638 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 650 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 639 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 651 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 652 DisableHangMonitor(browsers_[0]); |
| 653 DisableHangMonitor(browsers_[1]); |
| 640 | 654 |
| 641 RepeatedNotificationObserver close_observer( | 655 RepeatedNotificationObserver close_observer( |
| 642 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 656 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 643 chrome::CloseAllBrowsersAndQuit(); | 657 chrome::CloseAllBrowsersAndQuit(); |
| 644 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 658 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 645 AddBlankTabAndShow(browsers_[0]); | 659 AddBlankTabAndShow(browsers_[0]); |
| 646 AddBlankTabAndShow(browsers_[1]); | 660 AddBlankTabAndShow(browsers_[1]); |
| 647 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 661 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 648 close_observer.Wait(); | 662 close_observer.Wait(); |
| 649 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 663 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 650 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 664 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 651 } | 665 } |
| 652 | 666 |
| 653 // Test that tabs created during shutdown with beforeunload handlers can cancel | 667 // Test that tabs created during shutdown with beforeunload handlers can cancel |
| 654 // the shutdown. | 668 // the shutdown. |
| 655 // Disabled for being flaky tests: crbug.com/519646 | 669 |
| 656 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 670 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 657 DISABLED_TestAddTabWithBeforeUnloadDuringShutdown) { | 671 TestAddTabWithBeforeUnloadDuringShutdown) { |
| 658 ASSERT_TRUE(embedded_test_server()->Start()); | 672 ASSERT_TRUE(embedded_test_server()->Start()); |
| 659 browsers_.push_back(CreateBrowser(browser()->profile())); | 673 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 660 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 674 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 661 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 675 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 662 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 676 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 663 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 677 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 678 DisableHangMonitor(browsers_[0]); |
| 679 DisableHangMonitor(browsers_[1]); |
| 680 |
| 664 RepeatedNotificationObserver cancel_observer( | 681 RepeatedNotificationObserver cancel_observer( |
| 665 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 682 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
| 666 chrome::CloseAllBrowsersAndQuit(); | 683 chrome::CloseAllBrowsersAndQuit(); |
| 667 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 684 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 668 AddBlankTabAndShow(browsers_[0]); | 685 AddBlankTabAndShow(browsers_[0]); |
| 669 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 686 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 670 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 687 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 671 AddBlankTabAndShow(browsers_[1]); | 688 AddBlankTabAndShow(browsers_[1]); |
| 672 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 689 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 673 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 690 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 691 DisableHangMonitor(browsers_[0]); |
| 692 DisableHangMonitor(browsers_[1]); |
| 674 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 693 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 675 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 694 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 676 cancel_observer.Wait(); | 695 cancel_observer.Wait(); |
| 677 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 696 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 678 EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count()); | 697 EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count()); |
| 679 EXPECT_EQ(2, browsers_[1]->tab_strip_model()->count()); | 698 EXPECT_EQ(2, browsers_[1]->tab_strip_model()->count()); |
| 680 | 699 |
| 681 RepeatedNotificationObserver close_observer( | 700 RepeatedNotificationObserver close_observer( |
| 682 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 701 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 683 chrome::CloseAllBrowsersAndQuit(); | 702 chrome::CloseAllBrowsersAndQuit(); |
| 684 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 703 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 685 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 704 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 686 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 705 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 687 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 706 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 688 | 707 |
| 689 close_observer.Wait(); | 708 close_observer.Wait(); |
| 690 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 709 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 691 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 710 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 692 } | 711 } |
| 693 | 712 |
| 694 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 713 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 695 TestCloseTabDuringShutdown) { | 714 TestCloseTabDuringShutdown) { |
| 696 ASSERT_TRUE(embedded_test_server()->Start()); | 715 ASSERT_TRUE(embedded_test_server()->Start()); |
| 697 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 716 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 698 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 717 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 718 DisableHangMonitor(browsers_[0]); |
| 719 |
| 699 RepeatedNotificationObserver cancel_observer( | 720 RepeatedNotificationObserver cancel_observer( |
| 700 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 721 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 701 chrome::CloseAllBrowsersAndQuit(); | 722 chrome::CloseAllBrowsersAndQuit(); |
| 702 | 723 |
| 703 browsers_.push_back(CreateBrowser(browser()->profile())); | 724 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 704 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 725 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 705 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 726 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 727 DisableHangMonitor(browsers_[1]); |
| 706 browsers_[1]->tab_strip_model()->CloseAllTabs(); | 728 browsers_[1]->tab_strip_model()->CloseAllTabs(); |
| 707 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 729 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 708 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 730 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 709 cancel_observer.Wait(); | 731 cancel_observer.Wait(); |
| 710 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 732 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 711 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 733 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 712 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 734 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| 713 | 735 |
| 714 RepeatedNotificationObserver close_observer( | 736 RepeatedNotificationObserver close_observer( |
| 715 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 737 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 716 chrome::CloseAllBrowsersAndQuit(); | 738 chrome::CloseAllBrowsersAndQuit(); |
| 717 browsers_[1]->tab_strip_model()->CloseAllTabs(); | 739 browsers_[1]->tab_strip_model()->CloseAllTabs(); |
| 718 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 740 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 719 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 741 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 720 | 742 |
| 721 close_observer.Wait(); | 743 close_observer.Wait(); |
| 722 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 744 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 723 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 745 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 724 } | 746 } |
| 725 | 747 |
| 726 // Test is flaky on Windows and Mac. See http://crbug.com/276366. | |
| 727 #if defined(OS_WIN) || defined(OS_MACOSX) | |
| 728 #define MAYBE_TestOpenAndCloseWindowDuringShutdown \ | |
| 729 DISABLED_TestOpenAndCloseWindowDuringShutdown | |
| 730 #else | |
| 731 #define MAYBE_TestOpenAndCloseWindowDuringShutdown \ | |
| 732 TestOpenAndCloseWindowDuringShutdown | |
| 733 #endif | |
| 734 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 748 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 735 MAYBE_TestOpenAndCloseWindowDuringShutdown) { | 749 TestOpenAndCloseWindowDuringShutdown) { |
| 736 ASSERT_TRUE(embedded_test_server()->Start()); | 750 ASSERT_TRUE(embedded_test_server()->Start()); |
| 737 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 751 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 738 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 752 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 753 DisableHangMonitor(browsers_[0]); |
| 754 |
| 739 RepeatedNotificationObserver cancel_observer( | 755 RepeatedNotificationObserver cancel_observer( |
| 740 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 756 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
| 741 chrome::CloseAllBrowsersAndQuit(); | 757 chrome::CloseAllBrowsersAndQuit(); |
| 742 | 758 |
| 743 browsers_.push_back(CreateBrowser(browser()->profile())); | 759 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 744 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 760 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 745 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 761 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 762 DisableHangMonitor(browsers_[1]); |
| 746 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); | 763 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); |
| 747 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 764 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 748 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 765 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 749 cancel_observer.Wait(); | 766 cancel_observer.Wait(); |
| 750 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 767 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 751 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 768 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 752 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 769 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| 753 | 770 |
| 754 RepeatedNotificationObserver close_observer( | 771 RepeatedNotificationObserver close_observer( |
| 755 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 772 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 756 chrome::CloseAllBrowsersAndQuit(); | 773 chrome::CloseAllBrowsersAndQuit(); |
| 757 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); | 774 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); |
| 758 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 775 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 759 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 776 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 760 | 777 |
| 761 close_observer.Wait(); | 778 close_observer.Wait(); |
| 762 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 779 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 763 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 780 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 764 } | 781 } |
| 765 | 782 |
| 766 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 783 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 767 TestCloseWindowDuringShutdown) { | 784 TestCloseWindowDuringShutdown) { |
| 768 ASSERT_TRUE(embedded_test_server()->Start()); | 785 ASSERT_TRUE(embedded_test_server()->Start()); |
| 769 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 786 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 770 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 787 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 771 browsers_.push_back(CreateBrowser(browser()->profile())); | 788 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 772 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 789 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 773 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 790 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 791 DisableHangMonitor(browsers_[0]); |
| 792 DisableHangMonitor(browsers_[1]); |
| 793 |
| 774 RepeatedNotificationObserver cancel_observer( | 794 RepeatedNotificationObserver cancel_observer( |
| 775 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 795 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 776 chrome::CloseAllBrowsersAndQuit(); | 796 chrome::CloseAllBrowsersAndQuit(); |
| 777 | 797 |
| 778 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); | 798 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); |
| 779 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 799 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 780 cancel_observer.Wait(); | 800 cancel_observer.Wait(); |
| 781 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 801 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 782 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 802 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 783 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 803 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1002 close_observer.Wait(); | 1022 close_observer.Wait(); |
| 1003 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 1023 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 1004 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 1024 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 1005 if (browser_defaults::kBrowserAliveWithNoWindows) | 1025 if (browser_defaults::kBrowserAliveWithNoWindows) |
| 1006 EXPECT_EQ(1, DownloadService::NonMaliciousDownloadCountAllProfiles()); | 1026 EXPECT_EQ(1, DownloadService::NonMaliciousDownloadCountAllProfiles()); |
| 1007 else | 1027 else |
| 1008 EXPECT_EQ(0, DownloadService::NonMaliciousDownloadCountAllProfiles()); | 1028 EXPECT_EQ(0, DownloadService::NonMaliciousDownloadCountAllProfiles()); |
| 1009 } | 1029 } |
| 1010 | 1030 |
| 1011 // Test shutdown with downloads in progress and beforeunload handlers. | 1031 // Test shutdown with downloads in progress and beforeunload handlers. |
| 1012 // Disabled, see http://crbug.com/315754. | |
| 1013 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithDownloadsBrowserTest, | 1032 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithDownloadsBrowserTest, |
| 1014 DISABLED_TestBeforeUnloadAndDownloads) { | 1033 TestBeforeUnloadAndDownloads) { |
| 1015 ASSERT_TRUE(embedded_test_server()->Start()); | 1034 ASSERT_TRUE(embedded_test_server()->Start()); |
| 1016 SetDownloadPathForProfile(browser()->profile()); | 1035 SetDownloadPathForProfile(browser()->profile()); |
| 1017 ASSERT_NO_FATAL_FAILURE(CreateStalledDownload(browser())); | 1036 ASSERT_NO_FATAL_FAILURE(CreateStalledDownload(browser())); |
| 1018 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 1037 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 1019 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 1038 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
| 1039 DisableHangMonitor(browser()); |
| 1020 | 1040 |
| 1021 content::WindowedNotificationObserver cancel_observer( | 1041 content::WindowedNotificationObserver cancel_observer( |
| 1022 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, | 1042 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, |
| 1023 content::NotificationService::AllSources()); | 1043 content::NotificationService::AllSources()); |
| 1024 TestBrowserCloseManager::AttemptClose( | 1044 TestBrowserCloseManager::AttemptClose( |
| 1025 TestBrowserCloseManager::USER_CHOICE_USER_CANCELS_CLOSE); | 1045 TestBrowserCloseManager::USER_CHOICE_USER_CANCELS_CLOSE); |
| 1026 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 1046 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 1027 cancel_observer.Wait(); | 1047 cancel_observer.Wait(); |
| 1028 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 1048 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 1029 | 1049 |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1132 | 1152 |
| 1133 chrome::CloseAllBrowsers(); | 1153 chrome::CloseAllBrowsers(); |
| 1134 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 1154 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 1135 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 1155 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 1136 EXPECT_TRUE(IsBackgroundModeSuspended()); | 1156 EXPECT_TRUE(IsBackgroundModeSuspended()); |
| 1137 } | 1157 } |
| 1138 | 1158 |
| 1139 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerWithBackgroundModeBrowserTest, | 1159 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerWithBackgroundModeBrowserTest, |
| 1140 BrowserCloseManagerWithBackgroundModeBrowserTest, | 1160 BrowserCloseManagerWithBackgroundModeBrowserTest, |
| 1141 testing::Bool()); | 1161 testing::Bool()); |
| OLD | NEW |