| Index: chrome/browser/ui/panels/panel_browsertest.cc
|
| diff --git a/chrome/browser/ui/panels/panel_browsertest.cc b/chrome/browser/ui/panels/panel_browsertest.cc
|
| index 2f6f2a962a85e5d874c5c1639b509a0521d58820..777d717cc3745392e46ac52a8cfbc2dae800b491 100644
|
| --- a/chrome/browser/ui/panels/panel_browsertest.cc
|
| +++ b/chrome/browser/ui/panels/panel_browsertest.cc
|
| @@ -3,6 +3,7 @@
|
| // found in the LICENSE file.
|
|
|
| #include "base/command_line.h"
|
| +#include "base/mac/scoped_nsautorelease_pool.h"
|
| #include "chrome/browser/extensions/extension_service.h"
|
| #include "chrome/browser/prefs/pref_service.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| @@ -45,6 +46,14 @@ class PanelBrowserTest : public InProcessBrowserTest {
|
|
|
| protected:
|
| Panel* CreatePanel(const std::string& name, const gfx::Rect& bounds) {
|
| + // 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 want to release it as soon as
|
| + // possible. In real Chrome, this is done by message pump.
|
| + // On non-Mac platform, this is an empty class.
|
| + base::mac::ScopedNSAutoreleasePool autorelease_pool;
|
| +
|
| Browser* panel_browser = Browser::CreateForApp(Browser::TYPE_PANEL,
|
| name,
|
| bounds,
|
| @@ -62,6 +71,19 @@ class PanelBrowserTest : public InProcessBrowserTest {
|
| return panel;
|
| }
|
|
|
| + 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());
|
| + }
|
| +
|
| // Creates a testing extension.
|
| scoped_refptr<Extension> CreateExtension(const FilePath::StringType& path) {
|
| #if defined(OS_WIN)
|
| @@ -281,7 +303,8 @@ IN_PROC_BROWSER_TEST_F(PanelBrowserTest, CreatePanel) {
|
| EXPECT_GT(bounds.width(), 0);
|
| EXPECT_GT(bounds.height(), 0);
|
|
|
| - panel->Close();
|
| + CloseWindowAndWait(panel->browser());
|
| +
|
| EXPECT_EQ(0, panel_manager->num_panels());
|
| }
|
|
|
| @@ -293,14 +316,7 @@ IN_PROC_BROWSER_TEST_F(PanelBrowserTest, FindBar) {
|
| panel->Close();
|
| }
|
|
|
| -// TODO(jianli): Investigate and enable it for Mac.
|
| -#ifdef OS_MACOSX
|
| -#define MAYBE_CreatePanelOnOverflow DISABLED_CreatePanelOnOverflow
|
| -#else
|
| -#define MAYBE_CreatePanelOnOverflow CreatePanelOnOverflow
|
| -#endif
|
| -
|
| -IN_PROC_BROWSER_TEST_F(PanelBrowserTest, MAYBE_CreatePanelOnOverflow) {
|
| +IN_PROC_BROWSER_TEST_F(PanelBrowserTest, CreatePanelOnOverflow) {
|
| TestCreatePanelOnOverflow();
|
| }
|
|
|
|
|