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

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

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