Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(99)

Side by Side Diff: chrome/browser/lifetime/browser_close_manager_browsertest.cc

Issue 2798143004: Fix for URL opening code (Closed)
Patch Set: Added new files for added tests. Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
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());
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698