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

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

Issue 282103003: Moved IS_EPHEMERAL flag to extension prefs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix up file header Created 6 years, 7 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
« no previous file with comments | « apps/saved_files_service.cc ('k') | chrome/browser/apps/ephemeral_app_launcher.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "apps/saved_files_service.h" 5 #include "apps/saved_files_service.h"
6 #include "base/files/scoped_temp_dir.h" 6 #include "base/files/scoped_temp_dir.h"
7 #include "base/stl_util.h" 7 #include "base/stl_util.h"
8 #include "chrome/browser/apps/app_browsertest_util.h" 8 #include "chrome/browser/apps/app_browsertest_util.h"
9 #include "chrome/browser/apps/ephemeral_app_service.h" 9 #include "chrome/browser/apps/ephemeral_app_service.h"
10 #include "chrome/browser/extensions/api/file_system/file_system_api.h" 10 #include "chrome/browser/extensions/api/file_system/file_system_api.h"
11 #include "chrome/browser/extensions/extension_service.h" 11 #include "chrome/browser/extensions/extension_service.h"
12 #include "chrome/browser/extensions/extension_test_message_listener.h" 12 #include "chrome/browser/extensions/extension_test_message_listener.h"
13 #include "chrome/browser/extensions/extension_util.h" 13 #include "chrome/browser/extensions/extension_util.h"
14 #include "chrome/browser/notifications/desktop_notification_service.h" 14 #include "chrome/browser/notifications/desktop_notification_service.h"
15 #include "chrome/browser/notifications/desktop_notification_service_factory.h" 15 #include "chrome/browser/notifications/desktop_notification_service_factory.h"
16 #include "chrome/common/extensions/api/alarms.h" 16 #include "chrome/common/extensions/api/alarms.h"
17 #include "content/public/test/browser_test.h" 17 #include "content/public/test/browser_test.h"
18 #include "content/public/test/test_utils.h" 18 #include "content/public/test/test_utils.h"
19 #include "extensions/browser/event_router.h" 19 #include "extensions/browser/event_router.h"
20 #include "extensions/browser/extension_prefs.h" 20 #include "extensions/browser/extension_prefs.h"
21 #include "extensions/browser/extension_system.h" 21 #include "extensions/browser/extension_system.h"
22 #include "extensions/browser/extension_util.h"
22 #include "extensions/browser/process_manager.h" 23 #include "extensions/browser/process_manager.h"
23 #include "extensions/common/switches.h" 24 #include "extensions/common/switches.h"
24 #include "ui/message_center/message_center.h" 25 #include "ui/message_center/message_center.h"
25 #include "ui/message_center/notifier_settings.h" 26 #include "ui/message_center/notifier_settings.h"
26 27
27 using extensions::Event; 28 using extensions::Event;
28 using extensions::EventRouter; 29 using extensions::EventRouter;
29 using extensions::Extension; 30 using extensions::Extension;
30 using extensions::ExtensionInfo; 31 using extensions::ExtensionInfo;
31 using extensions::ExtensionPrefs; 32 using extensions::ExtensionPrefs;
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 extensions::switches::kEventPageSuspendingTime, "10"); 86 extensions::switches::kEventPageSuspendingTime, "10");
86 } 87 }
87 88
88 base::FilePath GetTestPath(const char* test_path) { 89 base::FilePath GetTestPath(const char* test_path) {
89 return test_data_dir_.AppendASCII("platform_apps").AppendASCII(test_path); 90 return test_data_dir_.AppendASCII("platform_apps").AppendASCII(test_path);
90 } 91 }
91 92
92 const Extension* InstallEphemeralApp(const char* test_path, 93 const Extension* InstallEphemeralApp(const char* test_path,
93 Manifest::Location manifest_location) { 94 Manifest::Location manifest_location) {
94 const Extension* extension = 95 const Extension* extension =
95 InstallExtensionWithSourceAndFlags( 96 InstallEphemeralAppWithSourceAndFlags(
96 GetTestPath(test_path), 97 GetTestPath(test_path),
97 1, 98 1,
98 manifest_location, 99 manifest_location,
99 Extension::IS_EPHEMERAL); 100 Extension::NO_FLAGS);
100 return extension; 101 return extension;
101 } 102 }
102 103
103 const Extension* InstallEphemeralApp(const char* test_path) { 104 const Extension* InstallEphemeralApp(const char* test_path) {
104 return InstallEphemeralApp(test_path, Manifest::INTERNAL); 105 return InstallEphemeralApp(test_path, Manifest::INTERNAL);
105 } 106 }
106 107
107 const Extension* InstallAndLaunchEphemeralApp(const char* test_path) { 108 const Extension* InstallAndLaunchEphemeralApp(const char* test_path) {
108 ExtensionTestMessageListener launched_listener("launched", false); 109 ExtensionTestMessageListener launched_listener("launched", false);
109 const Extension* extension = InstallEphemeralApp(test_path); 110 const Extension* extension = InstallEphemeralApp(test_path);
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 // Verify that messages are not received while the app is inactive. 241 // Verify that messages are not received while the app is inactive.
241 LoadAndLaunchPlatformApp("ephemeral_apps/messaging_sender_fail"); 242 LoadAndLaunchPlatformApp("ephemeral_apps/messaging_sender_fail");
242 EXPECT_TRUE(result_catcher.GetNextResult()); 243 EXPECT_TRUE(result_catcher.GetNextResult());
243 } 244 }
244 245
245 // Verify that an updated ephemeral app will still have its ephemeral flag 246 // Verify that an updated ephemeral app will still have its ephemeral flag
246 // enabled. 247 // enabled.
247 IN_PROC_BROWSER_TEST_F(EphemeralAppBrowserTest, UpdateEphemeralApp) { 248 IN_PROC_BROWSER_TEST_F(EphemeralAppBrowserTest, UpdateEphemeralApp) {
248 const Extension* app_v1 = InstallEphemeralApp(kMessagingReceiverApp); 249 const Extension* app_v1 = InstallEphemeralApp(kMessagingReceiverApp);
249 ASSERT_TRUE(app_v1); 250 ASSERT_TRUE(app_v1);
250 ASSERT_TRUE(app_v1->is_ephemeral()); 251 ASSERT_TRUE(extensions::util::IsEphemeralApp(app_v1->id(), profile()));
251 std::string app_id = app_v1->id(); 252 std::string app_id = app_v1->id();
252 base::Version app_original_version = *app_v1->version(); 253 base::Version app_original_version = *app_v1->version();
253 app_v1 = NULL; // The extension object will be destroyed during update. 254 app_v1 = NULL; // The extension object will be destroyed during update.
254 255
255 // Pack version 2 of the app. 256 // Pack version 2 of the app.
256 base::ScopedTempDir temp_dir; 257 base::ScopedTempDir temp_dir;
257 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 258 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
258 259
259 base::FilePath crx_path = temp_dir.path().AppendASCII("temp.crx"); 260 base::FilePath crx_path = temp_dir.path().AppendASCII("temp.crx");
260 if (!base::DeleteFile(crx_path, false)) { 261 if (!base::DeleteFile(crx_path, false)) {
(...skipping 16 matching lines...) Expand all
277 content::Source<extensions::CrxInstaller>(crx_installer)); 278 content::Source<extensions::CrxInstaller>(crx_installer));
278 ExtensionService* service = 279 ExtensionService* service =
279 ExtensionSystem::Get(browser()->profile())->extension_service(); 280 ExtensionSystem::Get(browser()->profile())->extension_service();
280 EXPECT_TRUE(service->UpdateExtension(app_id, app_v2_path, true, 281 EXPECT_TRUE(service->UpdateExtension(app_id, app_v2_path, true,
281 &crx_installer)); 282 &crx_installer));
282 windowed_observer.Wait(); 283 windowed_observer.Wait();
283 284
284 const Extension* app_v2 = service->GetExtensionById(app_id, false); 285 const Extension* app_v2 = service->GetExtensionById(app_id, false);
285 ASSERT_TRUE(app_v2); 286 ASSERT_TRUE(app_v2);
286 EXPECT_TRUE(app_v2->version()->CompareTo(app_original_version) > 0); 287 EXPECT_TRUE(app_v2->version()->CompareTo(app_original_version) > 0);
287 EXPECT_TRUE(app_v2->is_ephemeral()); 288 EXPECT_TRUE(extensions::util::IsEphemeralApp(app_v2->id(), profile()));
288 } 289 }
289 290
290 // Verify that if notifications have been disabled for an ephemeral app, it will 291 // Verify that if notifications have been disabled for an ephemeral app, it will
291 // remain disabled even after being evicted from the cache. 292 // remain disabled even after being evicted from the cache.
292 IN_PROC_BROWSER_TEST_F(EphemeralAppBrowserTest, StickyNotificationSettings) { 293 IN_PROC_BROWSER_TEST_F(EphemeralAppBrowserTest, StickyNotificationSettings) {
293 const Extension* app = InstallEphemeralApp(kNotificationsTestApp); 294 const Extension* app = InstallEphemeralApp(kNotificationsTestApp);
294 ASSERT_TRUE(app); 295 ASSERT_TRUE(app);
295 296
296 // Disable notifications for this app. 297 // Disable notifications for this app.
297 DesktopNotificationService* notification_service = 298 DesktopNotificationService* notification_service =
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 const std::string app_id = app->id(); 402 const std::string app_id = app->id();
402 EvictApp(app->id()); 403 EvictApp(app->id());
403 app = NULL; 404 app = NULL;
404 405
405 // The app should be in the list of evicted apps. 406 // The app should be in the list of evicted apps.
406 ExtensionPrefs* prefs = ExtensionPrefs::Get(browser()->profile()); 407 ExtensionPrefs* prefs = ExtensionPrefs::Get(browser()->profile());
407 ASSERT_TRUE(prefs); 408 ASSERT_TRUE(prefs);
408 scoped_ptr<ExtensionPrefs::ExtensionsInfo> extensions_info( 409 scoped_ptr<ExtensionPrefs::ExtensionsInfo> extensions_info(
409 prefs->GetEvictedEphemeralAppsInfo()); 410 prefs->GetEvictedEphemeralAppsInfo());
410 EXPECT_TRUE(IsAppInExtensionsInfo(*extensions_info, app_id)); 411 EXPECT_TRUE(IsAppInExtensionsInfo(*extensions_info, app_id));
412 scoped_ptr<ExtensionInfo> single_extension_info(
413 prefs->GetEvictedEphemeralAppInfo(app_id));
414 EXPECT_TRUE(single_extension_info.get());
411 415
412 // The app should not be in the list of installed extensions. 416 // The app should not be in the list of installed extensions.
413 extensions_info = prefs->GetInstalledExtensionsInfo(); 417 extensions_info = prefs->GetInstalledExtensionsInfo();
414 EXPECT_FALSE(IsAppInExtensionsInfo(*extensions_info, app_id)); 418 EXPECT_FALSE(IsAppInExtensionsInfo(*extensions_info, app_id));
415 419
416 // Ensure the evicted app is considered to have isolated storage. This will 420 // Ensure the evicted app is considered to have isolated storage. This will
417 // prevent its data from getting garbage collected by 421 // prevent its data from getting garbage collected by
418 // ExtensionService::GarbageCollectIsolatedStorage(). 422 // ExtensionService::GarbageCollectIsolatedStorage().
419 GURL site_url = extensions::util::GetSiteForExtensionId( 423 GURL site_url = extensions::util::GetSiteForExtensionId(
420 app_id, browser()->profile()); 424 app_id, browser()->profile());
421 EXPECT_TRUE(extensions::util::SiteHasIsolatedStorage( 425 EXPECT_TRUE(extensions::util::SiteHasIsolatedStorage(
422 site_url, browser()->profile())); 426 site_url, browser()->profile()));
423 427
424 // Phase 2 - Reinstall the ephemeral app and verify that data still exists 428 // Phase 2 - Reinstall the ephemeral app and verify that data still exists
425 // in the storage. 429 // in the storage.
426 app = InstallEphemeralApp(kRetainDataApp); 430 app = InstallEphemeralApp(kRetainDataApp);
427 ASSERT_TRUE(app); 431 ASSERT_TRUE(app);
428 EXPECT_TRUE(LaunchAppAndRunTest(app, "ReadData")) << message_; 432 EXPECT_TRUE(LaunchAppAndRunTest(app, "ReadData")) << message_;
429 433
430 // The app should now be in the list of installed extensions, but not in the 434 // The app should now be in the list of installed extensions, but not in the
431 // list of evicted apps. 435 // list of evicted apps.
432 extensions_info = prefs->GetInstalledExtensionsInfo(); 436 extensions_info = prefs->GetInstalledExtensionsInfo();
433 EXPECT_TRUE(IsAppInExtensionsInfo(*extensions_info, app_id)); 437 EXPECT_TRUE(IsAppInExtensionsInfo(*extensions_info, app_id));
434 extensions_info = prefs->GetEvictedEphemeralAppsInfo(); 438 extensions_info = prefs->GetEvictedEphemeralAppsInfo();
435 EXPECT_FALSE(IsAppInExtensionsInfo(*extensions_info, app_id)); 439 EXPECT_FALSE(IsAppInExtensionsInfo(*extensions_info, app_id));
440 single_extension_info = prefs->GetEvictedEphemeralAppInfo(app_id);
441 EXPECT_FALSE(single_extension_info.get());
442 }
443
444 // Verify that preferences are updated correctly when an evicted ephemeral app
445 // is re-installed permanently.
446 IN_PROC_BROWSER_TEST_F(EphemeralAppBrowserTest, InstallEvictedEphemeralApp) {
447 const Extension* app = InstallEphemeralApp(kRetainDataApp);
448 ASSERT_TRUE(app);
449
450 // Remove the app.
451 EvictApp(app->id());
452 app = NULL;
453
454 // Install the app permanently.
455 app = InstallPlatformApp(kRetainDataApp);
456 ASSERT_TRUE(app);
457
458 // Verify that preferences are correct.
459 ExtensionPrefs* prefs = ExtensionPrefs::Get(browser()->profile());
460 ASSERT_TRUE(prefs);
461 EXPECT_FALSE(prefs->IsEphemeralApp(app->id()));
462
463 scoped_ptr<ExtensionPrefs::ExtensionsInfo> extensions_info(
464 prefs->GetEvictedEphemeralAppsInfo());
465 EXPECT_FALSE(IsAppInExtensionsInfo(*extensions_info, app->id()));
466 extensions_info = prefs->GetInstalledExtensionsInfo();
467 EXPECT_TRUE(IsAppInExtensionsInfo(*extensions_info, app->id()));
436 } 468 }
437 469
438 // Verify that the data of regular installed apps are deleted on uninstall. 470 // Verify that the data of regular installed apps are deleted on uninstall.
439 IN_PROC_BROWSER_TEST_F(EphemeralAppBrowserTest, RemoveInstalledData) { 471 IN_PROC_BROWSER_TEST_F(EphemeralAppBrowserTest, RemoveInstalledData) {
440 // Install the ephemeral app and write data to various storage. 472 // Install the ephemeral app and write data to various storage.
441 const Extension* app = InstallPlatformApp(kRetainDataApp); 473 const Extension* app = InstallPlatformApp(kRetainDataApp);
442 ASSERT_TRUE(app); 474 ASSERT_TRUE(app);
443 ASSERT_TRUE(LaunchAppAndRunTest(app, "WriteData")) << message_; 475 ASSERT_TRUE(LaunchAppAndRunTest(app, "WriteData")) << message_;
444 476
445 // Remove the app. 477 // Remove the app.
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 534
503 // The garbage collected app should no longer be in the preferences. 535 // The garbage collected app should no longer be in the preferences.
504 extensions_info = prefs->GetEvictedEphemeralAppsInfo(); 536 extensions_info = prefs->GetEvictedEphemeralAppsInfo();
505 EXPECT_TRUE(IsAppInExtensionsInfo(*extensions_info, retain_app_id)); 537 EXPECT_TRUE(IsAppInExtensionsInfo(*extensions_info, retain_app_id));
506 ASSERT_FALSE(IsAppInExtensionsInfo(*extensions_info, evict_app_id)); 538 ASSERT_FALSE(IsAppInExtensionsInfo(*extensions_info, evict_app_id));
507 539
508 // Reinstall the app and verify that all data has been reset. 540 // Reinstall the app and verify that all data has been reset.
509 evict_app = InstallEphemeralApp(kRetainDataApp); 541 evict_app = InstallEphemeralApp(kRetainDataApp);
510 ASSERT_TRUE(LaunchAppAndRunTest(evict_app, "DataReset")) << message_; 542 ASSERT_TRUE(LaunchAppAndRunTest(evict_app, "DataReset")) << message_;
511 } 543 }
OLDNEW
« no previous file with comments | « apps/saved_files_service.cc ('k') | chrome/browser/apps/ephemeral_app_launcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698