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

Side by Side Diff: chrome/browser/ui/panels/panel_app_browsertest.cc

Issue 7694014: Reland: Implement correct Panel closing sequence for Mac. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 4 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 | Annotate | Revision Log
OLDNEW
1 1
2 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be 3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file. 4 // found in the LICENSE file.
5 5
6 #include "base/command_line.h" 6 #include "base/command_line.h"
7 #include "base/file_path.h" 7 #include "base/file_path.h"
8 #include "base/mac/scoped_nsautorelease_pool.h"
8 #include "chrome/browser/extensions/extension_browsertest.h" 9 #include "chrome/browser/extensions/extension_browsertest.h"
9 #include "chrome/browser/extensions/extension_service.h" 10 #include "chrome/browser/extensions/extension_service.h"
10 #include "chrome/browser/profiles/profile.h" 11 #include "chrome/browser/profiles/profile.h"
11 #include "chrome/browser/ui/browser.h" 12 #include "chrome/browser/ui/browser.h"
12 #include "chrome/browser/ui/browser_init.h" 13 #include "chrome/browser/ui/browser_init.h"
13 #include "chrome/browser/ui/browser_list.h" 14 #include "chrome/browser/ui/browser_list.h"
14 #include "chrome/browser/ui/browser_window.h" 15 #include "chrome/browser/ui/browser_window.h"
15 #include "chrome/browser/ui/panels/panel_manager.h" 16 #include "chrome/browser/ui/panels/panel_manager.h"
16 #include "chrome/common/chrome_switches.h" 17 #include "chrome/common/chrome_switches.h"
17 #include "chrome/test/base/in_process_browser_test.h" 18 #include "chrome/test/base/in_process_browser_test.h"
19 #include "chrome/test/base/ui_test_utils.h"
18 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
19 21
20 class PanelAppBrowserTest : public ExtensionBrowserTest { 22 class PanelAppBrowserTest : public ExtensionBrowserTest {
21 public: 23 public:
22 virtual void SetUpCommandLine(CommandLine* command_line) { 24 virtual void SetUpCommandLine(CommandLine* command_line) {
23 ExtensionBrowserTest::SetUpCommandLine(command_line); 25 ExtensionBrowserTest::SetUpCommandLine(command_line);
24 command_line->AppendSwitch(switches::kEnablePanels); 26 command_line->AppendSwitch(switches::kEnablePanels);
25 } 27 }
26 28
27 void LoadAndLaunchExtension(const char* name) { 29 void LoadAndLaunchExtension(const char* name) {
28 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII(name))); 30 // Opening panels on a Mac causes NSWindowController of the Panel window
31 // to be autoreleased. We need a pool drained after it's done so the test
32 // can close correctly. The NSWindowController of the Panel window controls
33 // 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.
34 // possible. In real Chrome, this is done by message pump.
35 // On non-Mac platform, this is an empty class.
36 base::mac::ScopedNSAutoreleasePool autorelease_pool;
37
38 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
29 39
30 ExtensionService* service = browser()->profile()->GetExtensionService(); 40 ExtensionService* service = browser()->profile()->GetExtensionService();
31 const Extension* extension = service->GetExtensionById( 41 const Extension* extension = service->GetExtensionById(
32 last_loaded_extension_id_, false); 42 last_loaded_extension_id_, false);
33 ASSERT_TRUE(extension); 43 EXPECT_TRUE(extension);
44
45 size_t browser_count = BrowserList::size();
34 46
35 Browser::OpenApplication( 47 Browser::OpenApplication(
36 browser()->profile(), 48 browser()->profile(),
37 extension, 49 extension,
38 extension_misc::LAUNCH_PANEL, // Override manifest, open in panel. 50 // Overriding manifest to open in a panel.
51 extension_misc::LAUNCH_PANEL,
39 NEW_WINDOW); 52 NEW_WINDOW);
53
54 // Now we have a new browser instance.
55 EXPECT_EQ(browser_count + 1, BrowserList::size());
56 }
57
58 void CloseWindowAndWait(Browser* browser) {
59 // Closing a browser window may involve several async tasks. Need to use
60 // message pump and wait for the notification.
61 size_t browser_count = BrowserList::size();
62 ui_test_utils::WindowedNotificationObserver signal(
63 chrome::NOTIFICATION_BROWSER_CLOSED,
64 Source<Browser>(browser));
65 browser->CloseWindow();
66 signal.Wait();
67 // Now we have one less browser instance.
68 EXPECT_EQ(browser_count - 1, BrowserList::size());
40 } 69 }
41 }; 70 };
42 71
43 IN_PROC_BROWSER_TEST_F(PanelAppBrowserTest, OpenAppInPanel) { 72 IN_PROC_BROWSER_TEST_F(PanelAppBrowserTest, OpenAppInPanel) {
44 // Start with one browser, new Panel will create another. 73 // Start with one browser, new Panel will create another.
45 ASSERT_EQ(1u, BrowserList::size()); 74 ASSERT_EQ(1u, BrowserList::size());
46 75
47 // No Panels initially. 76 // No Panels initially.
48 PanelManager* panel_manager = PanelManager::GetInstance(); 77 PanelManager* panel_manager = PanelManager::GetInstance();
49 EXPECT_EQ(0, panel_manager->num_panels()); // No panels initially. 78 ASSERT_EQ(0, panel_manager->num_panels()); // No panels initially.
50 79
51 LoadAndLaunchExtension("app_with_panel_container"); 80 LoadAndLaunchExtension("app_with_panel_container");
52 81
53 // The launch should have created a new browser, so there should be 2 now. 82 // The launch should have created a new browser, so there should be 2 now.
54 ASSERT_EQ(2u, BrowserList::size()); 83 ASSERT_EQ(2u, BrowserList::size());
55 84
56 // The new browser is the last one. 85 // The new browser is the last one.
57 BrowserList::const_reverse_iterator reverse_iterator(BrowserList::end()); 86 BrowserList::const_reverse_iterator reverse_iterator(BrowserList::end());
58 Browser* new_browser = *(reverse_iterator++); 87 Browser* new_browser = *(reverse_iterator++);
59 88
60 ASSERT_TRUE(new_browser); 89 ASSERT_TRUE(new_browser);
61 ASSERT_TRUE(new_browser != browser()); 90 ASSERT_TRUE(new_browser != browser());
62 91
63 // Expect an app in a panel window. 92 // Expect an app in a panel window.
64 EXPECT_TRUE(new_browser->is_app()); 93 EXPECT_TRUE(new_browser->is_app());
65 EXPECT_TRUE(new_browser->is_type_panel()); 94 EXPECT_TRUE(new_browser->is_type_panel());
66 95
67 // Now also check that PanelManager has one new Panel under management. 96 // Now also check that PanelManager has one new Panel under management.
68 EXPECT_EQ(1, panel_manager->num_panels()); 97 EXPECT_EQ(1, panel_manager->num_panels());
69 98
70 new_browser->CloseWindow(); 99 CloseWindowAndWait(new_browser);
100
71 EXPECT_EQ(0, panel_manager->num_panels()); 101 EXPECT_EQ(0, panel_manager->num_panels());
102 EXPECT_EQ(1u, BrowserList::size());
72 } 103 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698