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

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

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

Powered by Google App Engine
This is Rietveld 408576698