Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/test/base/in_process_browser_test.h" | 5 #include "chrome/test/base/in_process_browser_test.h" |
| 6 | 6 |
| 7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
| 8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 451 QuitBrowsers(); | 451 QuitBrowsers(); |
| 452 // All BrowserLists should be empty at this point. | 452 // All BrowserLists should be empty at this point. |
| 453 for (chrome::HostDesktopType t = chrome::HOST_DESKTOP_TYPE_FIRST; | 453 for (chrome::HostDesktopType t = chrome::HOST_DESKTOP_TYPE_FIRST; |
| 454 t < chrome::HOST_DESKTOP_TYPE_COUNT; | 454 t < chrome::HOST_DESKTOP_TYPE_COUNT; |
| 455 t = static_cast<chrome::HostDesktopType>(t + 1)) { | 455 t = static_cast<chrome::HostDesktopType>(t + 1)) { |
| 456 CHECK(BrowserList::GetInstance(t)->empty()) << t; | 456 CHECK(BrowserList::GetInstance(t)->empty()) << t; |
| 457 } | 457 } |
| 458 } | 458 } |
| 459 | 459 |
| 460 void InProcessBrowserTest::QuitBrowsers() { | 460 void InProcessBrowserTest::QuitBrowsers() { |
| 461 if (chrome::GetTotalBrowserCount() == 0) | 461 if (chrome::GetTotalBrowserCount() == 0) { |
| 462 chrome::NotifyAppTerminating(); | |
|
sky
2013/09/05 15:33:45
Might this result in sending out notification twic
Jun Mukai
2013/09/05 18:46:56
No, as far as I see.
Usually app-terminating will
| |
| 462 return; | 463 return; |
| 464 } | |
| 463 | 465 |
| 464 // Invoke AttemptExit on a running message loop. | 466 // Invoke AttemptExit on a running message loop. |
| 465 // AttemptExit exits the message loop after everything has been | 467 // AttemptExit exits the message loop after everything has been |
| 466 // shut down properly. | 468 // shut down properly. |
| 467 base::MessageLoopForUI::current()->PostTask(FROM_HERE, | 469 base::MessageLoopForUI::current()->PostTask(FROM_HERE, |
| 468 base::Bind(&chrome::AttemptExit)); | 470 base::Bind(&chrome::AttemptExit)); |
| 469 content::RunMessageLoop(); | 471 content::RunMessageLoop(); |
| 470 | 472 |
| 471 #if defined(OS_MACOSX) | 473 #if defined(OS_MACOSX) |
| 472 // chrome::AttemptExit() will attempt to close all browsers by deleting | 474 // chrome::AttemptExit() will attempt to close all browsers by deleting |
| 473 // their tab contents. The last tab contents being removed triggers closing of | 475 // their tab contents. The last tab contents being removed triggers closing of |
| 474 // the browser window. | 476 // the browser window. |
| 475 // | 477 // |
| 476 // On the Mac, this eventually reaches | 478 // On the Mac, this eventually reaches |
| 477 // -[BrowserWindowController windowWillClose:], which will post a deferred | 479 // -[BrowserWindowController windowWillClose:], which will post a deferred |
| 478 // -autorelease on itself to ultimately destroy the Browser object. The line | 480 // -autorelease on itself to ultimately destroy the Browser object. The line |
| 479 // below is necessary to pump these pending messages to ensure all Browsers | 481 // below is necessary to pump these pending messages to ensure all Browsers |
| 480 // get deleted. | 482 // get deleted. |
| 481 content::RunAllPendingInMessageLoop(); | 483 content::RunAllPendingInMessageLoop(); |
| 482 delete autorelease_pool_; | 484 delete autorelease_pool_; |
| 483 autorelease_pool_ = NULL; | 485 autorelease_pool_ = NULL; |
| 484 #endif | 486 #endif |
| 485 } | 487 } |
| OLD | NEW |