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

Side by Side Diff: chrome/browser/extensions/window_open_apitest.cc

Issue 8387010: Close all panels originated by the extension when extension unloads. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Change ASSERT_EQ to EXPECT_EQ. Created 9 years, 1 month 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
« no previous file with comments | « no previous file | chrome/browser/ui/browser.cc » ('j') | chrome/browser/ui/browser.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "base/command_line.h" 5 #include "base/command_line.h"
6 #include "base/memory/scoped_vector.h"
6 #include "chrome/browser/extensions/extension_apitest.h" 7 #include "chrome/browser/extensions/extension_apitest.h"
8 #include "chrome/browser/extensions/extension_test_message_listener.h"
7 #include "chrome/browser/ui/browser.h" 9 #include "chrome/browser/ui/browser.h"
8 #include "chrome/browser/ui/browser_list.h" 10 #include "chrome/browser/ui/browser_list.h"
9 #include "chrome/common/chrome_switches.h" 11 #include "chrome/common/chrome_switches.h"
12 #include "chrome/common/extensions/extension.h"
10 #include "chrome/test/base/ui_test_utils.h" 13 #include "chrome/test/base/ui_test_utils.h"
11 #include "net/base/mock_host_resolver.h" 14 #include "net/base/mock_host_resolver.h"
12 15
13 // Disabled, http://crbug.com/64899. 16 // Disabled, http://crbug.com/64899.
14 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, DISABLED_WindowOpen) { 17 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, DISABLED_WindowOpen) {
15 CommandLine::ForCurrentProcess()->AppendSwitch( 18 CommandLine::ForCurrentProcess()->AppendSwitch(
16 switches::kEnableExperimentalExtensionApis); 19 switches::kEnableExperimentalExtensionApis);
17 20
18 ResultCatcher catcher; 21 ResultCatcher catcher;
19 ASSERT_TRUE(LoadExtensionIncognito(test_data_dir_ 22 ASSERT_TRUE(LoadExtensionIncognito(test_data_dir_
20 .AppendASCII("window_open").AppendASCII("spanning"))); 23 .AppendASCII("window_open").AppendASCII("spanning")));
21 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 24 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
22 } 25 }
23 26
24 void WaitForTabsAndPopups(Browser* browser, int num_tabs, int num_popups) { 27 void WaitForTabsAndPopups(Browser* browser,
28 int num_tabs,
29 int num_popups,
30 int num_panels) {
25 // We start with one tab and one browser already open. 31 // We start with one tab and one browser already open.
26 ++num_tabs; 32 ++num_tabs;
27 size_t num_browsers = static_cast<size_t>(num_popups) + 1; 33 size_t num_browsers = static_cast<size_t>(num_popups + num_panels) + 1;
28 34
29 const base::TimeDelta kWaitTime = base::TimeDelta::FromSeconds(15); 35 const base::TimeDelta kWaitTime = base::TimeDelta::FromSeconds(15);
30 base::TimeTicks end_time = base::TimeTicks::Now() + kWaitTime; 36 base::TimeTicks end_time = base::TimeTicks::Now() + kWaitTime;
31 while (base::TimeTicks::Now() < end_time) { 37 while (base::TimeTicks::Now() < end_time) {
32 if (BrowserList::GetBrowserCount(browser->profile()) >= num_browsers && 38 if (BrowserList::GetBrowserCount(browser->profile()) == num_browsers &&
jennb 2011/10/28 21:12:27 Better to leave as >= for both of these. It's a co
prasadt 2011/10/28 21:53:28 On 2011/10/28 21:12:27, jennb wrote: > Better to l
33 browser->tab_count() >= num_tabs) 39 browser->tab_count() == num_tabs)
34 break; 40 break;
35 41
36 MessageLoopForUI::current()->RunAllPending(); 42 MessageLoopForUI::current()->RunAllPending();
37 } 43 }
38 44
39 EXPECT_EQ(num_browsers, BrowserList::GetBrowserCount(browser->profile())); 45 EXPECT_EQ(num_browsers, BrowserList::GetBrowserCount(browser->profile()));
40 EXPECT_EQ(num_tabs, browser->tab_count()); 46 EXPECT_EQ(num_tabs, browser->tab_count());
41 47
48 int num_popups_seen = 0;
49 int num_panels_seen = 0;
42 for (BrowserList::const_iterator iter = BrowserList::begin(); 50 for (BrowserList::const_iterator iter = BrowserList::begin();
43 iter != BrowserList::end(); ++iter) { 51 iter != BrowserList::end(); ++iter) {
44 if (*iter == browser) 52 if (*iter == browser)
45 continue; 53 continue;
46 54
47 // Check for TYPE_POPUP or TYPE_PANEL. 55 // Check for TYPE_POPUP or TYPE_PANEL.
48 EXPECT_TRUE((*iter)->is_type_popup() || (*iter)->is_type_panel()); 56 EXPECT_TRUE((*iter)->is_type_popup() || (*iter)->is_type_panel());
57 if ((*iter)->is_type_popup())
58 ++num_popups_seen;
59 else
60 ++num_panels_seen;
49 } 61 }
62 EXPECT_EQ(num_popups, num_popups_seen);
63 EXPECT_EQ(num_panels, num_panels_seen);
50 } 64 }
51 65
52 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, BrowserIsApp) { 66 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, BrowserIsApp) {
53 host_resolver()->AddRule("a.com", "127.0.0.1"); 67 host_resolver()->AddRule("a.com", "127.0.0.1");
54 ASSERT_TRUE(StartTestServer()); 68 ASSERT_TRUE(StartTestServer());
55 ASSERT_TRUE(LoadExtension( 69 ASSERT_TRUE(LoadExtension(
56 test_data_dir_.AppendASCII("window_open").AppendASCII("browser_is_app"))); 70 test_data_dir_.AppendASCII("window_open").AppendASCII("browser_is_app")));
57 71
58 WaitForTabsAndPopups(browser(), 0, 2); 72 WaitForTabsAndPopups(browser(), 0, 2, 0);
59 73
60 for (BrowserList::const_iterator iter = BrowserList::begin(); 74 for (BrowserList::const_iterator iter = BrowserList::begin();
61 iter != BrowserList::end(); ++iter) { 75 iter != BrowserList::end(); ++iter) {
62 if (*iter == browser()) 76 if (*iter == browser())
63 ASSERT_FALSE((*iter)->is_app()); 77 ASSERT_FALSE((*iter)->is_app());
64 else 78 else
65 ASSERT_TRUE((*iter)->is_app()); 79 ASSERT_TRUE((*iter)->is_app());
66 } 80 }
67 } 81 }
68 82
69 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WindowOpenPopupDefault) { 83 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WindowOpenPopupDefault) {
70 ASSERT_TRUE(StartTestServer()); 84 ASSERT_TRUE(StartTestServer());
71 ASSERT_TRUE(LoadExtension( 85 ASSERT_TRUE(LoadExtension(
72 test_data_dir_.AppendASCII("window_open").AppendASCII("popup"))); 86 test_data_dir_.AppendASCII("window_open").AppendASCII("popup")));
73 87
74 const int num_tabs = 1; 88 const int num_tabs = 1;
75 const int num_popups = 0; 89 const int num_popups = 0;
76 WaitForTabsAndPopups(browser(), num_tabs, num_popups); 90 WaitForTabsAndPopups(browser(), num_tabs, num_popups, 0);
77 } 91 }
78 92
79 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WindowOpenPopupLarge) { 93 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WindowOpenPopupLarge) {
80 ASSERT_TRUE(StartTestServer()); 94 ASSERT_TRUE(StartTestServer());
81 ASSERT_TRUE(LoadExtension( 95 ASSERT_TRUE(LoadExtension(
82 test_data_dir_.AppendASCII("window_open").AppendASCII("popup_large"))); 96 test_data_dir_.AppendASCII("window_open").AppendASCII("popup_large")));
83 97
84 #if defined(OS_CHROMEOS) 98 #if defined(OS_CHROMEOS)
85 // On ChromeOS this should open a new tab. 99 // On ChromeOS this should open a new tab.
86 const int num_tabs = 1; 100 const int num_tabs = 1;
87 const int num_popups = 0; 101 const int num_popups = 0;
88 #else 102 #else
89 // On other systems this should open a new popup window. 103 // On other systems this should open a new popup window.
90 const int num_tabs = 0; 104 const int num_tabs = 0;
91 const int num_popups = 1; 105 const int num_popups = 1;
92 #endif 106 #endif
93 WaitForTabsAndPopups(browser(), num_tabs, num_popups); 107 WaitForTabsAndPopups(browser(), num_tabs, num_popups, 0);
94 } 108 }
95 109
96 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WindowOpenPopupSmall) { 110 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WindowOpenPopupSmall) {
97 ASSERT_TRUE(StartTestServer()); 111 ASSERT_TRUE(StartTestServer());
98 ASSERT_TRUE(LoadExtension( 112 ASSERT_TRUE(LoadExtension(
99 test_data_dir_.AppendASCII("window_open").AppendASCII("popup_small"))); 113 test_data_dir_.AppendASCII("window_open").AppendASCII("popup_small")));
100 114
101 // On ChromeOS this should open a new panel (acts like a new popup window). 115 // On ChromeOS this should open a new panel (acts like a new popup window).
102 // On other systems this should open a new popup window. 116 // On other systems this should open a new popup window.
103 const int num_tabs = 0; 117 const int num_tabs = 0;
104 const int num_popups = 1; 118 const int num_popups = 1;
105 WaitForTabsAndPopups(browser(), num_tabs, num_popups); 119 WaitForTabsAndPopups(browser(), num_tabs, num_popups, 0);
106 } 120 }
107 121
108 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, PopupBlockingExtension) { 122 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, PopupBlockingExtension) {
109 host_resolver()->AddRule("*", "127.0.0.1"); 123 host_resolver()->AddRule("*", "127.0.0.1");
110 ASSERT_TRUE(StartTestServer()); 124 ASSERT_TRUE(StartTestServer());
111 125
112 ASSERT_TRUE(LoadExtension( 126 ASSERT_TRUE(LoadExtension(
113 test_data_dir_.AppendASCII("window_open").AppendASCII("popup_blocking") 127 test_data_dir_.AppendASCII("window_open").AppendASCII("popup_blocking")
114 .AppendASCII("extension"))); 128 .AppendASCII("extension")));
115 129
116 WaitForTabsAndPopups(browser(), 5, 3); 130 WaitForTabsAndPopups(browser(), 5, 3, 0);
117 } 131 }
118 132
119 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, PopupBlockingHostedApp) { 133 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, PopupBlockingHostedApp) {
120 host_resolver()->AddRule("*", "127.0.0.1"); 134 host_resolver()->AddRule("*", "127.0.0.1");
121 ASSERT_TRUE(test_server()->Start()); 135 ASSERT_TRUE(test_server()->Start());
122 136
123 ASSERT_TRUE(LoadExtension( 137 ASSERT_TRUE(LoadExtension(
124 test_data_dir_.AppendASCII("window_open").AppendASCII("popup_blocking") 138 test_data_dir_.AppendASCII("window_open").AppendASCII("popup_blocking")
125 .AppendASCII("hosted_app"))); 139 .AppendASCII("hosted_app")));
126 140
(...skipping 12 matching lines...) Expand all
139 .ReplaceComponents(replace_host); 153 .ReplaceComponents(replace_host);
140 GURL open_popup = 154 GURL open_popup =
141 test_server()->GetURL(popup_app_contents_path + "open_popup.html") 155 test_server()->GetURL(popup_app_contents_path + "open_popup.html")
142 .ReplaceComponents(replace_host); 156 .ReplaceComponents(replace_host);
143 157
144 browser()->OpenURL(open_tab, GURL(), NEW_FOREGROUND_TAB, 158 browser()->OpenURL(open_tab, GURL(), NEW_FOREGROUND_TAB,
145 content::PAGE_TRANSITION_TYPED); 159 content::PAGE_TRANSITION_TYPED);
146 browser()->OpenURL(open_popup, GURL(), NEW_FOREGROUND_TAB, 160 browser()->OpenURL(open_popup, GURL(), NEW_FOREGROUND_TAB,
147 content::PAGE_TRANSITION_TYPED); 161 content::PAGE_TRANSITION_TYPED);
148 162
149 WaitForTabsAndPopups(browser(), 3, 1); 163 WaitForTabsAndPopups(browser(), 3, 1, 0);
150 } 164 }
151 165
152 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WindowArgumentsOverflow) { 166 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WindowArgumentsOverflow) {
153 ASSERT_TRUE(RunExtensionTest("window_open/argument_overflow")) << message_; 167 ASSERT_TRUE(RunExtensionTest("window_open/argument_overflow")) << message_;
154 } 168 }
155 169
156 class WindowOpenPanelDisabledTest : public ExtensionApiTest { 170 class WindowOpenPanelDisabledTest : public ExtensionApiTest {
157 virtual void SetUpCommandLine(CommandLine* command_line) { 171 virtual void SetUpCommandLine(CommandLine* command_line) {
158 ExtensionApiTest::SetUpCommandLine(command_line); 172 ExtensionApiTest::SetUpCommandLine(command_line);
159 command_line->AppendSwitch(switches::kDisablePanels); 173 command_line->AppendSwitch(switches::kDisablePanels);
160 } 174 }
161 }; 175 };
162 176
163 IN_PROC_BROWSER_TEST_F(WindowOpenPanelDisabledTest, WindowOpenPanelNotEnabled) { 177 IN_PROC_BROWSER_TEST_F(WindowOpenPanelDisabledTest, WindowOpenPanelNotEnabled) {
164 ASSERT_TRUE(RunExtensionTest("window_open/panel_not_enabled")) << message_; 178 ASSERT_TRUE(RunExtensionTest("window_open/panel_not_enabled")) << message_;
165 } 179 }
166 180
167 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WindowOpenPanel) { 181 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WindowOpenPanel) {
168 ASSERT_TRUE(RunExtensionTest("window_open/panel")) << message_; 182 ASSERT_TRUE(RunExtensionTest("window_open/panel")) << message_;
169 } 183 }
170 184
171 #if defined(OS_MACOSX) || defined(OS_WIN) 185 #if defined(OS_MACOSX) || defined(OS_WIN)
172 // Focus test fails if there is no window manager on Linux. 186 // Focus test fails if there is no window manager on Linux.
173 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WindowOpenFocus) { 187 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WindowOpenFocus) {
174 ASSERT_TRUE(RunExtensionTest("window_open/focus")) << message_; 188 ASSERT_TRUE(RunExtensionTest("window_open/focus")) << message_;
175 } 189 }
176 #endif 190 #endif
177 191
192 IN_PROC_BROWSER_TEST_F(ExtensionApiTest,
193 CloseNonExtensionPanelsOnUninstall) {
194 host_resolver()->AddRule("a.com", "127.0.0.1");
jennb 2011/10/28 21:12:27 Could you add a comment explaining why this is nec
prasadt 2011/10/28 21:53:28 Left over. Removed it. I added it when I was worki
195 ASSERT_TRUE(StartTestServer());
196
197 // Setup listeners to wait on strings we expect the extension pages to send.
198 std::vector<std::string> test_strings;
199 test_strings.push_back("content_tab");
200 test_strings.push_back("content_panel");
201 test_strings.push_back("content_popup");
202
203 ScopedVector<ExtensionTestMessageListener> listeners;
204 for (size_t i = 0; i < test_strings.size(); ++i) {
205 listeners.push_back(
206 new ExtensionTestMessageListener(test_strings[i], false));
207 }
208
209 const Extension* extension = LoadExtension(
210 test_data_dir_.AppendASCII("window_open").AppendASCII(
211 "close_panels_on_uninstall"));
212 ASSERT_TRUE(extension);
213
214 // Two tabs. One in extension domain and one in non-extension domain.
215 // Two popups - one in extension domain and one in non-extension domain.
216 // Two panels - one in extension domain and one in non-extension domain.
217 WaitForTabsAndPopups(browser(), 2, 2, 2);
218
219 // Wait on test messages to make sure the pages loaded.
220 for (size_t i = 0; i < listeners.size(); ++i)
221 ASSERT_TRUE(listeners[i]->WaitUntilSatisfied());
222
223 UninstallExtension(extension->id());
224
225 // Wait for one tab and one popup in non-extension domain to stay open.
226 // Expect everything else, including panels, to close.
227 WaitForTabsAndPopups(browser(), 1, 1, 0);
jennb 2011/10/28 21:12:27 I see why you changed '>=' to '==' now. WaitForTab
prasadt 2011/10/28 21:53:28 Its possible but not as black boxy as we want this
228 }
229
178 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WindowOpener) { 230 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WindowOpener) {
179 ASSERT_TRUE(RunExtensionTest("window_open/opener")) << message_; 231 ASSERT_TRUE(RunExtensionTest("window_open/opener")) << message_;
180 } 232 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/ui/browser.cc » ('j') | chrome/browser/ui/browser.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698