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

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

Issue 11117011: Keep browser process alive while there are platform apps with background pages running. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: And another test Created 8 years 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 // 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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/test/test_timeouts.h" 6 #include "base/test/test_timeouts.h"
7 #include "base/threading/platform_thread.h" 7 #include "base/threading/platform_thread.h"
8 #include "base/utf_string_conversions.h" 8 #include "base/utf_string_conversions.h"
9 #include "chrome/app/chrome_command_ids.h" 9 #include "chrome/app/chrome_command_ids.h"
10 #include "chrome/browser/automation/automation_util.h" 10 #include "chrome/browser/automation/automation_util.h"
11 #include "chrome/browser/debugger/devtools_window.h" 11 #include "chrome/browser/debugger/devtools_window.h"
12 #include "chrome/browser/extensions/api/permissions/permissions_api.h" 12 #include "chrome/browser/extensions/api/permissions/permissions_api.h"
13 #include "chrome/browser/extensions/app_restore_service_factory.h" 13 #include "chrome/browser/extensions/app_restore_service_factory.h"
14 #include "chrome/browser/extensions/app_restore_service.h" 14 #include "chrome/browser/extensions/app_restore_service.h"
15 #include "chrome/browser/extensions/extension_browsertest.h" 15 #include "chrome/browser/extensions/extension_browsertest.h"
16 #include "chrome/browser/extensions/extension_prefs.h" 16 #include "chrome/browser/extensions/extension_prefs.h"
17 #include "chrome/browser/extensions/extension_service.h" 17 #include "chrome/browser/extensions/extension_service.h"
18 #include "chrome/browser/extensions/extension_system.h" 18 #include "chrome/browser/extensions/extension_system.h"
19 #include "chrome/browser/extensions/extension_test_message_listener.h" 19 #include "chrome/browser/extensions/extension_test_message_listener.h"
20 #include "chrome/browser/extensions/platform_app_browsertest_util.h" 20 #include "chrome/browser/extensions/platform_app_browsertest_util.h"
21 #include "chrome/browser/extensions/platform_app_launcher.h" 21 #include "chrome/browser/extensions/platform_app_launcher.h"
22 #include "chrome/browser/extensions/shell_window_registry.h" 22 #include "chrome/browser/extensions/shell_window_registry.h"
23 #include "chrome/browser/lifetime/application_lifetime.h"
23 #include "chrome/browser/prefs/pref_service.h" 24 #include "chrome/browser/prefs/pref_service.h"
24 #include "chrome/browser/tab_contents/render_view_context_menu.h" 25 #include "chrome/browser/tab_contents/render_view_context_menu.h"
25 #include "chrome/browser/ui/browser.h" 26 #include "chrome/browser/ui/browser.h"
26 #include "chrome/browser/ui/browser_tabstrip.h" 27 #include "chrome/browser/ui/browser_tabstrip.h"
28 #include "chrome/browser/ui/browser_window.h"
27 #include "chrome/browser/ui/constrained_window_tab_helper.h" 29 #include "chrome/browser/ui/constrained_window_tab_helper.h"
28 #include "chrome/browser/ui/extensions/application_launch.h" 30 #include "chrome/browser/ui/extensions/application_launch.h"
29 #include "chrome/browser/ui/extensions/shell_window.h" 31 #include "chrome/browser/ui/extensions/shell_window.h"
30 #include "chrome/browser/ui/tab_contents/tab_contents.h" 32 #include "chrome/browser/ui/tab_contents/tab_contents.h"
31 #include "chrome/common/chrome_notification_types.h" 33 #include "chrome/common/chrome_notification_types.h"
32 #include "chrome/common/url_constants.h" 34 #include "chrome/common/url_constants.h"
33 #include "chrome/test/base/ui_test_utils.h" 35 #include "chrome/test/base/ui_test_utils.h"
34 #include "content/public/browser/devtools_agent_host_registry.h" 36 #include "content/public/browser/devtools_agent_host_registry.h"
35 #include "content/public/browser/render_process_host.h" 37 #include "content/public/browser/render_process_host.h"
36 #include "content/public/browser/web_intents_dispatcher.h" 38 #include "content/public/browser/web_intents_dispatcher.h"
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 size_t observations_; 141 size_t observations_;
140 std::vector<content::WebContents*> observed_tabs_; 142 std::vector<content::WebContents*> observed_tabs_;
141 143
142 DISALLOW_COPY_AND_ASSIGN(TabsAddedNotificationObserver); 144 DISALLOW_COPY_AND_ASSIGN(TabsAddedNotificationObserver);
143 }; 145 };
144 146
145 const char kTestFilePath[] = "platform_apps/launch_files/test.txt"; 147 const char kTestFilePath[] = "platform_apps/launch_files/test.txt";
146 148
147 } // namespace 149 } // namespace
148 150
151 // TODO(benwells): Break up this file into some sensible smaller files.
152
149 // Tests that CreateShellWindow doesn't crash if you close it straight away. 153 // Tests that CreateShellWindow doesn't crash if you close it straight away.
150 // LauncherPlatformAppBrowserTest relies on this behaviour, but is only run for 154 // LauncherPlatformAppBrowserTest relies on this behaviour, but is only run for
151 // ash, so we test that it works here. 155 // ash, so we test that it works here.
152 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, CreateAndCloseShellWindow) { 156 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, CreateAndCloseShellWindow) {
153 const Extension* extension = LoadAndLaunchPlatformApp("minimal"); 157 const Extension* extension = LoadAndLaunchPlatformApp("minimal");
154 ShellWindow* window = CreateShellWindow(extension); 158 ShellWindow* window = CreateShellWindow(extension);
155 CloseShellWindow(window); 159 CloseShellWindow(window);
160 CloseShellWindowsAndWaitForAppToExit();
156 } 161 }
157 162
158 // Tests that platform apps can be launched in incognito mode without crashing. 163 // Tests that platform apps can be launched in incognito mode without crashing.
159 // Times out on ChromeOS: http://crbug.com/159392 164 // Times out on ChromeOS: http://crbug.com/159392
160 #if defined(OS_CHROMEOS) 165 #if defined(OS_CHROMEOS)
161 #define MAYBE_LaunchAppIncognito DISABLED_LaunchAppIncognito 166 #define MAYBE_LaunchAppIncognito DISABLED_LaunchAppIncognito
162 #else 167 #else
163 #define MAYBE_LaunchAppIncognito LaunchAppIncognito 168 #define MAYBE_LaunchAppIncognito LaunchAppIncognito
164 #endif 169 #endif
165 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, MAYBE_LaunchAppIncognito) { 170 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, MAYBE_LaunchAppIncognito) {
166 Browser* browser_incognito = ui_test_utils::OpenURLOffTheRecord( 171 Browser* browser_incognito = ui_test_utils::OpenURLOffTheRecord(
167 browser()->profile(), GURL("about:blank")); 172 browser()->profile(), GURL("about:blank"));
168 173
169 ExtensionTestMessageListener launched_listener("Launched", false); 174 ExtensionTestMessageListener launched_listener("Launched", false);
170 175
171 const Extension* extension = LoadExtensionIncognito( 176 const Extension* extension = LoadExtensionIncognito(
172 test_data_dir_.AppendASCII("platform_apps").AppendASCII("minimal")); 177 test_data_dir_.AppendASCII("platform_apps").AppendASCII("minimal"));
173 EXPECT_TRUE(extension); 178 EXPECT_TRUE(extension);
174 179
175 application_launch::OpenApplication(application_launch::LaunchParams( 180 application_launch::OpenApplication(application_launch::LaunchParams(
176 browser_incognito->profile(), extension, extension_misc::LAUNCH_NONE, 181 browser_incognito->profile(), extension, extension_misc::LAUNCH_NONE,
177 NEW_WINDOW)); 182 NEW_WINDOW));
178 183
179 ASSERT_TRUE(launched_listener.WaitUntilSatisfied()); 184 ASSERT_TRUE(launched_listener.WaitUntilSatisfied());
185 CloseShellWindowsAndWaitForAppToExit();
186 }
187
188 // Tests that the browser process is kept alive by the platform app's background
189 // page.
190 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, AppEventPageKeepsBrowserAlive) {
191 LoadAndLaunchPlatformApp("minimal");
192 browser()->window()->Close();
193 ASSERT_TRUE(browser::WillKeepAlive());
194 CloseShellWindowsAndWaitForAppToExit();
180 } 195 }
181 196
182 // Tests that platform apps received the "launch" event when launched. 197 // Tests that platform apps received the "launch" event when launched.
183 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, OnLaunchedEvent) { 198 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, OnLaunchedEvent) {
184 ASSERT_TRUE(RunPlatformAppTest("platform_apps/launch")) << message_; 199 ASSERT_TRUE(RunPlatformAppTest("platform_apps/launch")) << message_;
185 } 200 }
186 201
187 // Tests that platform apps can reply to "launch" events that contain a Web 202 // Tests that platform apps can reply to "launch" events that contain a Web
188 // Intent. This test does not test the mechanics of invoking a Web Intent 203 // Intent. This test does not test the mechanics of invoking a Web Intent
189 // from a source page, and short-circuits to LaunchPlatformAppWithWebIntent. 204 // from a source page, and short-circuits to LaunchPlatformAppWithWebIntent.
(...skipping 14 matching lines...) Expand all
204 WebContents* web_contents = chrome::GetActiveWebContents(browser()); 219 WebContents* web_contents = chrome::GetActiveWebContents(browser());
205 ASSERT_TRUE(web_contents); 220 ASSERT_TRUE(web_contents);
206 221
207 extensions::LaunchPlatformAppWithWebIntent( 222 extensions::LaunchPlatformAppWithWebIntent(
208 browser()->profile(), 223 browser()->profile(),
209 extension, 224 extension,
210 handler.intents_dispatcher(), 225 handler.intents_dispatcher(),
211 web_contents); 226 web_contents);
212 227
213 ASSERT_TRUE(handler.WaitUntilReply()); 228 ASSERT_TRUE(handler.WaitUntilReply());
229 CloseShellWindowsAndWaitForAppToExit();
214 } 230 }
215 231
216 // Tests that platform apps cannot use certain disabled window properties, but 232 // Tests that platform apps cannot use certain disabled window properties, but
217 // can override them and then use them. 233 // can override them and then use them.
218 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, DisabledWindowProperties) { 234 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, DisabledWindowProperties) {
219 ASSERT_TRUE(RunPlatformAppTest("platform_apps/disabled_window_properties")) 235 ASSERT_TRUE(RunPlatformAppTest("platform_apps/disabled_window_properties"))
220 << message_; 236 << message_;
221 } 237 }
222 238
223 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, EmptyContextMenu) { 239 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, EmptyContextMenu) {
224 ExtensionTestMessageListener launched_listener("Launched", false);
225 LoadAndLaunchPlatformApp("minimal"); 240 LoadAndLaunchPlatformApp("minimal");
226 241
227 ASSERT_TRUE(launched_listener.WaitUntilSatisfied());
228
229 // The empty app doesn't add any context menu items, so its menu should 242 // The empty app doesn't add any context menu items, so its menu should
230 // only include the developer tools. 243 // only include the developer tools.
231 WebContents* web_contents = GetFirstShellWindowWebContents(); 244 WebContents* web_contents = GetFirstShellWindowWebContents();
232 ASSERT_TRUE(web_contents); 245 ASSERT_TRUE(web_contents);
233 WebKit::WebContextMenuData data; 246 WebKit::WebContextMenuData data;
234 content::ContextMenuParams params(data); 247 content::ContextMenuParams params(data);
235 scoped_ptr<PlatformAppContextMenu> menu; 248 scoped_ptr<PlatformAppContextMenu> menu;
236 menu.reset(new PlatformAppContextMenu(web_contents, params)); 249 menu.reset(new PlatformAppContextMenu(web_contents, params));
237 menu->Init(); 250 menu->Init();
238 ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTELEMENT)); 251 ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTELEMENT));
239 ASSERT_TRUE( 252 ASSERT_TRUE(
240 menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE)); 253 menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE));
241 ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP)); 254 ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP));
242 ASSERT_FALSE(menu->HasCommandWithId(IDC_BACK)); 255 ASSERT_FALSE(menu->HasCommandWithId(IDC_BACK));
243 ASSERT_FALSE(menu->HasCommandWithId(IDC_SAVE_PAGE)); 256 ASSERT_FALSE(menu->HasCommandWithId(IDC_SAVE_PAGE));
257 CloseShellWindowsAndWaitForAppToExit();
244 } 258 }
245 259
246 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, AppWithContextMenu) { 260 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, AppWithContextMenu) {
247 ExtensionTestMessageListener launched_listener("Launched", false);
248 LoadAndLaunchPlatformApp("context_menu"); 261 LoadAndLaunchPlatformApp("context_menu");
249 262
250 // Wait for the extension to tell us it's initialized its context menus and
251 // launched a window.
252 ASSERT_TRUE(launched_listener.WaitUntilSatisfied());
253
254 // The context_menu app has two context menu items. These, along with a 263 // The context_menu app has two context menu items. These, along with a
255 // separator and the developer tools, is all that should be in the menu. 264 // separator and the developer tools, is all that should be in the menu.
256 WebContents* web_contents = GetFirstShellWindowWebContents(); 265 WebContents* web_contents = GetFirstShellWindowWebContents();
257 ASSERT_TRUE(web_contents); 266 ASSERT_TRUE(web_contents);
258 WebKit::WebContextMenuData data; 267 WebKit::WebContextMenuData data;
259 content::ContextMenuParams params(data); 268 content::ContextMenuParams params(data);
260 scoped_ptr<PlatformAppContextMenu> menu; 269 scoped_ptr<PlatformAppContextMenu> menu;
261 menu.reset(new PlatformAppContextMenu(web_contents, params)); 270 menu.reset(new PlatformAppContextMenu(web_contents, params));
262 menu->Init(); 271 menu->Init();
263 ASSERT_TRUE(menu->HasCommandWithId(IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST)); 272 ASSERT_TRUE(menu->HasCommandWithId(IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST));
264 ASSERT_TRUE(menu->HasCommandWithId(IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST + 1)); 273 ASSERT_TRUE(menu->HasCommandWithId(IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST + 1));
265 ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTELEMENT)); 274 ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTELEMENT));
266 ASSERT_TRUE( 275 ASSERT_TRUE(
267 menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE)); 276 menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE));
268 ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP)); 277 ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP));
269 ASSERT_FALSE(menu->HasCommandWithId(IDC_BACK)); 278 ASSERT_FALSE(menu->HasCommandWithId(IDC_BACK));
270 ASSERT_FALSE(menu->HasCommandWithId(IDC_SAVE_PAGE)); 279 ASSERT_FALSE(menu->HasCommandWithId(IDC_SAVE_PAGE));
271 ASSERT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_UNDO)); 280 ASSERT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_UNDO));
281 CloseShellWindowsAndWaitForAppToExit();
272 } 282 }
273 283
274 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, InstalledAppWithContextMenu) { 284 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, InstalledAppWithContextMenu) {
275 ExtensionTestMessageListener launched_listener("Launched", false);
276 InstallAndLaunchPlatformApp("context_menu"); 285 InstallAndLaunchPlatformApp("context_menu");
277 286
278 // Wait for the extension to tell us it's initialized its context menus and
279 // launched a window.
280 ASSERT_TRUE(launched_listener.WaitUntilSatisfied());
281
282 // The context_menu app has two context menu items. For an installed app 287 // The context_menu app has two context menu items. For an installed app
283 // these are all that should be in the menu. 288 // these are all that should be in the menu.
284 WebContents* web_contents = GetFirstShellWindowWebContents(); 289 WebContents* web_contents = GetFirstShellWindowWebContents();
285 ASSERT_TRUE(web_contents); 290 ASSERT_TRUE(web_contents);
286 WebKit::WebContextMenuData data; 291 WebKit::WebContextMenuData data;
287 content::ContextMenuParams params(data); 292 content::ContextMenuParams params(data);
288 scoped_ptr<PlatformAppContextMenu> menu; 293 scoped_ptr<PlatformAppContextMenu> menu;
289 menu.reset(new PlatformAppContextMenu(web_contents, params)); 294 menu.reset(new PlatformAppContextMenu(web_contents, params));
290 menu->Init(); 295 menu->Init();
291 ASSERT_TRUE(menu->HasCommandWithId(IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST)); 296 ASSERT_TRUE(menu->HasCommandWithId(IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST));
292 ASSERT_TRUE(menu->HasCommandWithId(IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST + 1)); 297 ASSERT_TRUE(menu->HasCommandWithId(IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST + 1));
293 ASSERT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTELEMENT)); 298 ASSERT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTELEMENT));
294 ASSERT_FALSE( 299 ASSERT_FALSE(
295 menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE)); 300 menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE));
296 ASSERT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP)); 301 ASSERT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP));
297 ASSERT_FALSE(menu->HasCommandWithId(IDC_BACK)); 302 ASSERT_FALSE(menu->HasCommandWithId(IDC_BACK));
298 ASSERT_FALSE(menu->HasCommandWithId(IDC_SAVE_PAGE)); 303 ASSERT_FALSE(menu->HasCommandWithId(IDC_SAVE_PAGE));
299 ASSERT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_UNDO)); 304 ASSERT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_UNDO));
305 CloseShellWindowsAndWaitForAppToExit();
300 } 306 }
301 307
302 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, AppWithContextMenuTextField) { 308 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, AppWithContextMenuTextField) {
303 ExtensionTestMessageListener launched_listener("Launched", false);
304 LoadAndLaunchPlatformApp("context_menu"); 309 LoadAndLaunchPlatformApp("context_menu");
305 310
306 // Wait for the extension to tell us it's initialized its context menus and
307 // launched a window.
308 ASSERT_TRUE(launched_listener.WaitUntilSatisfied());
309
310 // The context_menu app has one context menu item. This, along with a 311 // The context_menu app has one context menu item. This, along with a
311 // separator and the developer tools, is all that should be in the menu. 312 // separator and the developer tools, is all that should be in the menu.
312 WebContents* web_contents = GetFirstShellWindowWebContents(); 313 WebContents* web_contents = GetFirstShellWindowWebContents();
313 ASSERT_TRUE(web_contents); 314 ASSERT_TRUE(web_contents);
314 WebKit::WebContextMenuData data; 315 WebKit::WebContextMenuData data;
315 content::ContextMenuParams params(data); 316 content::ContextMenuParams params(data);
316 params.is_editable = true; 317 params.is_editable = true;
317 scoped_ptr<PlatformAppContextMenu> menu; 318 scoped_ptr<PlatformAppContextMenu> menu;
318 menu.reset(new PlatformAppContextMenu(web_contents, params)); 319 menu.reset(new PlatformAppContextMenu(web_contents, params));
319 menu->Init(); 320 menu->Init();
320 ASSERT_TRUE(menu->HasCommandWithId(IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST)); 321 ASSERT_TRUE(menu->HasCommandWithId(IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST));
321 ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTELEMENT)); 322 ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTELEMENT));
322 ASSERT_TRUE( 323 ASSERT_TRUE(
323 menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE)); 324 menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE));
324 ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP)); 325 ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP));
325 ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_UNDO)); 326 ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_UNDO));
326 ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_COPY)); 327 ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_COPY));
327 ASSERT_FALSE(menu->HasCommandWithId(IDC_BACK)); 328 ASSERT_FALSE(menu->HasCommandWithId(IDC_BACK));
328 ASSERT_FALSE(menu->HasCommandWithId(IDC_SAVE_PAGE)); 329 ASSERT_FALSE(menu->HasCommandWithId(IDC_SAVE_PAGE));
330 CloseShellWindowsAndWaitForAppToExit();
329 } 331 }
330 332
331 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, AppWithContextMenuSelection) { 333 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, AppWithContextMenuSelection) {
332 ExtensionTestMessageListener launched_listener("Launched", false);
333 LoadAndLaunchPlatformApp("context_menu"); 334 LoadAndLaunchPlatformApp("context_menu");
334 335
335 // Wait for the extension to tell us it's initialized its context menus and
336 // launched a window.
337 ASSERT_TRUE(launched_listener.WaitUntilSatisfied());
338
339 // The context_menu app has one context menu item. This, along with a 336 // The context_menu app has one context menu item. This, along with a
340 // separator and the developer tools, is all that should be in the menu. 337 // separator and the developer tools, is all that should be in the menu.
341 WebContents* web_contents = GetFirstShellWindowWebContents(); 338 WebContents* web_contents = GetFirstShellWindowWebContents();
342 ASSERT_TRUE(web_contents); 339 ASSERT_TRUE(web_contents);
343 WebKit::WebContextMenuData data; 340 WebKit::WebContextMenuData data;
344 content::ContextMenuParams params(data); 341 content::ContextMenuParams params(data);
345 params.selection_text = ASCIIToUTF16("Hello World"); 342 params.selection_text = ASCIIToUTF16("Hello World");
346 scoped_ptr<PlatformAppContextMenu> menu; 343 scoped_ptr<PlatformAppContextMenu> menu;
347 menu.reset(new PlatformAppContextMenu(web_contents, params)); 344 menu.reset(new PlatformAppContextMenu(web_contents, params));
348 menu->Init(); 345 menu->Init();
349 ASSERT_TRUE(menu->HasCommandWithId(IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST)); 346 ASSERT_TRUE(menu->HasCommandWithId(IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST));
350 ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTELEMENT)); 347 ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTELEMENT));
351 ASSERT_TRUE( 348 ASSERT_TRUE(
352 menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE)); 349 menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE));
353 ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP)); 350 ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP));
354 ASSERT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_UNDO)); 351 ASSERT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_UNDO));
355 ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_COPY)); 352 ASSERT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_COPY));
356 ASSERT_FALSE(menu->HasCommandWithId(IDC_BACK)); 353 ASSERT_FALSE(menu->HasCommandWithId(IDC_BACK));
357 ASSERT_FALSE(menu->HasCommandWithId(IDC_SAVE_PAGE)); 354 ASSERT_FALSE(menu->HasCommandWithId(IDC_SAVE_PAGE));
355 CloseShellWindowsAndWaitForAppToExit();
358 } 356 }
359 357
360 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, AppWithContextMenuClicked) { 358 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, AppWithContextMenuClicked) {
361 ExtensionTestMessageListener launched_listener("Launched", false);
362 LoadAndLaunchPlatformApp("context_menu_click"); 359 LoadAndLaunchPlatformApp("context_menu_click");
363 360
364 // Wait for the extension to tell us it's initialized its context menus and
365 // launched a window.
366 ASSERT_TRUE(launched_listener.WaitUntilSatisfied());
367
368 // Test that the menu item shows up 361 // Test that the menu item shows up
369 WebContents* web_contents = GetFirstShellWindowWebContents(); 362 WebContents* web_contents = GetFirstShellWindowWebContents();
370 ASSERT_TRUE(web_contents); 363 ASSERT_TRUE(web_contents);
371 WebKit::WebContextMenuData data; 364 WebKit::WebContextMenuData data;
372 content::ContextMenuParams params(data); 365 content::ContextMenuParams params(data);
373 params.page_url = GURL("http://foo.bar"); 366 params.page_url = GURL("http://foo.bar");
374 scoped_ptr<PlatformAppContextMenu> menu; 367 scoped_ptr<PlatformAppContextMenu> menu;
375 menu.reset(new PlatformAppContextMenu(web_contents, params)); 368 menu.reset(new PlatformAppContextMenu(web_contents, params));
376 menu->Init(); 369 menu->Init();
377 ASSERT_TRUE(menu->HasCommandWithId(IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST)); 370 ASSERT_TRUE(menu->HasCommandWithId(IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST));
378 371
379 // Execute the menu item 372 // Execute the menu item
380 ExtensionTestMessageListener onclicked_listener("onClicked fired for id1", 373 ExtensionTestMessageListener onclicked_listener("onClicked fired for id1",
381 false); 374 false);
382 menu->ExecuteCommand(IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST); 375 menu->ExecuteCommand(IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST);
383 376
384 ASSERT_TRUE(onclicked_listener.WaitUntilSatisfied()); 377 ASSERT_TRUE(onclicked_listener.WaitUntilSatisfied());
378 CloseShellWindowsAndWaitForAppToExit();
385 } 379 }
386 380
387 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, DisallowNavigation) { 381 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, DisallowNavigation) {
388 TabsAddedNotificationObserver observer(2); 382 TabsAddedNotificationObserver observer(2);
389 383
390 ASSERT_TRUE(StartTestServer()); 384 ASSERT_TRUE(StartTestServer());
391 ASSERT_TRUE(RunPlatformAppTest("platform_apps/navigation")) << message_; 385 ASSERT_TRUE(RunPlatformAppTestReturnImmediately("platform_apps/navigation"))
386 << message_;
392 387
393 observer.Wait(); 388 observer.Wait();
394 ASSERT_EQ(2U, observer.tabs().size()); 389 ASSERT_EQ(2U, observer.tabs().size());
395 EXPECT_EQ(std::string(chrome::kExtensionInvalidRequestURL), 390 EXPECT_EQ(std::string(chrome::kExtensionInvalidRequestURL),
396 observer.tabs()[0]->GetURL().spec()); 391 observer.tabs()[0]->GetURL().spec());
397 EXPECT_EQ("http://chromium.org/", 392 EXPECT_EQ("http://chromium.org/",
398 observer.tabs()[1]->GetURL().spec()); 393 observer.tabs()[1]->GetURL().spec());
394 browser()->window()->Close();
395 CloseShellWindowsAndWaitForAppToExit();
399 } 396 }
400 397
401 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, Iframes) { 398 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, Iframes) {
402 ASSERT_TRUE(StartTestServer()); 399 ASSERT_TRUE(StartTestServer());
403 ASSERT_TRUE(RunPlatformAppTest("platform_apps/iframes")) << message_; 400 ASSERT_TRUE(RunPlatformAppTest("platform_apps/iframes")) << message_;
404 } 401 }
405 402
406 // Tests that localStorage and WebSQL are disabled for platform apps. 403 // Tests that localStorage and WebSQL are disabled for platform apps.
407 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, DisallowStorage) { 404 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, DisallowStorage) {
408 ASSERT_TRUE(RunPlatformAppTest("platform_apps/storage")) << message_; 405 ASSERT_TRUE(RunPlatformAppTest("platform_apps/storage")) << message_;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 // Initially there should be just the one browser window visible to the 455 // Initially there should be just the one browser window visible to the
459 // extensions API. 456 // extensions API.
460 const Extension* extension = LoadExtension( 457 const Extension* extension = LoadExtension(
461 test_data_dir_.AppendASCII("common/background_page")); 458 test_data_dir_.AppendASCII("common/background_page"));
462 ASSERT_EQ(1U, RunGetWindowsFunctionForExtension(extension)); 459 ASSERT_EQ(1U, RunGetWindowsFunctionForExtension(extension));
463 460
464 // And no shell windows. 461 // And no shell windows.
465 ASSERT_EQ(0U, GetShellWindowCount()); 462 ASSERT_EQ(0U, GetShellWindowCount());
466 463
467 // Launch a platform app that shows a window. 464 // Launch a platform app that shows a window.
468 ExtensionTestMessageListener launched_listener("Launched", false);
469 LoadAndLaunchPlatformApp("minimal"); 465 LoadAndLaunchPlatformApp("minimal");
470 ASSERT_TRUE(launched_listener.WaitUntilSatisfied());
471 ASSERT_EQ(1U, GetShellWindowCount()); 466 ASSERT_EQ(1U, GetShellWindowCount());
472 ShellWindowRegistry::ShellWindowSet shell_windows = 467 ShellWindowRegistry::ShellWindowSet shell_windows =
473 ShellWindowRegistry::Get(browser()->profile())->shell_windows(); 468 ShellWindowRegistry::Get(browser()->profile())->shell_windows();
474 int shell_window_id = (*shell_windows.begin())->session_id().id(); 469 int shell_window_id = (*shell_windows.begin())->session_id().id();
475 470
476 // But it's not visible to the extensions API, it still thinks there's just 471 // But it's not visible to the extensions API, it still thinks there's just
477 // one browser window. 472 // one browser window.
478 ASSERT_EQ(1U, RunGetWindowsFunctionForExtension(extension)); 473 ASSERT_EQ(1U, RunGetWindowsFunctionForExtension(extension));
479 // It can't look it up by ID either 474 // It can't look it up by ID either
480 ASSERT_FALSE(RunGetWindowFunctionForExtension(shell_window_id, extension)); 475 ASSERT_FALSE(RunGetWindowFunctionForExtension(shell_window_id, extension));
481 476
482 // The app can also only see one window (its own). 477 // The app can also only see one window (its own).
483 // TODO(jeremya): add an extension function to get a shell window by ID, and 478 // TODO(jeremya): add an extension function to get a shell window by ID, and
484 // to get a list of all the shell windows, so we can test this. 479 // to get a list of all the shell windows, so we can test this.
485 480
486 // Launch another platform app that also shows a window. 481 // Launch another platform app that also shows a window.
487 ExtensionTestMessageListener launched_listener2("Launched", false);
488 LoadAndLaunchPlatformApp("context_menu"); 482 LoadAndLaunchPlatformApp("context_menu");
489 ASSERT_TRUE(launched_listener2.WaitUntilSatisfied());
490 483
491 // There are two total shell windows, but each app can only see its own. 484 // There are two total shell windows, but each app can only see its own.
492 ASSERT_EQ(2U, GetShellWindowCount()); 485 ASSERT_EQ(2U, GetShellWindowCount());
493 // TODO(jeremya): as above, this requires more extension functions. 486 // TODO(jeremya): as above, this requires more extension functions.
487 CloseShellWindowsAndWaitForAppToExit();
494 } 488 }
495 489
496 // ChromeOS does not support passing arguments on the command line, so the tests 490 // ChromeOS does not support passing arguments on the command line, so the tests
497 // that rely on this functionality are disabled. 491 // that rely on this functionality are disabled.
498 #if !defined(OS_CHROMEOS) 492 #if !defined(OS_CHROMEOS)
499 // Tests that command line parameters get passed through to platform apps 493 // Tests that command line parameters get passed through to platform apps
500 // via launchData correctly when launching with a file. 494 // via launchData correctly when launching with a file.
501 // TODO(benwells/jeremya): tests need a way to specify a handler ID. 495 // TODO(benwells/jeremya): tests need a way to specify a handler ID.
502 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, LaunchWithFile) { 496 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, LaunchWithFile) {
503 SetCommandLineArg(kTestFilePath); 497 SetCommandLineArg(kTestFilePath);
(...skipping 24 matching lines...) Expand all
528 extension_misc::LAUNCH_NONE, 522 extension_misc::LAUNCH_NONE,
529 NEW_WINDOW); 523 NEW_WINDOW);
530 params.command_line = CommandLine::ForCurrentProcess(); 524 params.command_line = CommandLine::ForCurrentProcess();
531 params.current_directory = test_data_dir_; 525 params.current_directory = test_data_dir_;
532 application_launch::OpenApplication(params); 526 application_launch::OpenApplication(params);
533 527
534 if (!catcher.GetNextResult()) { 528 if (!catcher.GetNextResult()) {
535 message_ = catcher.message(); 529 message_ = catcher.message();
536 ASSERT_TRUE(0); 530 ASSERT_TRUE(0);
537 } 531 }
532 CloseShellWindowsAndWaitForAppToExit();
538 } 533 }
539 534
540 // Tests that no launch data is sent through if the file is of the wrong MIME 535 // Tests that no launch data is sent through if the file is of the wrong MIME
541 // type. 536 // type.
542 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, LaunchWithWrongType) { 537 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, LaunchWithWrongType) {
543 SetCommandLineArg(kTestFilePath); 538 SetCommandLineArg(kTestFilePath);
544 ASSERT_TRUE(RunPlatformAppTest("platform_apps/launch_wrong_type")) 539 ASSERT_TRUE(RunPlatformAppTest("platform_apps/launch_wrong_type"))
545 << message_; 540 << message_;
546 } 541 }
547 542
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 #endif // defined(OS_CHROMEOS) 589 #endif // defined(OS_CHROMEOS)
595 590
596 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, OpenLink) { 591 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, OpenLink) {
597 ASSERT_TRUE(StartTestServer()); 592 ASSERT_TRUE(StartTestServer());
598 content::WindowedNotificationObserver observer( 593 content::WindowedNotificationObserver observer(
599 chrome::NOTIFICATION_TAB_ADDED, 594 chrome::NOTIFICATION_TAB_ADDED,
600 content::Source<content::WebContentsDelegate>(browser())); 595 content::Source<content::WebContentsDelegate>(browser()));
601 LoadAndLaunchPlatformApp("open_link"); 596 LoadAndLaunchPlatformApp("open_link");
602 observer.Wait(); 597 observer.Wait();
603 ASSERT_EQ(2, browser()->tab_count()); 598 ASSERT_EQ(2, browser()->tab_count());
599 browser()->window()->Close();
600 CloseShellWindowsAndWaitForAppToExit();
604 } 601 }
605 602
606 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, MutationEventsDisabled) { 603 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, MutationEventsDisabled) {
607 ASSERT_TRUE(RunPlatformAppTest("platform_apps/mutation_events")) << message_; 604 ASSERT_TRUE(RunPlatformAppTest("platform_apps/mutation_events")) << message_;
608 } 605 }
609 606
610 // Test that windows created with an id will remember and restore their 607 // Test that windows created with an id will remember and restore their
611 // geometry when opening new windows. 608 // geometry when opening new windows.
612 // Originally disabled due to flakiness (see http://crbug.com/155459) 609 // Originally disabled due to flakiness (see http://crbug.com/155459)
613 // but now because a regression breaks the test (http://crbug.com/160343). 610 // but now because a regression breaks the test (http://crbug.com/160343).
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 662
666 // Make sure the window was properly moved&resized. 663 // Make sure the window was properly moved&resized.
667 ASSERT_EQ(bounds, window->GetBaseWindow()->GetBounds()); 664 ASSERT_EQ(bounds, window->GetBaseWindow()->GetBounds());
668 665
669 // Tell javascript to open a second window. 666 // Tell javascript to open a second window.
670 page2_listener.Reply("continue"); 667 page2_listener.Reply("continue");
671 668
672 // Wait for javascript to verify that the second window got the updated 669 // Wait for javascript to verify that the second window got the updated
673 // coordinates, ignoring the default coordinates passed to the create method. 670 // coordinates, ignoring the default coordinates passed to the create method.
674 ASSERT_TRUE(done2_listener.WaitUntilSatisfied()); 671 ASSERT_TRUE(done2_listener.WaitUntilSatisfied());
672
673 CloseShellWindowsAndWaitForAppToExit();
675 } 674 }
676 675
677 // Tests that a running app is recorded in the preferences as such. 676 // Tests that a running app is recorded in the preferences as such.
678 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, RunningAppsAreRecorded) { 677 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, RunningAppsAreRecorded) {
679 content::WindowedNotificationObserver extension_suspended( 678 content::WindowedNotificationObserver extension_suspended(
680 chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED, 679 chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED,
681 content::NotificationService::AllSources()); 680 content::NotificationService::AllSources());
682 681
683 const Extension* extension = LoadExtension( 682 const Extension* extension = LoadExtension(
684 test_data_dir_.AppendASCII("platform_apps/restart_test")); 683 test_data_dir_.AppendASCII("platform_apps/restart_test"));
(...skipping 11 matching lines...) Expand all
696 // App isn't running because it got suspended. 695 // App isn't running because it got suspended.
697 ASSERT_FALSE(extension_prefs->IsExtensionRunning(extension->id())); 696 ASSERT_FALSE(extension_prefs->IsExtensionRunning(extension->id()));
698 697
699 // Pretend that the app is supposed to be running. 698 // Pretend that the app is supposed to be running.
700 extension_prefs->SetExtensionRunning(extension->id(), true); 699 extension_prefs->SetExtensionRunning(extension->id(), true);
701 700
702 ExtensionTestMessageListener restart_listener("onRestarted", false); 701 ExtensionTestMessageListener restart_listener("onRestarted", false);
703 AppRestoreServiceFactory::GetForProfile(browser()->profile())-> 702 AppRestoreServiceFactory::GetForProfile(browser()->profile())->
704 HandleStartup(true); 703 HandleStartup(true);
705 restart_listener.WaitUntilSatisfied(); 704 restart_listener.WaitUntilSatisfied();
705 CloseShellWindowsAndWaitForAppToExit();
706 } 706 }
707 707
708 namespace { 708 namespace {
709 709
710 class PlatformAppDevToolsBrowserTest : public PlatformAppBrowserTest { 710 class PlatformAppDevToolsBrowserTest : public PlatformAppBrowserTest {
711 protected: 711 protected:
712 enum TestFlags { 712 enum TestFlags {
713 RELAUNCH = 0x1, 713 RELAUNCH = 0x1,
714 HAS_ID = 0x2, 714 HAS_ID = 0x2,
715 }; 715 };
716 // Runs a test inside a harness that opens DevTools on a shell window. 716 // Runs a test inside a harness that opens DevTools on a shell window.
717 void RunTestWithDevTools(const char* name, int test_flags); 717 void RunTestWithDevTools(const char* name, int test_flags);
718 }; 718 };
719 719
720 void PlatformAppDevToolsBrowserTest::RunTestWithDevTools( 720 void PlatformAppDevToolsBrowserTest::RunTestWithDevTools(
721 const char* name, int test_flags) { 721 const char* name, int test_flags) {
722 using content::DevToolsAgentHostRegistry; 722 using content::DevToolsAgentHostRegistry;
723 ExtensionTestMessageListener launched_listener("Launched", false);
724 const Extension* extension = LoadAndLaunchPlatformApp(name); 723 const Extension* extension = LoadAndLaunchPlatformApp(name);
725 ASSERT_TRUE(extension); 724 ASSERT_TRUE(extension);
726 ASSERT_TRUE(launched_listener.WaitUntilSatisfied());
727 ShellWindow* window = GetFirstShellWindow(); 725 ShellWindow* window = GetFirstShellWindow();
728 ASSERT_TRUE(window); 726 ASSERT_TRUE(window);
729 ASSERT_EQ(window->window_key().empty(), (test_flags & HAS_ID) == 0); 727 ASSERT_EQ(window->window_key().empty(), (test_flags & HAS_ID) == 0);
730 content::RenderViewHost* rvh = window->web_contents()->GetRenderViewHost(); 728 content::RenderViewHost* rvh = window->web_contents()->GetRenderViewHost();
731 ASSERT_TRUE(rvh); 729 ASSERT_TRUE(rvh);
732 730
733 // Ensure no DevTools open for the ShellWindow, then open one. 731 // Ensure no DevTools open for the ShellWindow, then open one.
734 ASSERT_FALSE(DevToolsAgentHostRegistry::HasDevToolsAgentHost(rvh)); 732 ASSERT_FALSE(DevToolsAgentHostRegistry::HasDevToolsAgentHost(rvh));
735 DevToolsWindow* devtools_window = DevToolsWindow::OpenDevToolsWindow(rvh); 733 DevToolsWindow* devtools_window = DevToolsWindow::OpenDevToolsWindow(rvh);
736 content::WindowedNotificationObserver loaded_observer( 734 content::WindowedNotificationObserver loaded_observer(
(...skipping 17 matching lines...) Expand all
754 NEW_WINDOW)); 752 NEW_WINDOW));
755 app_loaded_observer.Wait(); 753 app_loaded_observer.Wait();
756 window = GetFirstShellWindow(); 754 window = GetFirstShellWindow();
757 ASSERT_TRUE(window); 755 ASSERT_TRUE(window);
758 756
759 // DevTools should have reopened with the relaunch. 757 // DevTools should have reopened with the relaunch.
760 rvh = window->web_contents()->GetRenderViewHost(); 758 rvh = window->web_contents()->GetRenderViewHost();
761 ASSERT_TRUE(rvh); 759 ASSERT_TRUE(rvh);
762 ASSERT_TRUE(DevToolsAgentHostRegistry::HasDevToolsAgentHost(rvh)); 760 ASSERT_TRUE(DevToolsAgentHostRegistry::HasDevToolsAgentHost(rvh));
763 } 761 }
762 CloseShellWindowsAndWaitForAppToExit();
764 } 763 }
765 764
766 } // namespace 765 } // namespace
767 766
768 IN_PROC_BROWSER_TEST_F(PlatformAppDevToolsBrowserTest, ReOpenedWithID) { 767 IN_PROC_BROWSER_TEST_F(PlatformAppDevToolsBrowserTest, ReOpenedWithID) {
769 RunTestWithDevTools("minimal_id", RELAUNCH | HAS_ID); 768 RunTestWithDevTools("minimal_id", RELAUNCH | HAS_ID);
770 } 769 }
771 770
772 IN_PROC_BROWSER_TEST_F(PlatformAppDevToolsBrowserTest, ReOpenedWithURL) { 771 IN_PROC_BROWSER_TEST_F(PlatformAppDevToolsBrowserTest, ReOpenedWithURL) {
773 RunTestWithDevTools("minimal", RELAUNCH); 772 RunTestWithDevTools("minimal", RELAUNCH);
(...skipping 21 matching lines...) Expand all
795 // Verify that the shell window has a constrained window attached. 794 // Verify that the shell window has a constrained window attached.
796 ConstrainedWindowTabHelper* constrained_window_tab_helper = 795 ConstrainedWindowTabHelper* constrained_window_tab_helper =
797 ConstrainedWindowTabHelper::FromWebContents(web_contents); 796 ConstrainedWindowTabHelper::FromWebContents(web_contents);
798 EXPECT_EQ(1u, constrained_window_tab_helper->constrained_window_count()); 797 EXPECT_EQ(1u, constrained_window_tab_helper->constrained_window_count());
799 798
800 // Close the constrained window and wait for the reply to the permission 799 // Close the constrained window and wait for the reply to the permission
801 // request. 800 // request.
802 ExtensionTestMessageListener listener("PermissionRequestDone", false); 801 ExtensionTestMessageListener listener("PermissionRequestDone", false);
803 constrained_window_tab_helper->CloseConstrainedWindows(); 802 constrained_window_tab_helper->CloseConstrainedWindows();
804 ASSERT_TRUE(listener.WaitUntilSatisfied()); 803 ASSERT_TRUE(listener.WaitUntilSatisfied());
804
805 CloseShellWindowsAndWaitForAppToExit();
805 } 806 }
806 807
807 // Tests that an app calling chrome.runtime.reload will reload the app and 808 // Tests that an app calling chrome.runtime.reload will reload the app and
808 // relaunch it if it was running. 809 // relaunch it if it was running.
809 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, ReloadRelaunches) { 810 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, ReloadRelaunches) {
810 ExtensionTestMessageListener launched_listener("Launched", true); 811 ExtensionTestMessageListener launched_listener("Launched", true);
811 const Extension* extension = LoadAndLaunchPlatformApp("reload"); 812 const Extension* extension = LoadPlatformApp("reload");
812 ASSERT_TRUE(extension); 813 ASSERT_TRUE(extension);
814 application_launch::OpenApplication(application_launch::LaunchParams(
815 browser()->profile(), extension, extension_misc::LAUNCH_NONE,
816 NEW_WINDOW));
813 ASSERT_TRUE(launched_listener.WaitUntilSatisfied()); 817 ASSERT_TRUE(launched_listener.WaitUntilSatisfied());
814 ASSERT_TRUE(GetFirstShellWindow()); 818 ASSERT_TRUE(GetFirstShellWindow());
815 819
816 // Now tell the app to reload itself 820 // Now tell the app to reload itself
817 ExtensionTestMessageListener launched_listener2("Launched", false); 821 ExtensionTestMessageListener launched_listener2("Launched", false);
818 launched_listener.Reply("reload"); 822 launched_listener.Reply("reload");
819 ASSERT_TRUE(launched_listener2.WaitUntilSatisfied()); 823 ASSERT_TRUE(launched_listener2.WaitUntilSatisfied());
820 ASSERT_TRUE(GetFirstShellWindow()); 824 ASSERT_TRUE(GetFirstShellWindow());
825 CloseShellWindowsAndWaitForAppToExit();
821 } 826 }
822 827
823 namespace { 828 namespace {
824 829
825 // Simple observer to check for NOTIFICATION_EXTENSION_INSTALLED events to 830 // Simple observer to check for NOTIFICATION_EXTENSION_INSTALLED events to
826 // ensure installation does or does not occur in certain scenarios. 831 // ensure installation does or does not occur in certain scenarios.
827 class CheckExtensionInstalledObserver : public content::NotificationObserver { 832 class CheckExtensionInstalledObserver : public content::NotificationObserver {
828 public: 833 public:
829 CheckExtensionInstalledObserver() : seen_(false) { 834 CheckExtensionInstalledObserver() : seen_(false) {
830 registrar_.Add(this, 835 registrar_.Add(this,
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
872 877
873 app_loaded_observer.Wait(); 878 app_loaded_observer.Wait();
874 ASSERT_TRUE(should_install.seen()); 879 ASSERT_TRUE(should_install.seen());
875 880
876 ExtensionTestMessageListener launched_listener("Launched", false); 881 ExtensionTestMessageListener launched_listener("Launched", false);
877 application_launch::OpenApplication(application_launch::LaunchParams( 882 application_launch::OpenApplication(application_launch::LaunchParams(
878 browser()->profile(), extension, extension_misc::LAUNCH_NONE, 883 browser()->profile(), extension, extension_misc::LAUNCH_NONE,
879 NEW_WINDOW)); 884 NEW_WINDOW));
880 885
881 ASSERT_TRUE(launched_listener.WaitUntilSatisfied()); 886 ASSERT_TRUE(launched_listener.WaitUntilSatisfied());
887
888 CloseShellWindowsAndWaitForAppToExit();
882 } 889 }
883 890
884 // Component App Test 2 of 3: ensure an installed component app can be launched 891 // Component App Test 2 of 3: ensure an installed component app can be launched
885 // on a subsequent browser start, without requiring any install/upgrade logic 892 // on a subsequent browser start, without requiring any install/upgrade logic
886 // to be run, then perform setup for step 3. 893 // to be run, then perform setup for step 3.
887 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, 894 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest,
888 PRE_ComponentAppBackgroundPage) { 895 PRE_ComponentAppBackgroundPage) {
889 896
890 // Since the component app is now installed, re-adding it in the same profile 897 // Since the component app is now installed, re-adding it in the same profile
891 // should not cause it to be re-installed. Instead, we wait for the OnLaunched 898 // should not cause it to be re-installed. Instead, we wait for the OnLaunched
(...skipping 22 matching lines...) Expand all
914 extension_prefs->SetRegisteredEvents(extension->id(), 921 extension_prefs->SetRegisteredEvents(extension->id(),
915 std::set<std::string>()); 922 std::set<std::string>());
916 923
917 const base::StringValue old_version("1"); 924 const base::StringValue old_version("1");
918 std::string pref_path("extensions.settings."); 925 std::string pref_path("extensions.settings.");
919 pref_path += extension->id(); 926 pref_path += extension->id();
920 pref_path += ".manifest.version"; 927 pref_path += ".manifest.version";
921 extension_prefs->pref_service()->RegisterStringPref( 928 extension_prefs->pref_service()->RegisterStringPref(
922 pref_path.c_str(), std::string(), PrefServiceBase::UNSYNCABLE_PREF); 929 pref_path.c_str(), std::string(), PrefServiceBase::UNSYNCABLE_PREF);
923 extension_prefs->pref_service()->Set(pref_path.c_str(), old_version); 930 extension_prefs->pref_service()->Set(pref_path.c_str(), old_version);
931
932 CloseShellWindowsAndWaitForAppToExit();
924 } 933 }
925 934
926 // Component App Test 3 of 3: simulate a component extension upgrade that 935 // Component App Test 3 of 3: simulate a component extension upgrade that
927 // re-adds the OnLaunched event, and allows the app to be launched. 936 // re-adds the OnLaunched event, and allows the app to be launched.
928 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, ComponentAppBackgroundPage) { 937 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, ComponentAppBackgroundPage) {
929 CheckExtensionInstalledObserver should_install; 938 CheckExtensionInstalledObserver should_install;
930 // Since we are forcing an upgrade, we need to wait for the load again. 939 // Since we are forcing an upgrade, we need to wait for the load again.
931 content::WindowedNotificationObserver app_loaded_observer( 940 content::WindowedNotificationObserver app_loaded_observer(
932 content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME, 941 content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME,
933 content::NotificationService::AllSources()); 942 content::NotificationService::AllSources());
934 943
935 const Extension* extension = LoadExtensionAsComponent( 944 const Extension* extension = LoadExtensionAsComponent(
936 test_data_dir_.AppendASCII("platform_apps").AppendASCII("component")); 945 test_data_dir_.AppendASCII("platform_apps").AppendASCII("component"));
937 ASSERT_TRUE(extension); 946 ASSERT_TRUE(extension);
938 app_loaded_observer.Wait(); 947 app_loaded_observer.Wait();
939 ASSERT_TRUE(should_install.seen()); 948 ASSERT_TRUE(should_install.seen());
940 949
941 ExtensionTestMessageListener launched_listener("Launched", false); 950 ExtensionTestMessageListener launched_listener("Launched", false);
942 application_launch::OpenApplication(application_launch::LaunchParams( 951 application_launch::OpenApplication(application_launch::LaunchParams(
943 browser()->profile(), extension, extension_misc::LAUNCH_NONE, 952 browser()->profile(), extension, extension_misc::LAUNCH_NONE,
944 NEW_WINDOW)); 953 NEW_WINDOW));
945 954
946 ASSERT_TRUE(launched_listener.WaitUntilSatisfied()); 955 ASSERT_TRUE(launched_listener.WaitUntilSatisfied());
956
957 CloseShellWindowsAndWaitForAppToExit();
947 } 958 }
948 959
949 } // namespace extensions 960 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_host.cc ('k') | chrome/browser/extensions/platform_app_browsertest_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698