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 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 #include "content/public/browser/browser_context.h" | 45 #include "content/public/browser/browser_context.h" |
46 #include "content/public/browser/download_item.h" | 46 #include "content/public/browser/download_item.h" |
47 #include "content/public/browser/download_manager.h" | 47 #include "content/public/browser/download_manager.h" |
48 #include "content/public/browser/notification_service.h" | 48 #include "content/public/browser/notification_service.h" |
49 #include "content/public/browser/render_frame_host.h" | 49 #include "content/public/browser/render_frame_host.h" |
50 #include "content/public/browser/render_view_host.h" | 50 #include "content/public/browser/render_view_host.h" |
51 #include "content/public/browser/render_widget_host.h" | 51 #include "content/public/browser/render_widget_host.h" |
52 #include "content/public/browser/web_contents.h" | 52 #include "content/public/browser/web_contents.h" |
53 #include "content/public/test/browser_test_utils.h" | 53 #include "content/public/test/browser_test_utils.h" |
54 #include "content/public/test/download_test_observer.h" | 54 #include "content/public/test/download_test_observer.h" |
| 55 #include "content/public/test/repeated_notification_observer.h" |
55 #include "content/public/test/test_navigation_observer.h" | 56 #include "content/public/test/test_navigation_observer.h" |
56 #include "net/test/embedded_test_server/embedded_test_server.h" | 57 #include "net/test/embedded_test_server/embedded_test_server.h" |
57 #include "net/test/url_request/url_request_mock_http_job.h" | 58 #include "net/test/url_request/url_request_mock_http_job.h" |
58 #include "net/test/url_request/url_request_slow_download_job.h" | 59 #include "net/test/url_request/url_request_slow_download_job.h" |
59 | 60 |
60 #if defined(OS_CHROMEOS) | 61 #if defined(OS_CHROMEOS) |
61 #include "chromeos/chromeos_switches.h" | 62 #include "chromeos/chromeos_switches.h" |
62 #endif | 63 #endif |
63 | 64 |
64 namespace { | 65 namespace { |
(...skipping 12 matching lines...) Expand all Loading... |
77 void AcceptClose() { | 78 void AcceptClose() { |
78 GetNextDialog()->AcceptAppModalDialog(); | 79 GetNextDialog()->AcceptAppModalDialog(); |
79 } | 80 } |
80 | 81 |
81 // Note: call |PrepareForDialog| on the relevant WebContents or Browser before | 82 // Note: call |PrepareForDialog| on the relevant WebContents or Browser before |
82 // trying to close it, to avoid flakiness. https://crbug.com/519646 | 83 // trying to close it, to avoid flakiness. https://crbug.com/519646 |
83 void CancelClose() { | 84 void CancelClose() { |
84 GetNextDialog()->CancelAppModalDialog(); | 85 GetNextDialog()->CancelAppModalDialog(); |
85 } | 86 } |
86 | 87 |
87 class RepeatedNotificationObserver : public content::NotificationObserver { | |
88 public: | |
89 explicit RepeatedNotificationObserver(int type, int count) | |
90 : num_outstanding_(count), running_(false) { | |
91 registrar_.Add(this, type, content::NotificationService::AllSources()); | |
92 } | |
93 | |
94 void Observe(int type, | |
95 const content::NotificationSource& source, | |
96 const content::NotificationDetails& details) override { | |
97 ASSERT_GT(num_outstanding_, 0); | |
98 if (!--num_outstanding_ && running_) { | |
99 content::BrowserThread::PostTask( | |
100 content::BrowserThread::UI, FROM_HERE, run_loop_.QuitClosure()); | |
101 } | |
102 } | |
103 | |
104 void Wait() { | |
105 if (num_outstanding_ <= 0) | |
106 return; | |
107 | |
108 running_ = true; | |
109 run_loop_.Run(); | |
110 running_ = false; | |
111 } | |
112 | |
113 private: | |
114 int num_outstanding_; | |
115 content::NotificationRegistrar registrar_; | |
116 bool running_; | |
117 base::RunLoop run_loop_; | |
118 | |
119 DISALLOW_COPY_AND_ASSIGN(RepeatedNotificationObserver); | |
120 }; | |
121 | |
122 class TabRestoreServiceChangesObserver | 88 class TabRestoreServiceChangesObserver |
123 : public sessions::TabRestoreServiceObserver { | 89 : public sessions::TabRestoreServiceObserver { |
124 public: | 90 public: |
125 explicit TabRestoreServiceChangesObserver(Profile* profile) | 91 explicit TabRestoreServiceChangesObserver(Profile* profile) |
126 : service_(TabRestoreServiceFactory::GetForProfile(profile)) { | 92 : service_(TabRestoreServiceFactory::GetForProfile(profile)) { |
127 if (service_) | 93 if (service_) |
128 service_->AddObserver(this); | 94 service_->AddObserver(this); |
129 } | 95 } |
130 | 96 |
131 ~TabRestoreServiceChangesObserver() override { | 97 ~TabRestoreServiceChangesObserver() override { |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
301 | 267 |
302 std::vector<Browser*> browsers_; | 268 std::vector<Browser*> browsers_; |
303 }; | 269 }; |
304 | 270 |
305 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) { | 271 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) { |
306 ASSERT_TRUE(embedded_test_server()->Start()); | 272 ASSERT_TRUE(embedded_test_server()->Start()); |
307 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 273 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
308 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 274 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
309 PrepareForDialog(browser()); | 275 PrepareForDialog(browser()); |
310 | 276 |
311 RepeatedNotificationObserver cancel_observer( | 277 content::RepeatedNotificationObserver cancel_observer( |
312 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 278 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
313 chrome::CloseAllBrowsersAndQuit(); | 279 chrome::CloseAllBrowsersAndQuit(); |
314 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 280 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
315 cancel_observer.Wait(); | 281 cancel_observer.Wait(); |
316 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 282 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
317 EXPECT_EQ(1, browser()->tab_strip_model()->count()); | 283 EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
318 | 284 |
319 RepeatedNotificationObserver close_observer( | 285 content::RepeatedNotificationObserver close_observer( |
320 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 286 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
321 chrome::CloseAllBrowsersAndQuit(); | 287 chrome::CloseAllBrowsersAndQuit(); |
322 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 288 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
323 close_observer.Wait(); | 289 close_observer.Wait(); |
324 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 290 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
325 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 291 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
326 } | 292 } |
327 | 293 |
328 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 294 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
329 TestShutdownMoreThanOnce) { | 295 TestShutdownMoreThanOnce) { |
330 ASSERT_TRUE(embedded_test_server()->Start()); | 296 ASSERT_TRUE(embedded_test_server()->Start()); |
331 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 297 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
332 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 298 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
333 PrepareForDialog(browser()); | 299 PrepareForDialog(browser()); |
334 | 300 |
335 RepeatedNotificationObserver cancel_observer( | 301 content::RepeatedNotificationObserver cancel_observer( |
336 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 302 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
337 chrome::CloseAllBrowsersAndQuit(); | 303 chrome::CloseAllBrowsersAndQuit(); |
338 chrome::CloseAllBrowsersAndQuit(); | 304 chrome::CloseAllBrowsersAndQuit(); |
339 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 305 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
340 cancel_observer.Wait(); | 306 cancel_observer.Wait(); |
341 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 307 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
342 EXPECT_EQ(1, browser()->tab_strip_model()->count()); | 308 EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
343 | 309 |
344 RepeatedNotificationObserver close_observer( | 310 content::RepeatedNotificationObserver close_observer( |
345 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 311 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
346 chrome::CloseAllBrowsersAndQuit(); | 312 chrome::CloseAllBrowsersAndQuit(); |
347 chrome::CloseAllBrowsersAndQuit(); | 313 chrome::CloseAllBrowsersAndQuit(); |
348 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 314 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
349 close_observer.Wait(); | 315 close_observer.Wait(); |
350 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 316 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
351 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 317 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
352 } | 318 } |
353 | 319 |
354 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 320 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
355 PRE_TestSessionRestore) { | 321 PRE_TestSessionRestore) { |
356 ASSERT_TRUE(embedded_test_server()->Start()); | 322 ASSERT_TRUE(embedded_test_server()->Start()); |
357 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 323 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
358 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 324 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
359 AddBlankTabAndShow(browser()); | 325 AddBlankTabAndShow(browser()); |
360 ASSERT_NO_FATAL_FAILURE( | 326 ASSERT_NO_FATAL_FAILURE( |
361 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL))); | 327 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL))); |
362 PrepareForDialog(browser()); | 328 PrepareForDialog(browser()); |
363 | 329 |
364 RepeatedNotificationObserver cancel_observer( | 330 content::RepeatedNotificationObserver cancel_observer( |
365 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 331 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
366 chrome::CloseAllBrowsersAndQuit(); | 332 chrome::CloseAllBrowsersAndQuit(); |
367 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 333 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
368 cancel_observer.Wait(); | 334 cancel_observer.Wait(); |
369 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 335 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
370 | 336 |
371 browser()->tab_strip_model() | 337 browser()->tab_strip_model() |
372 ->CloseWebContentsAt(1, TabStripModel::CLOSE_USER_GESTURE); | 338 ->CloseWebContentsAt(1, TabStripModel::CLOSE_USER_GESTURE); |
373 content::TestNavigationObserver navigation_observer( | 339 content::TestNavigationObserver navigation_observer( |
374 browser()->tab_strip_model()->GetActiveWebContents(), 1); | 340 browser()->tab_strip_model()->GetActiveWebContents(), 1); |
375 ASSERT_NO_FATAL_FAILURE(NavigateToURLWithDisposition( | 341 ASSERT_NO_FATAL_FAILURE(NavigateToURLWithDisposition( |
376 browser(), GURL(chrome::kChromeUIVersionURL), | 342 browser(), GURL(chrome::kChromeUIVersionURL), |
377 WindowOpenDisposition::CURRENT_TAB, ui_test_utils::BROWSER_TEST_NONE)); | 343 WindowOpenDisposition::CURRENT_TAB, ui_test_utils::BROWSER_TEST_NONE)); |
378 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 344 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
379 navigation_observer.Wait(); | 345 navigation_observer.Wait(); |
380 | 346 |
381 RepeatedNotificationObserver close_observer( | 347 content::RepeatedNotificationObserver close_observer( |
382 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 348 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
383 chrome::CloseAllBrowsersAndQuit(); | 349 chrome::CloseAllBrowsersAndQuit(); |
384 close_observer.Wait(); | 350 close_observer.Wait(); |
385 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 351 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
386 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 352 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
387 } | 353 } |
388 | 354 |
389 // Test that the tab closed after the aborted shutdown attempt is not re-opened | 355 // Test that the tab closed after the aborted shutdown attempt is not re-opened |
390 // when restoring the session. | 356 // when restoring the session. |
391 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 357 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
(...skipping 13 matching lines...) Expand all Loading... |
405 browsers_.push_back(CreateBrowser(browser()->profile())); | 371 browsers_.push_back(CreateBrowser(browser()->profile())); |
406 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 372 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
407 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 373 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
408 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 374 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
409 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 375 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
410 PrepareForDialog(browsers_[0]); | 376 PrepareForDialog(browsers_[0]); |
411 PrepareForDialog(browsers_[1]); | 377 PrepareForDialog(browsers_[1]); |
412 | 378 |
413 // Cancel shutdown on the first beforeunload event. | 379 // Cancel shutdown on the first beforeunload event. |
414 { | 380 { |
415 RepeatedNotificationObserver cancel_observer( | 381 content::RepeatedNotificationObserver cancel_observer( |
416 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 382 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
417 chrome::CloseAllBrowsersAndQuit(); | 383 chrome::CloseAllBrowsersAndQuit(); |
418 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 384 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
419 cancel_observer.Wait(); | 385 cancel_observer.Wait(); |
420 } | 386 } |
421 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 387 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
422 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 388 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
423 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 389 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
424 | 390 |
425 // Cancel shutdown on the second beforeunload event. | 391 // Cancel shutdown on the second beforeunload event. |
426 { | 392 { |
427 RepeatedNotificationObserver cancel_observer( | 393 content::RepeatedNotificationObserver cancel_observer( |
428 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 394 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
429 chrome::CloseAllBrowsersAndQuit(); | 395 chrome::CloseAllBrowsersAndQuit(); |
430 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 396 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
431 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 397 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
432 cancel_observer.Wait(); | 398 cancel_observer.Wait(); |
433 } | 399 } |
434 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 400 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
435 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 401 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
436 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 402 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
437 | 403 |
438 // Allow shutdown for both beforeunload events. | 404 // Allow shutdown for both beforeunload events. |
439 RepeatedNotificationObserver close_observer( | 405 content::RepeatedNotificationObserver close_observer( |
440 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 406 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
441 chrome::CloseAllBrowsersAndQuit(); | 407 chrome::CloseAllBrowsersAndQuit(); |
442 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 408 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
443 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 409 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
444 close_observer.Wait(); | 410 close_observer.Wait(); |
445 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 411 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
446 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 412 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
447 } | 413 } |
448 | 414 |
449 // Test that tabs in the same window with a beforeunload event that hangs are | 415 // Test that tabs in the same window with a beforeunload event that hangs are |
450 // treated the same as the user accepting the close, but do not close the tab | 416 // treated the same as the user accepting the close, but do not close the tab |
451 // early. | 417 // early. |
452 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 418 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
453 TestHangInBeforeUnloadMultipleTabs) { | 419 TestHangInBeforeUnloadMultipleTabs) { |
454 ASSERT_TRUE(embedded_test_server()->Start()); | 420 ASSERT_TRUE(embedded_test_server()->Start()); |
455 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 421 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
456 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 422 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); |
457 AddBlankTabAndShow(browsers_[0]); | 423 AddBlankTabAndShow(browsers_[0]); |
458 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 424 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
459 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 425 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
460 AddBlankTabAndShow(browsers_[0]); | 426 AddBlankTabAndShow(browsers_[0]); |
461 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 427 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
462 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 428 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); |
463 // Disable the hang monitor in the tab that is not expected to hang, so that | 429 // Disable the hang monitor in the tab that is not expected to hang, so that |
464 // the dialog is guaranteed to show. | 430 // the dialog is guaranteed to show. |
465 PrepareForDialog(browsers_[0]->tab_strip_model()->GetWebContentsAt(1)); | 431 PrepareForDialog(browsers_[0]->tab_strip_model()->GetWebContentsAt(1)); |
466 | 432 |
467 RepeatedNotificationObserver cancel_observer( | 433 content::RepeatedNotificationObserver cancel_observer( |
468 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 434 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
469 chrome::CloseAllBrowsersAndQuit(); | 435 chrome::CloseAllBrowsersAndQuit(); |
470 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 436 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
471 cancel_observer.Wait(); | 437 cancel_observer.Wait(); |
472 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 438 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
473 // All tabs should still be open. | 439 // All tabs should still be open. |
474 EXPECT_EQ(3, browsers_[0]->tab_strip_model()->count()); | 440 EXPECT_EQ(3, browsers_[0]->tab_strip_model()->count()); |
475 | 441 |
476 RepeatedNotificationObserver close_observer( | 442 content::RepeatedNotificationObserver close_observer( |
477 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 443 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
478 chrome::CloseAllBrowsersAndQuit(); | 444 chrome::CloseAllBrowsersAndQuit(); |
479 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 445 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
480 close_observer.Wait(); | 446 close_observer.Wait(); |
481 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 447 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
482 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 448 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
483 } | 449 } |
484 | 450 |
485 // Test that tabs in different windows with a beforeunload event that hangs are | 451 // Test that tabs in different windows with a beforeunload event that hangs are |
486 // treated the same as the user accepting the close, but do not close the tab | 452 // treated the same as the user accepting the close, but do not close the tab |
487 // early. | 453 // early. |
488 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 454 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
489 TestHangInBeforeUnloadMultipleWindows) { | 455 TestHangInBeforeUnloadMultipleWindows) { |
490 ASSERT_TRUE(embedded_test_server()->Start()); | 456 ASSERT_TRUE(embedded_test_server()->Start()); |
491 browsers_.push_back(CreateBrowser(browser()->profile())); | 457 browsers_.push_back(CreateBrowser(browser()->profile())); |
492 browsers_.push_back(CreateBrowser(browser()->profile())); | 458 browsers_.push_back(CreateBrowser(browser()->profile())); |
493 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 459 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
494 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 460 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); |
495 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 461 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
496 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 462 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
497 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 463 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
498 browsers_[2], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 464 browsers_[2], embedded_test_server()->GetURL("/beforeunload_hang.html"))); |
499 // Disable the hang monitor in the tab that is not expected to hang, so that | 465 // Disable the hang monitor in the tab that is not expected to hang, so that |
500 // the dialog is guaranteed to show. | 466 // the dialog is guaranteed to show. |
501 PrepareForDialog(browsers_[1]); | 467 PrepareForDialog(browsers_[1]); |
502 | 468 |
503 RepeatedNotificationObserver cancel_observer( | 469 content::RepeatedNotificationObserver cancel_observer( |
504 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 470 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
505 chrome::CloseAllBrowsersAndQuit(); | 471 chrome::CloseAllBrowsersAndQuit(); |
506 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 472 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
507 cancel_observer.Wait(); | 473 cancel_observer.Wait(); |
508 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 474 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
509 // All windows should still be open. | 475 // All windows should still be open. |
510 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 476 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
511 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 477 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
512 EXPECT_EQ(1, browsers_[2]->tab_strip_model()->count()); | 478 EXPECT_EQ(1, browsers_[2]->tab_strip_model()->count()); |
513 | 479 |
514 RepeatedNotificationObserver close_observer( | 480 content::RepeatedNotificationObserver close_observer( |
515 chrome::NOTIFICATION_BROWSER_CLOSED, 3); | 481 chrome::NOTIFICATION_BROWSER_CLOSED, 3); |
516 chrome::CloseAllBrowsersAndQuit(); | 482 chrome::CloseAllBrowsersAndQuit(); |
517 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 483 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
518 close_observer.Wait(); | 484 close_observer.Wait(); |
519 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 485 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
520 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 486 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
521 } | 487 } |
522 | 488 |
523 // Test that tabs that are slow to respond are not closed prematurely. | 489 // Test that tabs that are slow to respond are not closed prematurely. |
524 // Regression for crbug.com/365052 caused some of tabs to be closed even if | 490 // Regression for crbug.com/365052 caused some of tabs to be closed even if |
(...skipping 14 matching lines...) Expand all Loading... |
539 browsers_[0], | 505 browsers_[0], |
540 embedded_test_server()->GetURL((i == kResposiveTabIndex) | 506 embedded_test_server()->GetURL((i == kResposiveTabIndex) |
541 ? "/beforeunload.html" | 507 ? "/beforeunload.html" |
542 : "/beforeunload_slow.html"))); | 508 : "/beforeunload_slow.html"))); |
543 } | 509 } |
544 // Disable the hang monitor in the tab that is not expected to hang, so that | 510 // Disable the hang monitor in the tab that is not expected to hang, so that |
545 // the dialog is guaranteed to show. | 511 // the dialog is guaranteed to show. |
546 PrepareForDialog( | 512 PrepareForDialog( |
547 browsers_[0]->tab_strip_model()->GetWebContentsAt(kResposiveTabIndex)); | 513 browsers_[0]->tab_strip_model()->GetWebContentsAt(kResposiveTabIndex)); |
548 | 514 |
549 RepeatedNotificationObserver cancel_observer( | 515 content::RepeatedNotificationObserver cancel_observer( |
550 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 516 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
551 chrome::CloseAllBrowsersAndQuit(); | 517 chrome::CloseAllBrowsersAndQuit(); |
552 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 518 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
553 cancel_observer.Wait(); | 519 cancel_observer.Wait(); |
554 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 520 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
555 | 521 |
556 // All tabs should still be open. | 522 // All tabs should still be open. |
557 EXPECT_EQ(kTabCount, browsers_[0]->tab_strip_model()->count()); | 523 EXPECT_EQ(kTabCount, browsers_[0]->tab_strip_model()->count()); |
558 RepeatedNotificationObserver close_observer( | 524 content::RepeatedNotificationObserver close_observer( |
559 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 525 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
560 | 526 |
561 // Quit, this time accepting close confirmation dialog. | 527 // Quit, this time accepting close confirmation dialog. |
562 chrome::CloseAllBrowsersAndQuit(); | 528 chrome::CloseAllBrowsersAndQuit(); |
563 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 529 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
564 close_observer.Wait(); | 530 close_observer.Wait(); |
565 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 531 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
566 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 532 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
567 } | 533 } |
568 | 534 |
(...skipping 18 matching lines...) Expand all Loading... |
587 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 553 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
588 browsers_[i], | 554 browsers_[i], |
589 embedded_test_server()->GetURL((i == kResposiveBrowserIndex) | 555 embedded_test_server()->GetURL((i == kResposiveBrowserIndex) |
590 ? "/beforeunload.html" | 556 ? "/beforeunload.html" |
591 : "/beforeunload_slow.html"))); | 557 : "/beforeunload_slow.html"))); |
592 } | 558 } |
593 // Disable the hang monitor in the tab that is not expected to hang, so that | 559 // Disable the hang monitor in the tab that is not expected to hang, so that |
594 // the dialog is guaranteed to show. | 560 // the dialog is guaranteed to show. |
595 PrepareForDialog(browsers_[kResposiveBrowserIndex]); | 561 PrepareForDialog(browsers_[kResposiveBrowserIndex]); |
596 | 562 |
597 RepeatedNotificationObserver cancel_observer( | 563 content::RepeatedNotificationObserver cancel_observer( |
598 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, kResposiveBrowserIndex + 1); | 564 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, kResposiveBrowserIndex + 1); |
599 chrome::CloseAllBrowsersAndQuit(); | 565 chrome::CloseAllBrowsersAndQuit(); |
600 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 566 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
601 cancel_observer.Wait(); | 567 cancel_observer.Wait(); |
602 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 568 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
603 | 569 |
604 // All windows should still be open. | 570 // All windows should still be open. |
605 for (int i = 0; i < kBrowserCount; i++) | 571 for (int i = 0; i < kBrowserCount; i++) |
606 EXPECT_EQ(1, browsers_[i]->tab_strip_model()->count()); | 572 EXPECT_EQ(1, browsers_[i]->tab_strip_model()->count()); |
607 | 573 |
608 // Quit, this time accepting close confirmation dialog. | 574 // Quit, this time accepting close confirmation dialog. |
609 RepeatedNotificationObserver close_observer( | 575 content::RepeatedNotificationObserver close_observer( |
610 chrome::NOTIFICATION_BROWSER_CLOSED, kBrowserCount); | 576 chrome::NOTIFICATION_BROWSER_CLOSED, kBrowserCount); |
611 chrome::CloseAllBrowsersAndQuit(); | 577 chrome::CloseAllBrowsersAndQuit(); |
612 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 578 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
613 close_observer.Wait(); | 579 close_observer.Wait(); |
614 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 580 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
615 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 581 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
616 } | 582 } |
617 | 583 |
618 // Test that a window created during shutdown is closed. | 584 // Test that a window created during shutdown is closed. |
619 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 585 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
620 TestAddWindowDuringShutdown) { | 586 TestAddWindowDuringShutdown) { |
621 ASSERT_TRUE(embedded_test_server()->Start()); | 587 ASSERT_TRUE(embedded_test_server()->Start()); |
622 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 588 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
623 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 589 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
624 PrepareForDialog(browsers_[0]); | 590 PrepareForDialog(browsers_[0]); |
625 | 591 |
626 RepeatedNotificationObserver close_observer( | 592 content::RepeatedNotificationObserver close_observer( |
627 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 593 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
628 chrome::CloseAllBrowsersAndQuit(); | 594 chrome::CloseAllBrowsersAndQuit(); |
629 browsers_.push_back(CreateBrowser(browser()->profile())); | 595 browsers_.push_back(CreateBrowser(browser()->profile())); |
630 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 596 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
631 close_observer.Wait(); | 597 close_observer.Wait(); |
632 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 598 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
633 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 599 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
634 } | 600 } |
635 | 601 |
636 // Test that a window created during shutdown with a beforeunload handler can | 602 // Test that a window created during shutdown with a beforeunload handler can |
637 // cancel the shutdown. | 603 // cancel the shutdown. |
638 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 604 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
639 TestAddWindowWithBeforeUnloadDuringShutdown) { | 605 TestAddWindowWithBeforeUnloadDuringShutdown) { |
640 ASSERT_TRUE(embedded_test_server()->Start()); | 606 ASSERT_TRUE(embedded_test_server()->Start()); |
641 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 607 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
642 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 608 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
643 PrepareForDialog(browsers_[0]); | 609 PrepareForDialog(browsers_[0]); |
644 | 610 |
645 RepeatedNotificationObserver cancel_observer( | 611 content::RepeatedNotificationObserver cancel_observer( |
646 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 612 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
647 chrome::CloseAllBrowsersAndQuit(); | 613 chrome::CloseAllBrowsersAndQuit(); |
648 browsers_.push_back(CreateBrowser(browser()->profile())); | 614 browsers_.push_back(CreateBrowser(browser()->profile())); |
649 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 615 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
650 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 616 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
651 PrepareForDialog(browsers_[1]); | 617 PrepareForDialog(browsers_[1]); |
652 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 618 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
653 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 619 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
654 cancel_observer.Wait(); | 620 cancel_observer.Wait(); |
655 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 621 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
656 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 622 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
657 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 623 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
658 | 624 |
659 // Allow shutdown for both beforeunload dialogs. | 625 // Allow shutdown for both beforeunload dialogs. |
660 RepeatedNotificationObserver close_observer( | 626 content::RepeatedNotificationObserver close_observer( |
661 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 627 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
662 chrome::CloseAllBrowsersAndQuit(); | 628 chrome::CloseAllBrowsersAndQuit(); |
663 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 629 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
664 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 630 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
665 close_observer.Wait(); | 631 close_observer.Wait(); |
666 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 632 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
667 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 633 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
668 } | 634 } |
669 | 635 |
670 // Test that tabs added during shutdown are closed. | 636 // Test that tabs added during shutdown are closed. |
671 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 637 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
672 TestAddTabDuringShutdown) { | 638 TestAddTabDuringShutdown) { |
673 ASSERT_TRUE(embedded_test_server()->Start()); | 639 ASSERT_TRUE(embedded_test_server()->Start()); |
674 browsers_.push_back(CreateBrowser(browser()->profile())); | 640 browsers_.push_back(CreateBrowser(browser()->profile())); |
675 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 641 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
676 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 642 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
677 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 643 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
678 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 644 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
679 PrepareForDialog(browsers_[0]); | 645 PrepareForDialog(browsers_[0]); |
680 PrepareForDialog(browsers_[1]); | 646 PrepareForDialog(browsers_[1]); |
681 | 647 |
682 RepeatedNotificationObserver close_observer( | 648 content::RepeatedNotificationObserver close_observer( |
683 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 649 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
684 chrome::CloseAllBrowsersAndQuit(); | 650 chrome::CloseAllBrowsersAndQuit(); |
685 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 651 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
686 AddBlankTabAndShow(browsers_[0]); | 652 AddBlankTabAndShow(browsers_[0]); |
687 AddBlankTabAndShow(browsers_[1]); | 653 AddBlankTabAndShow(browsers_[1]); |
688 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 654 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
689 close_observer.Wait(); | 655 close_observer.Wait(); |
690 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 656 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
691 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 657 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
692 } | 658 } |
693 | 659 |
694 // Test that tabs created during shutdown with beforeunload handlers can cancel | 660 // Test that tabs created during shutdown with beforeunload handlers can cancel |
695 // the shutdown. | 661 // the shutdown. |
696 | 662 |
697 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 663 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
698 TestAddTabWithBeforeUnloadDuringShutdown) { | 664 TestAddTabWithBeforeUnloadDuringShutdown) { |
699 ASSERT_TRUE(embedded_test_server()->Start()); | 665 ASSERT_TRUE(embedded_test_server()->Start()); |
700 browsers_.push_back(CreateBrowser(browser()->profile())); | 666 browsers_.push_back(CreateBrowser(browser()->profile())); |
701 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 667 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
702 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 668 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
703 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 669 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
704 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 670 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
705 PrepareForDialog(browsers_[0]); | 671 PrepareForDialog(browsers_[0]); |
706 PrepareForDialog(browsers_[1]); | 672 PrepareForDialog(browsers_[1]); |
707 | 673 |
708 RepeatedNotificationObserver cancel_observer( | 674 content::RepeatedNotificationObserver cancel_observer( |
709 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 675 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
710 chrome::CloseAllBrowsersAndQuit(); | 676 chrome::CloseAllBrowsersAndQuit(); |
711 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 677 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
712 AddBlankTabAndShow(browsers_[0]); | 678 AddBlankTabAndShow(browsers_[0]); |
713 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 679 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
714 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 680 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
715 AddBlankTabAndShow(browsers_[1]); | 681 AddBlankTabAndShow(browsers_[1]); |
716 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 682 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
717 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 683 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
718 PrepareForDialog(browsers_[0]); | 684 PrepareForDialog(browsers_[0]); |
719 PrepareForDialog(browsers_[1]); | 685 PrepareForDialog(browsers_[1]); |
720 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 686 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
721 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 687 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
722 cancel_observer.Wait(); | 688 cancel_observer.Wait(); |
723 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 689 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
724 EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count()); | 690 EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count()); |
725 EXPECT_EQ(2, browsers_[1]->tab_strip_model()->count()); | 691 EXPECT_EQ(2, browsers_[1]->tab_strip_model()->count()); |
726 | 692 |
727 RepeatedNotificationObserver close_observer( | 693 content::RepeatedNotificationObserver close_observer( |
728 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 694 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
729 chrome::CloseAllBrowsersAndQuit(); | 695 chrome::CloseAllBrowsersAndQuit(); |
730 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 696 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
731 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 697 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
732 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 698 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
733 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 699 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
734 | 700 |
735 close_observer.Wait(); | 701 close_observer.Wait(); |
736 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 702 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
737 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 703 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
842 browser2->tab_strip_model()->GetWebContentsAt(1)->GetURL()); | 808 browser2->tab_strip_model()->GetWebContentsAt(1)->GetURL()); |
843 } | 809 } |
844 | 810 |
845 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 811 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
846 TestCloseTabDuringShutdown) { | 812 TestCloseTabDuringShutdown) { |
847 ASSERT_TRUE(embedded_test_server()->Start()); | 813 ASSERT_TRUE(embedded_test_server()->Start()); |
848 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 814 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
849 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 815 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
850 PrepareForDialog(browsers_[0]); | 816 PrepareForDialog(browsers_[0]); |
851 | 817 |
852 RepeatedNotificationObserver cancel_observer( | 818 content::RepeatedNotificationObserver cancel_observer( |
853 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 819 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
854 chrome::CloseAllBrowsersAndQuit(); | 820 chrome::CloseAllBrowsersAndQuit(); |
855 | 821 |
856 browsers_.push_back(CreateBrowser(browser()->profile())); | 822 browsers_.push_back(CreateBrowser(browser()->profile())); |
857 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 823 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
858 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 824 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
859 PrepareForDialog(browsers_[1]); | 825 PrepareForDialog(browsers_[1]); |
860 browsers_[1]->tab_strip_model()->CloseAllTabs(); | 826 browsers_[1]->tab_strip_model()->CloseAllTabs(); |
861 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 827 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
862 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 828 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
863 cancel_observer.Wait(); | 829 cancel_observer.Wait(); |
864 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 830 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
865 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 831 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
866 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 832 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
867 | 833 |
868 RepeatedNotificationObserver close_observer( | 834 content::RepeatedNotificationObserver close_observer( |
869 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 835 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
870 chrome::CloseAllBrowsersAndQuit(); | 836 chrome::CloseAllBrowsersAndQuit(); |
871 browsers_[1]->tab_strip_model()->CloseAllTabs(); | 837 browsers_[1]->tab_strip_model()->CloseAllTabs(); |
872 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 838 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
873 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 839 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
874 | 840 |
875 close_observer.Wait(); | 841 close_observer.Wait(); |
876 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 842 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
877 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 843 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
878 } | 844 } |
879 | 845 |
880 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 846 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
881 TestOpenAndCloseWindowDuringShutdown) { | 847 TestOpenAndCloseWindowDuringShutdown) { |
882 ASSERT_TRUE(embedded_test_server()->Start()); | 848 ASSERT_TRUE(embedded_test_server()->Start()); |
883 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 849 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
884 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 850 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
885 PrepareForDialog(browsers_[0]); | 851 PrepareForDialog(browsers_[0]); |
886 | 852 |
887 RepeatedNotificationObserver cancel_observer( | 853 content::RepeatedNotificationObserver cancel_observer( |
888 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 854 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
889 chrome::CloseAllBrowsersAndQuit(); | 855 chrome::CloseAllBrowsersAndQuit(); |
890 | 856 |
891 browsers_.push_back(CreateBrowser(browser()->profile())); | 857 browsers_.push_back(CreateBrowser(browser()->profile())); |
892 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 858 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
893 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 859 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
894 PrepareForDialog(browsers_[1]); | 860 PrepareForDialog(browsers_[1]); |
895 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); | 861 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); |
896 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 862 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
897 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 863 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
898 cancel_observer.Wait(); | 864 cancel_observer.Wait(); |
899 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 865 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
900 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 866 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
901 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 867 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
902 | 868 |
903 RepeatedNotificationObserver close_observer( | 869 content::RepeatedNotificationObserver close_observer( |
904 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 870 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
905 chrome::CloseAllBrowsersAndQuit(); | 871 chrome::CloseAllBrowsersAndQuit(); |
906 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); | 872 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); |
907 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 873 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
908 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 874 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
909 | 875 |
910 close_observer.Wait(); | 876 close_observer.Wait(); |
911 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 877 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
912 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 878 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
913 } | 879 } |
914 | 880 |
915 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 881 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
916 TestCloseWindowDuringShutdown) { | 882 TestCloseWindowDuringShutdown) { |
917 ASSERT_TRUE(embedded_test_server()->Start()); | 883 ASSERT_TRUE(embedded_test_server()->Start()); |
918 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 884 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
919 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 885 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
920 browsers_.push_back(CreateBrowser(browser()->profile())); | 886 browsers_.push_back(CreateBrowser(browser()->profile())); |
921 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 887 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
922 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 888 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
923 PrepareForDialog(browsers_[0]); | 889 PrepareForDialog(browsers_[0]); |
924 PrepareForDialog(browsers_[1]); | 890 PrepareForDialog(browsers_[1]); |
925 | 891 |
926 RepeatedNotificationObserver cancel_observer( | 892 content::RepeatedNotificationObserver cancel_observer( |
927 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 893 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
928 chrome::CloseAllBrowsersAndQuit(); | 894 chrome::CloseAllBrowsersAndQuit(); |
929 | 895 |
930 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); | 896 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); |
931 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 897 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
932 cancel_observer.Wait(); | 898 cancel_observer.Wait(); |
933 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 899 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
934 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 900 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
935 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 901 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
936 | 902 |
937 RepeatedNotificationObserver close_observer( | 903 content::RepeatedNotificationObserver close_observer( |
938 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 904 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
939 chrome::CloseAllBrowsersAndQuit(); | 905 chrome::CloseAllBrowsersAndQuit(); |
940 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); | 906 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); |
941 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 907 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
942 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 908 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
943 | 909 |
944 close_observer.Wait(); | 910 close_observer.Wait(); |
945 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 911 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
946 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 912 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
947 } | 913 } |
(...skipping 29 matching lines...) Expand all Loading... |
977 // Mac has its own in-progress download prompt in app_controller_mac.mm, so | 943 // Mac has its own in-progress download prompt in app_controller_mac.mm, so |
978 // BrowserCloseManager should simply close all browsers. If there are no | 944 // BrowserCloseManager should simply close all browsers. If there are no |
979 // browsers, it should not crash. | 945 // browsers, it should not crash. |
980 #if defined(OS_MACOSX) | 946 #if defined(OS_MACOSX) |
981 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithDownloadsBrowserTest, | 947 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithDownloadsBrowserTest, |
982 TestWithDownloads) { | 948 TestWithDownloads) { |
983 ASSERT_TRUE(embedded_test_server()->Start()); | 949 ASSERT_TRUE(embedded_test_server()->Start()); |
984 SetDownloadPathForProfile(browser()->profile()); | 950 SetDownloadPathForProfile(browser()->profile()); |
985 ASSERT_NO_FATAL_FAILURE(CreateStalledDownload(browser())); | 951 ASSERT_NO_FATAL_FAILURE(CreateStalledDownload(browser())); |
986 | 952 |
987 RepeatedNotificationObserver close_observer( | 953 content::RepeatedNotificationObserver close_observer( |
988 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 954 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
989 | 955 |
990 TestBrowserCloseManager::AttemptClose( | 956 TestBrowserCloseManager::AttemptClose( |
991 TestBrowserCloseManager::NO_USER_CHOICE); | 957 TestBrowserCloseManager::NO_USER_CHOICE); |
992 close_observer.Wait(); | 958 close_observer.Wait(); |
993 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 959 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
994 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 960 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
995 EXPECT_EQ(1, DownloadCoreService::NonMaliciousDownloadCountAllProfiles()); | 961 EXPECT_EQ(1, DownloadCoreService::NonMaliciousDownloadCountAllProfiles()); |
996 | 962 |
997 // Attempting to close again should not crash. | 963 // Attempting to close again should not crash. |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1050 ASSERT_NO_FATAL_FAILURE(CreateStalledDownload(browser())); | 1016 ASSERT_NO_FATAL_FAILURE(CreateStalledDownload(browser())); |
1051 content::TestNavigationObserver navigation_observer( | 1017 content::TestNavigationObserver navigation_observer( |
1052 browser()->tab_strip_model()->GetActiveWebContents(), 1); | 1018 browser()->tab_strip_model()->GetActiveWebContents(), 1); |
1053 TestBrowserCloseManager::AttemptClose( | 1019 TestBrowserCloseManager::AttemptClose( |
1054 TestBrowserCloseManager::USER_CHOICE_USER_CANCELS_CLOSE); | 1020 TestBrowserCloseManager::USER_CHOICE_USER_CANCELS_CLOSE); |
1055 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 1021 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
1056 navigation_observer.Wait(); | 1022 navigation_observer.Wait(); |
1057 EXPECT_EQ(GURL(chrome::kChromeUIDownloadsURL), | 1023 EXPECT_EQ(GURL(chrome::kChromeUIDownloadsURL), |
1058 browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); | 1024 browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); |
1059 | 1025 |
1060 RepeatedNotificationObserver close_observer( | 1026 content::RepeatedNotificationObserver close_observer( |
1061 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 1027 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
1062 | 1028 |
1063 TestBrowserCloseManager::AttemptClose( | 1029 TestBrowserCloseManager::AttemptClose( |
1064 TestBrowserCloseManager::USER_CHOICE_USER_ALLOWS_CLOSE); | 1030 TestBrowserCloseManager::USER_CHOICE_USER_ALLOWS_CLOSE); |
1065 close_observer.Wait(); | 1031 close_observer.Wait(); |
1066 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 1032 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
1067 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 1033 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
1068 if (browser_defaults::kBrowserAliveWithNoWindows) | 1034 if (browser_defaults::kBrowserAliveWithNoWindows) |
1069 EXPECT_EQ(1, DownloadCoreService::NonMaliciousDownloadCountAllProfiles()); | 1035 EXPECT_EQ(1, DownloadCoreService::NonMaliciousDownloadCountAllProfiles()); |
1070 else | 1036 else |
1071 EXPECT_EQ(0, DownloadCoreService::NonMaliciousDownloadCountAllProfiles()); | 1037 EXPECT_EQ(0, DownloadCoreService::NonMaliciousDownloadCountAllProfiles()); |
1072 } | 1038 } |
1073 | 1039 |
1074 // Test shutdown with a download in progress in an off-the-record profile. | 1040 // Test shutdown with a download in progress in an off-the-record profile. |
1075 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithDownloadsBrowserTest, | 1041 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithDownloadsBrowserTest, |
1076 TestWithOffTheRecordDownloads) { | 1042 TestWithOffTheRecordDownloads) { |
1077 ASSERT_TRUE(embedded_test_server()->Start()); | 1043 ASSERT_TRUE(embedded_test_server()->Start()); |
1078 Profile* otr_profile = browser()->profile()->GetOffTheRecordProfile(); | 1044 Profile* otr_profile = browser()->profile()->GetOffTheRecordProfile(); |
1079 SetDownloadPathForProfile(otr_profile); | 1045 SetDownloadPathForProfile(otr_profile); |
1080 Browser* otr_browser = CreateBrowser(otr_profile); | 1046 Browser* otr_browser = CreateBrowser(otr_profile); |
1081 { | 1047 { |
1082 RepeatedNotificationObserver close_observer( | 1048 content::RepeatedNotificationObserver close_observer( |
1083 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 1049 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
1084 browser()->window()->Close(); | 1050 browser()->window()->Close(); |
1085 close_observer.Wait(); | 1051 close_observer.Wait(); |
1086 } | 1052 } |
1087 ASSERT_NO_FATAL_FAILURE(CreateStalledDownload(otr_browser)); | 1053 ASSERT_NO_FATAL_FAILURE(CreateStalledDownload(otr_browser)); |
1088 content::TestNavigationObserver navigation_observer( | 1054 content::TestNavigationObserver navigation_observer( |
1089 otr_browser->tab_strip_model()->GetActiveWebContents(), 1); | 1055 otr_browser->tab_strip_model()->GetActiveWebContents(), 1); |
1090 TestBrowserCloseManager::AttemptClose( | 1056 TestBrowserCloseManager::AttemptClose( |
1091 TestBrowserCloseManager::USER_CHOICE_USER_CANCELS_CLOSE); | 1057 TestBrowserCloseManager::USER_CHOICE_USER_CANCELS_CLOSE); |
1092 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 1058 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
1093 navigation_observer.Wait(); | 1059 navigation_observer.Wait(); |
1094 EXPECT_EQ(GURL(chrome::kChromeUIDownloadsURL), | 1060 EXPECT_EQ(GURL(chrome::kChromeUIDownloadsURL), |
1095 otr_browser->tab_strip_model()->GetActiveWebContents()->GetURL()); | 1061 otr_browser->tab_strip_model()->GetActiveWebContents()->GetURL()); |
1096 | 1062 |
1097 RepeatedNotificationObserver close_observer( | 1063 content::RepeatedNotificationObserver close_observer( |
1098 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 1064 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
1099 | 1065 |
1100 TestBrowserCloseManager::AttemptClose( | 1066 TestBrowserCloseManager::AttemptClose( |
1101 TestBrowserCloseManager::USER_CHOICE_USER_ALLOWS_CLOSE); | 1067 TestBrowserCloseManager::USER_CHOICE_USER_ALLOWS_CLOSE); |
1102 close_observer.Wait(); | 1068 close_observer.Wait(); |
1103 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 1069 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
1104 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 1070 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
1105 EXPECT_EQ(0, DownloadCoreService::NonMaliciousDownloadCountAllProfiles()); | 1071 EXPECT_EQ(0, DownloadCoreService::NonMaliciousDownloadCountAllProfiles()); |
1106 } | 1072 } |
1107 | 1073 |
(...skipping 13 matching lines...) Expand all Loading... |
1121 ui_test_utils::NavigateToURL(otr_browser, GURL("about:blank")); | 1087 ui_test_utils::NavigateToURL(otr_browser, GURL("about:blank")); |
1122 navigation_observer.Wait(); | 1088 navigation_observer.Wait(); |
1123 | 1089 |
1124 int num_downloads_blocking = 0; | 1090 int num_downloads_blocking = 0; |
1125 ASSERT_EQ( | 1091 ASSERT_EQ( |
1126 Browser::DOWNLOAD_CLOSE_OK, | 1092 Browser::DOWNLOAD_CLOSE_OK, |
1127 otr_browser->OkToCloseWithInProgressDownloads(&num_downloads_blocking)); | 1093 otr_browser->OkToCloseWithInProgressDownloads(&num_downloads_blocking)); |
1128 ASSERT_EQ(0, num_downloads_blocking); | 1094 ASSERT_EQ(0, num_downloads_blocking); |
1129 | 1095 |
1130 { | 1096 { |
1131 RepeatedNotificationObserver close_observer( | 1097 content::RepeatedNotificationObserver close_observer( |
1132 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 1098 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
1133 otr_browser->window()->Close(); | 1099 otr_browser->window()->Close(); |
1134 close_observer.Wait(); | 1100 close_observer.Wait(); |
1135 } | 1101 } |
1136 | 1102 |
1137 ASSERT_EQ( | 1103 ASSERT_EQ( |
1138 Browser::DOWNLOAD_CLOSE_BROWSER_SHUTDOWN, | 1104 Browser::DOWNLOAD_CLOSE_BROWSER_SHUTDOWN, |
1139 browser()->OkToCloseWithInProgressDownloads(&num_downloads_blocking)); | 1105 browser()->OkToCloseWithInProgressDownloads(&num_downloads_blocking)); |
1140 ASSERT_EQ(1, num_downloads_blocking); | 1106 ASSERT_EQ(1, num_downloads_blocking); |
1141 | 1107 |
1142 { | 1108 { |
1143 RepeatedNotificationObserver close_observer( | 1109 content::RepeatedNotificationObserver close_observer( |
1144 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 1110 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
1145 TestBrowserCloseManager::AttemptClose( | 1111 TestBrowserCloseManager::AttemptClose( |
1146 TestBrowserCloseManager::USER_CHOICE_USER_ALLOWS_CLOSE); | 1112 TestBrowserCloseManager::USER_CHOICE_USER_ALLOWS_CLOSE); |
1147 close_observer.Wait(); | 1113 close_observer.Wait(); |
1148 } | 1114 } |
1149 | 1115 |
1150 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 1116 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
1151 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 1117 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
1152 if (browser_defaults::kBrowserAliveWithNoWindows) | 1118 if (browser_defaults::kBrowserAliveWithNoWindows) |
1153 EXPECT_EQ(1, DownloadCoreService::NonMaliciousDownloadCountAllProfiles()); | 1119 EXPECT_EQ(1, DownloadCoreService::NonMaliciousDownloadCountAllProfiles()); |
(...skipping 17 matching lines...) Expand all Loading... |
1171 Profile::CreateProfile(path, NULL, Profile::CREATE_MODE_SYNCHRONOUS); | 1137 Profile::CreateProfile(path, NULL, Profile::CREATE_MODE_SYNCHRONOUS); |
1172 } | 1138 } |
1173 profile_manager->RegisterTestingProfile(other_profile, true, false); | 1139 profile_manager->RegisterTestingProfile(other_profile, true, false); |
1174 Browser* other_profile_browser = CreateBrowser(other_profile); | 1140 Browser* other_profile_browser = CreateBrowser(other_profile); |
1175 | 1141 |
1176 ASSERT_TRUE(embedded_test_server()->Start()); | 1142 ASSERT_TRUE(embedded_test_server()->Start()); |
1177 SetDownloadPathForProfile(browser()->profile()); | 1143 SetDownloadPathForProfile(browser()->profile()); |
1178 SetDownloadPathForProfile(other_profile); | 1144 SetDownloadPathForProfile(other_profile); |
1179 ASSERT_NO_FATAL_FAILURE(CreateStalledDownload(browser())); | 1145 ASSERT_NO_FATAL_FAILURE(CreateStalledDownload(browser())); |
1180 { | 1146 { |
1181 RepeatedNotificationObserver close_observer( | 1147 content::RepeatedNotificationObserver close_observer( |
1182 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 1148 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
1183 browser()->window()->Close(); | 1149 browser()->window()->Close(); |
1184 close_observer.Wait(); | 1150 close_observer.Wait(); |
1185 } | 1151 } |
1186 | 1152 |
1187 // When the shutdown is cancelled, the downloads page should be opened in a | 1153 // When the shutdown is cancelled, the downloads page should be opened in a |
1188 // browser for that profile. Because there are no browsers for that profile, a | 1154 // browser for that profile. Because there are no browsers for that profile, a |
1189 // new browser should be opened. | 1155 // new browser should be opened. |
1190 ui_test_utils::BrowserAddedObserver new_browser_observer; | 1156 ui_test_utils::BrowserAddedObserver new_browser_observer; |
1191 TestBrowserCloseManager::AttemptClose( | 1157 TestBrowserCloseManager::AttemptClose( |
1192 TestBrowserCloseManager::USER_CHOICE_USER_CANCELS_CLOSE); | 1158 TestBrowserCloseManager::USER_CHOICE_USER_CANCELS_CLOSE); |
1193 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 1159 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
1194 Browser* opened_browser = new_browser_observer.WaitForSingleNewBrowser(); | 1160 Browser* opened_browser = new_browser_observer.WaitForSingleNewBrowser(); |
1195 EXPECT_EQ( | 1161 EXPECT_EQ( |
1196 GURL(chrome::kChromeUIDownloadsURL), | 1162 GURL(chrome::kChromeUIDownloadsURL), |
1197 opened_browser->tab_strip_model()->GetActiveWebContents()->GetURL()); | 1163 opened_browser->tab_strip_model()->GetActiveWebContents()->GetURL()); |
1198 EXPECT_EQ(GURL("about:blank"), | 1164 EXPECT_EQ(GURL("about:blank"), |
1199 other_profile_browser->tab_strip_model()->GetActiveWebContents() | 1165 other_profile_browser->tab_strip_model()->GetActiveWebContents() |
1200 ->GetURL()); | 1166 ->GetURL()); |
1201 | 1167 |
1202 RepeatedNotificationObserver close_observer( | 1168 content::RepeatedNotificationObserver close_observer( |
1203 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 1169 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
1204 TestBrowserCloseManager::AttemptClose( | 1170 TestBrowserCloseManager::AttemptClose( |
1205 TestBrowserCloseManager::USER_CHOICE_USER_ALLOWS_CLOSE); | 1171 TestBrowserCloseManager::USER_CHOICE_USER_ALLOWS_CLOSE); |
1206 close_observer.Wait(); | 1172 close_observer.Wait(); |
1207 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 1173 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
1208 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 1174 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
1209 if (browser_defaults::kBrowserAliveWithNoWindows) | 1175 if (browser_defaults::kBrowserAliveWithNoWindows) |
1210 EXPECT_EQ(1, DownloadCoreService::NonMaliciousDownloadCountAllProfiles()); | 1176 EXPECT_EQ(1, DownloadCoreService::NonMaliciousDownloadCountAllProfiles()); |
1211 else | 1177 else |
1212 EXPECT_EQ(0, DownloadCoreService::NonMaliciousDownloadCountAllProfiles()); | 1178 EXPECT_EQ(0, DownloadCoreService::NonMaliciousDownloadCountAllProfiles()); |
(...skipping 11 matching lines...) Expand all Loading... |
1224 | 1190 |
1225 content::WindowedNotificationObserver cancel_observer( | 1191 content::WindowedNotificationObserver cancel_observer( |
1226 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, | 1192 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, |
1227 content::NotificationService::AllSources()); | 1193 content::NotificationService::AllSources()); |
1228 TestBrowserCloseManager::AttemptClose( | 1194 TestBrowserCloseManager::AttemptClose( |
1229 TestBrowserCloseManager::USER_CHOICE_USER_CANCELS_CLOSE); | 1195 TestBrowserCloseManager::USER_CHOICE_USER_CANCELS_CLOSE); |
1230 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 1196 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
1231 cancel_observer.Wait(); | 1197 cancel_observer.Wait(); |
1232 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 1198 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
1233 | 1199 |
1234 RepeatedNotificationObserver close_observer( | 1200 content::RepeatedNotificationObserver close_observer( |
1235 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 1201 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
1236 TestBrowserCloseManager::AttemptClose( | 1202 TestBrowserCloseManager::AttemptClose( |
1237 TestBrowserCloseManager::USER_CHOICE_USER_ALLOWS_CLOSE); | 1203 TestBrowserCloseManager::USER_CHOICE_USER_ALLOWS_CLOSE); |
1238 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 1204 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
1239 close_observer.Wait(); | 1205 close_observer.Wait(); |
1240 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 1206 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
1241 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 1207 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
1242 } | 1208 } |
1243 | 1209 |
1244 #endif // defined(OS_MACOSX) | 1210 #endif // defined(OS_MACOSX) |
(...skipping 25 matching lines...) Expand all Loading... |
1270 | 1236 |
1271 // Check that background mode is suspended when closing all browsers unless we | 1237 // Check that background mode is suspended when closing all browsers unless we |
1272 // are quitting and that background mode is resumed when a new browser window is | 1238 // are quitting and that background mode is resumed when a new browser window is |
1273 // opened. | 1239 // opened. |
1274 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest, | 1240 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest, |
1275 CloseAllBrowsersWithBackgroundMode) { | 1241 CloseAllBrowsersWithBackgroundMode) { |
1276 EXPECT_FALSE(IsBackgroundModeSuspended()); | 1242 EXPECT_FALSE(IsBackgroundModeSuspended()); |
1277 std::unique_ptr<ScopedKeepAlive> tmp_keep_alive; | 1243 std::unique_ptr<ScopedKeepAlive> tmp_keep_alive; |
1278 Profile* profile = browser()->profile(); | 1244 Profile* profile = browser()->profile(); |
1279 { | 1245 { |
1280 RepeatedNotificationObserver close_observer( | 1246 content::RepeatedNotificationObserver close_observer( |
1281 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 1247 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
1282 tmp_keep_alive.reset(new ScopedKeepAlive(KeepAliveOrigin::PANEL_VIEW, | 1248 tmp_keep_alive.reset(new ScopedKeepAlive(KeepAliveOrigin::PANEL_VIEW, |
1283 KeepAliveRestartOption::DISABLED)); | 1249 KeepAliveRestartOption::DISABLED)); |
1284 chrome::CloseAllBrowsers(); | 1250 chrome::CloseAllBrowsers(); |
1285 close_observer.Wait(); | 1251 close_observer.Wait(); |
1286 } | 1252 } |
1287 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 1253 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
1288 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 1254 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
1289 EXPECT_TRUE(IsBackgroundModeSuspended()); | 1255 EXPECT_TRUE(IsBackgroundModeSuspended()); |
1290 | 1256 |
1291 // Background mode should be resumed when a new browser window is opened. | 1257 // Background mode should be resumed when a new browser window is opened. |
1292 ui_test_utils::BrowserAddedObserver new_browser_observer; | 1258 ui_test_utils::BrowserAddedObserver new_browser_observer; |
1293 chrome::NewEmptyWindow(profile); | 1259 chrome::NewEmptyWindow(profile); |
1294 new_browser_observer.WaitForSingleNewBrowser(); | 1260 new_browser_observer.WaitForSingleNewBrowser(); |
1295 tmp_keep_alive.reset(); | 1261 tmp_keep_alive.reset(); |
1296 EXPECT_FALSE(IsBackgroundModeSuspended()); | 1262 EXPECT_FALSE(IsBackgroundModeSuspended()); |
1297 RepeatedNotificationObserver close_observer( | 1263 content::RepeatedNotificationObserver close_observer( |
1298 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 1264 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
1299 | 1265 |
1300 // Background mode should not be suspended when quitting. | 1266 // Background mode should not be suspended when quitting. |
1301 chrome::CloseAllBrowsersAndQuit(); | 1267 chrome::CloseAllBrowsersAndQuit(); |
1302 close_observer.Wait(); | 1268 close_observer.Wait(); |
1303 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 1269 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
1304 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 1270 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
1305 EXPECT_FALSE(IsBackgroundModeSuspended()); | 1271 EXPECT_FALSE(IsBackgroundModeSuspended()); |
1306 } | 1272 } |
1307 | 1273 |
1308 // Check that closing the last browser window individually does not affect | 1274 // Check that closing the last browser window individually does not affect |
1309 // background mode. | 1275 // background mode. |
1310 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest, | 1276 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest, |
1311 DISABLED_CloseSingleBrowserWithBackgroundMode) { | 1277 DISABLED_CloseSingleBrowserWithBackgroundMode) { |
1312 RepeatedNotificationObserver close_observer( | 1278 content::RepeatedNotificationObserver close_observer( |
1313 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 1279 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
1314 EXPECT_FALSE(IsBackgroundModeSuspended()); | 1280 EXPECT_FALSE(IsBackgroundModeSuspended()); |
1315 browser()->window()->Close(); | 1281 browser()->window()->Close(); |
1316 close_observer.Wait(); | 1282 close_observer.Wait(); |
1317 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 1283 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
1318 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 1284 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
1319 EXPECT_FALSE(IsBackgroundModeSuspended()); | 1285 EXPECT_FALSE(IsBackgroundModeSuspended()); |
1320 } | 1286 } |
1321 | 1287 |
1322 // Check that closing all browsers with no browser windows open suspends | 1288 // Check that closing all browsers with no browser windows open suspends |
1323 // background mode but does not cause Chrome to quit. | 1289 // background mode but does not cause Chrome to quit. |
1324 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest, | 1290 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest, |
1325 DISABLED_CloseAllBrowsersWithNoOpenBrowsersWithBackground
Mode) { | 1291 DISABLED_CloseAllBrowsersWithNoOpenBrowsersWithBackground
Mode) { |
1326 RepeatedNotificationObserver close_observer( | 1292 content::RepeatedNotificationObserver close_observer( |
1327 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 1293 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
1328 EXPECT_FALSE(IsBackgroundModeSuspended()); | 1294 EXPECT_FALSE(IsBackgroundModeSuspended()); |
1329 ScopedKeepAlive tmp_keep_alive(KeepAliveOrigin::PANEL_VIEW, | 1295 ScopedKeepAlive tmp_keep_alive(KeepAliveOrigin::PANEL_VIEW, |
1330 KeepAliveRestartOption::DISABLED); | 1296 KeepAliveRestartOption::DISABLED); |
1331 browser()->window()->Close(); | 1297 browser()->window()->Close(); |
1332 close_observer.Wait(); | 1298 close_observer.Wait(); |
1333 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 1299 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
1334 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 1300 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
1335 EXPECT_FALSE(IsBackgroundModeSuspended()); | 1301 EXPECT_FALSE(IsBackgroundModeSuspended()); |
1336 | 1302 |
1337 chrome::CloseAllBrowsers(); | 1303 chrome::CloseAllBrowsers(); |
1338 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 1304 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
1339 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 1305 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
1340 EXPECT_TRUE(IsBackgroundModeSuspended()); | 1306 EXPECT_TRUE(IsBackgroundModeSuspended()); |
1341 } | 1307 } |
1342 | 1308 |
1343 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerWithBackgroundModeBrowserTest, | 1309 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerWithBackgroundModeBrowserTest, |
1344 BrowserCloseManagerWithBackgroundModeBrowserTest, | 1310 BrowserCloseManagerWithBackgroundModeBrowserTest, |
1345 testing::Bool()); | 1311 testing::Bool()); |
OLD | NEW |