Chromium Code Reviews| Index: chrome/browser/ui/panels/panel_app_browsertest.cc |
| diff --git a/chrome/browser/ui/panels/panel_app_browsertest.cc b/chrome/browser/ui/panels/panel_app_browsertest.cc |
| index 85bc6642878debfb067ef2c40cb86e267989f9a4..d6c86dcd5c747eea133ba897a64fde89b1649869 100644 |
| --- a/chrome/browser/ui/panels/panel_app_browsertest.cc |
| +++ b/chrome/browser/ui/panels/panel_app_browsertest.cc |
| @@ -5,6 +5,7 @@ |
| #include "base/command_line.h" |
| #include "base/file_path.h" |
| +#include "base/mac/scoped_nsautorelease_pool.h" |
| #include "chrome/browser/extensions/extension_browsertest.h" |
| #include "chrome/browser/extensions/extension_service.h" |
| #include "chrome/browser/profiles/profile.h" |
| @@ -15,6 +16,7 @@ |
| #include "chrome/browser/ui/panels/panel_manager.h" |
| #include "chrome/common/chrome_switches.h" |
| #include "chrome/test/base/in_process_browser_test.h" |
| +#include "chrome/test/base/ui_test_utils.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| class PanelAppBrowserTest : public ExtensionBrowserTest { |
| @@ -25,18 +27,45 @@ class PanelAppBrowserTest : public ExtensionBrowserTest { |
| } |
| void LoadAndLaunchExtension(const char* name) { |
| - ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII(name))); |
| + // Opening panels on a Mac causes NSWindowController of the Panel window |
| + // to be autoreleased. We need a pool drained after it's done so the test |
| + // can close correctly. The NSWindowController of the Panel window controls |
| + // lifetime of the Browser object so we wan to release it as soon as |
|
jennb
2011/08/19 21:46:12
typo: wan
Dmitry Titov
2011/08/22 18:34:56
Done.
|
| + // possible. In real Chrome, this is done by message pump. |
| + // On non-Mac platform, this is an empty class. |
| + base::mac::ScopedNSAutoreleasePool autorelease_pool; |
| + |
| + EXPECT_TRUE(LoadExtension(test_data_dir_.AppendASCII(name))); |
|
Avi (use Gerrit)
2011/08/19 22:05:01
Curious why you changed these to EXPECT. Is it wor
Dmitry Titov
2011/08/22 18:34:56
It is a helper function, and it returns void. ASSE
|
| ExtensionService* service = browser()->profile()->GetExtensionService(); |
| const Extension* extension = service->GetExtensionById( |
| last_loaded_extension_id_, false); |
| - ASSERT_TRUE(extension); |
| + EXPECT_TRUE(extension); |
| + |
| + size_t browser_count = BrowserList::size(); |
| Browser::OpenApplication( |
| browser()->profile(), |
| extension, |
| - extension_misc::LAUNCH_PANEL, // Override manifest, open in panel. |
| + // Overriding manifest to open in a panel. |
| + extension_misc::LAUNCH_PANEL, |
| NEW_WINDOW); |
| + |
| + // Now we have a new browser instance. |
| + EXPECT_EQ(browser_count + 1, BrowserList::size()); |
| + } |
| + |
| + void CloseWindowAndWait(Browser* browser) { |
| + // Closing a browser window may involve several async tasks. Need to use |
| + // message pump and wait for the notification. |
| + size_t browser_count = BrowserList::size(); |
| + ui_test_utils::WindowedNotificationObserver signal( |
| + chrome::NOTIFICATION_BROWSER_CLOSED, |
| + Source<Browser>(browser)); |
| + browser->CloseWindow(); |
| + signal.Wait(); |
| + // Now we have one less browser instance. |
| + EXPECT_EQ(browser_count - 1, BrowserList::size()); |
| } |
| }; |
| @@ -46,7 +75,7 @@ IN_PROC_BROWSER_TEST_F(PanelAppBrowserTest, OpenAppInPanel) { |
| // No Panels initially. |
| PanelManager* panel_manager = PanelManager::GetInstance(); |
| - EXPECT_EQ(0, panel_manager->num_panels()); // No panels initially. |
| + ASSERT_EQ(0, panel_manager->num_panels()); // No panels initially. |
| LoadAndLaunchExtension("app_with_panel_container"); |
| @@ -67,6 +96,8 @@ IN_PROC_BROWSER_TEST_F(PanelAppBrowserTest, OpenAppInPanel) { |
| // Now also check that PanelManager has one new Panel under management. |
| EXPECT_EQ(1, panel_manager->num_panels()); |
| - new_browser->CloseWindow(); |
| + CloseWindowAndWait(new_browser); |
| + |
| EXPECT_EQ(0, panel_manager->num_panels()); |
| + EXPECT_EQ(1u, BrowserList::size()); |
| } |