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

Side by Side Diff: chrome/browser/apps/ephemeral_app_launcher_browsertest.cc

Issue 344543006: Disable ephemeral apps after they stop running (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Prevent demotion of installed app due to race condition Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/message_loop/message_loop_proxy.h" 5 #include "base/message_loop/message_loop_proxy.h"
6 #include "chrome/browser/apps/ephemeral_app_launcher.h" 6 #include "chrome/browser/apps/ephemeral_app_launcher.h"
7 #include "chrome/browser/apps/ephemeral_app_service.h"
7 #include "chrome/browser/extensions/extension_install_checker.h" 8 #include "chrome/browser/extensions/extension_install_checker.h"
8 #include "chrome/browser/extensions/extension_service.h" 9 #include "chrome/browser/extensions/extension_service.h"
9 #include "chrome/browser/extensions/extension_test_message_listener.h" 10 #include "chrome/browser/extensions/extension_test_message_listener.h"
10 #include "chrome/browser/extensions/test_blacklist.h" 11 #include "chrome/browser/extensions/test_blacklist.h"
11 #include "chrome/browser/extensions/webstore_installer_test.h" 12 #include "chrome/browser/extensions/webstore_installer_test.h"
12 #include "chrome/browser/ui/browser_finder.h" 13 #include "chrome/browser/ui/browser_finder.h"
13 #include "chrome/browser/ui/tabs/tab_strip_model.h" 14 #include "chrome/browser/ui/tabs/tab_strip_model.h"
14 #include "chrome/common/chrome_switches.h" 15 #include "chrome/common/chrome_switches.h"
15 #include "content/public/browser/web_contents.h" 16 #include "content/public/browser/web_contents.h"
16 #include "content/public/test/test_utils.h" 17 #include "content/public/test/test_utils.h"
17 #include "extensions/browser/extension_prefs.h" 18 #include "extensions/browser/extension_prefs.h"
18 #include "extensions/browser/extension_registry.h" 19 #include "extensions/browser/extension_registry.h"
19 #include "extensions/browser/extension_system.h" 20 #include "extensions/browser/extension_system.h"
20 #include "extensions/browser/extension_util.h" 21 #include "extensions/browser/extension_util.h"
21 #include "extensions/browser/management_policy.h" 22 #include "extensions/browser/management_policy.h"
23 #include "extensions/common/switches.h"
22 24
23 using extensions::Extension; 25 using extensions::Extension;
24 using extensions::ExtensionPrefs; 26 using extensions::ExtensionPrefs;
25 using extensions::ExtensionRegistry; 27 using extensions::ExtensionRegistry;
26 using extensions::ExtensionSystem; 28 using extensions::ExtensionSystem;
27 namespace webstore_install = extensions::webstore_install; 29 namespace webstore_install = extensions::webstore_install;
28 30
29 namespace { 31 namespace {
30 32
31 const char kWebstoreDomain[] = "cws.com"; 33 const char kWebstoreDomain[] = "cws.com";
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 EphemeralAppLauncherTest() 188 EphemeralAppLauncherTest()
187 : WebstoreInstallerTest(kWebstoreDomain, 189 : WebstoreInstallerTest(kWebstoreDomain,
188 kTestDataPath, 190 kTestDataPath,
189 kDefaultAppCrxFilename, 191 kDefaultAppCrxFilename,
190 kAppDomain, 192 kAppDomain,
191 kNonAppDomain) {} 193 kNonAppDomain) {}
192 194
193 virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE { 195 virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE {
194 WebstoreInstallerTest::SetUpCommandLine(command_line); 196 WebstoreInstallerTest::SetUpCommandLine(command_line);
195 197
198 // Make event pages get suspended immediately.
199 command_line->AppendSwitchASCII(extensions::switches::kEventPageIdleTime,
200 "10");
201 command_line->AppendSwitchASCII(
202 extensions::switches::kEventPageSuspendingTime, "10");
203
196 // Enable ephemeral apps flag. 204 // Enable ephemeral apps flag.
197 command_line->AppendSwitch(switches::kEnableEphemeralApps); 205 command_line->AppendSwitch(switches::kEnableEphemeralApps);
198 } 206 }
199 207
208 virtual void SetUpOnMainThread() OVERRIDE {
209 WebstoreInstallerTest::SetUpOnMainThread();
210
211 // Unload ephemeral apps immediately after they stop running in tests.
212 EphemeralAppService::Get(profile())->set_unload_delay_for_test(0);
213 }
214
200 base::FilePath GetTestPath(const char* test_name) { 215 base::FilePath GetTestPath(const char* test_name) {
201 return test_data_dir_.AppendASCII("platform_apps/ephemeral_launcher") 216 return test_data_dir_.AppendASCII("platform_apps/ephemeral_launcher")
202 .AppendASCII(test_name); 217 .AppendASCII(test_name);
203 } 218 }
204 219
205 const Extension* GetInstalledExtension(const std::string& id) { 220 const Extension* GetInstalledExtension(const std::string& id) {
206 return ExtensionRegistry::Get(profile()) 221 return ExtensionRegistry::Get(profile())
207 ->GetExtensionById(id, ExtensionRegistry::EVERYTHING); 222 ->GetExtensionById(id, ExtensionRegistry::EVERYTHING);
208 } 223 }
209 224
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 } 269 }
255 270
256 const Extension* InstallAndDisableApp( 271 const Extension* InstallAndDisableApp(
257 const char* test_path, 272 const char* test_path,
258 Extension::DisableReason disable_reason) { 273 Extension::DisableReason disable_reason) {
259 const Extension* app = InstallExtension(GetTestPath(test_path), 1); 274 const Extension* app = InstallExtension(GetTestPath(test_path), 1);
260 EXPECT_TRUE(app); 275 EXPECT_TRUE(app);
261 if (!app) 276 if (!app)
262 return NULL; 277 return NULL;
263 278
264 if (disable_reason == Extension::DISABLE_GREYLIST) {
265 ExtensionPrefs::Get(profile())->SetExtensionBlacklistState(
266 app->id(), extensions::BLACKLISTED_MALWARE);
267 }
268
269 ExtensionService* service = 279 ExtensionService* service =
270 ExtensionSystem::Get(profile())->extension_service(); 280 ExtensionSystem::Get(profile())->extension_service();
271 service->DisableExtension(app->id(), disable_reason); 281 service->DisableExtension(app->id(), disable_reason);
272 282
273 if (disable_reason == Extension::DISABLE_PERMISSIONS_INCREASE) { 283 if (disable_reason == Extension::DISABLE_PERMISSIONS_INCREASE) {
274 // When an extension is disabled due to a permissions increase, this 284 // When an extension is disabled due to a permissions increase, this
275 // flag needs to be set too, for some reason. 285 // flag needs to be set too, for some reason.
276 ExtensionPrefs::Get(profile()) 286 ExtensionPrefs::Get(profile())
277 ->SetDidExtensionEscalatePermissions(app, true); 287 ->SetDidExtensionEscalatePermissions(app, true);
278 } 288 }
279 289
280 EXPECT_FALSE( 290 EXPECT_TRUE(
281 ExtensionRegistry::Get(profile())->enabled_extensions().Contains( 291 ExtensionRegistry::Get(profile())->disabled_extensions().Contains(
282 app->id())); 292 app->id()));
283 return app; 293 return app;
284 } 294 }
285 }; 295 };
286 296
287 class EphemeralAppLauncherTestDisabled : public EphemeralAppLauncherTest { 297 class EphemeralAppLauncherTestDisabled : public EphemeralAppLauncherTest {
288 public: 298 public:
289 virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE { 299 virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE {
290 // Skip EphemeralAppLauncherTest as it enables the feature. 300 // Skip EphemeralAppLauncherTest as it enables the feature.
291 WebstoreInstallerTest::SetUpCommandLine(command_line); 301 WebstoreInstallerTest::SetUpCommandLine(command_line);
292 } 302 }
293 }; 303 };
294 304
295 // Verifies that an ephemeral app will not be installed and launched if the 305 // Verifies that an ephemeral app will not be installed and launched if the
296 // feature is disabled. 306 // feature is disabled.
297 IN_PROC_BROWSER_TEST_F(EphemeralAppLauncherTestDisabled, FeatureDisabled) { 307 IN_PROC_BROWSER_TEST_F(EphemeralAppLauncherTestDisabled, FeatureDisabled) {
298 RunLaunchTest( 308 RunLaunchTest(
299 kDefaultAppCrxFilename, webstore_install::LAUNCH_FEATURE_DISABLED, false); 309 kDefaultAppCrxFilename, webstore_install::LAUNCH_FEATURE_DISABLED, false);
300 EXPECT_FALSE(GetInstalledExtension(kDefaultAppId)); 310 EXPECT_FALSE(GetInstalledExtension(kDefaultAppId));
301 } 311 }
302 312
303 // Verifies that an app with no permission warnings will be installed 313 // Verifies that an app with no permission warnings will be installed
304 // ephemerally and launched without prompting the user. 314 // ephemerally and launched without prompting the user.
305 IN_PROC_BROWSER_TEST_F(EphemeralAppLauncherTest, 315 IN_PROC_BROWSER_TEST_F(EphemeralAppLauncherTest,
306 LaunchAppWithNoPermissionWarnings) { 316 LaunchAppWithNoPermissionWarnings) {
317 content::WindowedNotificationObserver unloaded_signal(
318 chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
319 content::Source<Profile>(profile()));
320
307 scoped_refptr<EphemeralAppLauncherForTest> launcher( 321 scoped_refptr<EphemeralAppLauncherForTest> launcher(
308 new EphemeralAppLauncherForTest(kDefaultAppId, profile())); 322 new EphemeralAppLauncherForTest(kDefaultAppId, profile()));
309 StartLauncherAndCheckResult(launcher.get(), webstore_install::SUCCESS, true); 323 StartLauncherAndCheckResult(launcher.get(), webstore_install::SUCCESS, true);
310 ValidateAppInstalledEphemerally(kDefaultAppId); 324 ValidateAppInstalledEphemerally(kDefaultAppId);
311 325
312 // Apps with no permission warnings should not result in a prompt. 326 // Apps with no permission warnings should not result in a prompt.
313 EXPECT_FALSE(launcher->install_prompt_created()); 327 EXPECT_FALSE(launcher->install_prompt_created());
314 328
329 // Ephemeral apps are unloaded after they stop running.
330 unloaded_signal.Wait();
331
315 // After an app has been installed ephemerally, it can be launched again 332 // After an app has been installed ephemerally, it can be launched again
316 // without installing from the web store. 333 // without installing from the web store.
317 RunLaunchTest(kDefaultAppId, webstore_install::SUCCESS, false); 334 RunLaunchTest(kDefaultAppId, webstore_install::SUCCESS, false);
318 } 335 }
319 336
320 // Verifies that an app with permission warnings will be installed 337 // Verifies that an app with permission warnings will be installed
321 // ephemerally and launched if accepted by the user. 338 // ephemerally and launched if accepted by the user.
322 IN_PROC_BROWSER_TEST_F(EphemeralAppLauncherTest, 339 IN_PROC_BROWSER_TEST_F(EphemeralAppLauncherTest,
323 LaunchAppWithPermissionsWarnings) { 340 LaunchAppWithPermissionsWarnings) {
324 SetCrxFilename(kAppWithPermissionsFilename); 341 SetCrxFilename(kAppWithPermissionsFilename);
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 ManagementPolicyMock policy; 512 ManagementPolicyMock policy;
496 ExtensionSystem::Get(profile())->management_policy()->RegisterProvider( 513 ExtensionSystem::Get(profile())->management_policy()->RegisterProvider(
497 &policy); 514 &policy);
498 ExtensionSystem::Get(profile())->extension_service()->CheckManagementPolicy(); 515 ExtensionSystem::Get(profile())->extension_service()->CheckManagementPolicy();
499 516
500 RunLaunchTest(app->id(), webstore_install::BLOCKED_BY_POLICY, false); 517 RunLaunchTest(app->id(), webstore_install::BLOCKED_BY_POLICY, false);
501 } 518 }
502 519
503 // Verifies that an installed blacklisted app cannot be launched. 520 // Verifies that an installed blacklisted app cannot be launched.
504 IN_PROC_BROWSER_TEST_F(EphemeralAppLauncherTest, LaunchBlacklistedApp) { 521 IN_PROC_BROWSER_TEST_F(EphemeralAppLauncherTest, LaunchBlacklistedApp) {
505 const Extension* app = 522 const Extension* app = InstallExtension(GetTestPath(kDefaultAppTestPath), 1);
506 InstallAndDisableApp(kDefaultAppTestPath, Extension::DISABLE_GREYLIST);
507 ASSERT_TRUE(app); 523 ASSERT_TRUE(app);
508 524
525 ExtensionService* service =
526 ExtensionSystem::Get(profile())->extension_service();
527 service->BlacklistExtensionForTest(app->id());
528 ASSERT_TRUE(
529 ExtensionRegistry::Get(profile())->blacklisted_extensions().Contains(
530 app->id()));
531
509 RunLaunchTest(app->id(), webstore_install::BLACKLISTED, false); 532 RunLaunchTest(app->id(), webstore_install::BLACKLISTED, false);
510 } 533 }
511 534
512 // Verifies that an installed app with unsupported requirements cannot be 535 // Verifies that an installed app with unsupported requirements cannot be
513 // launched. 536 // launched.
514 IN_PROC_BROWSER_TEST_F(EphemeralAppLauncherTest, 537 IN_PROC_BROWSER_TEST_F(EphemeralAppLauncherTest,
515 LaunchAppWithUnsupportedRequirements) { 538 LaunchAppWithUnsupportedRequirements) {
516 const Extension* app = InstallAndDisableApp( 539 const Extension* app = InstallAndDisableApp(
517 kDefaultAppTestPath, Extension::DISABLE_UNSUPPORTED_REQUIREMENT); 540 kDefaultAppTestPath, Extension::DISABLE_UNSUPPORTED_REQUIREMENT);
518 ASSERT_TRUE(app); 541 ASSERT_TRUE(app);
519 542
520 RunLaunchTest(app->id(), webstore_install::REQUIREMENT_VIOLATIONS, false); 543 RunLaunchTest(app->id(), webstore_install::REQUIREMENT_VIOLATIONS, false);
521 } 544 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698