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

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

Issue 337323003: Remove the ability to retain local data of evicted ephemeral apps (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove an unused declaration Created 6 years, 6 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 "chrome/browser/apps/ephemeral_app_browsertest.h" 5 #include "chrome/browser/apps/ephemeral_app_browsertest.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "apps/saved_files_service.h" 9 #include "apps/saved_files_service.h"
10 #include "base/files/scoped_temp_dir.h" 10 #include "base/files/scoped_temp_dir.h"
11 #include "base/scoped_observer.h" 11 #include "base/scoped_observer.h"
12 #include "base/stl_util.h" 12 #include "base/stl_util.h"
13 #include "chrome/browser/apps/app_browsertest_util.h" 13 #include "chrome/browser/apps/app_browsertest_util.h"
14 #include "chrome/browser/apps/ephemeral_app_service.h"
15 #include "chrome/browser/extensions/api/file_system/file_system_api.h" 14 #include "chrome/browser/extensions/api/file_system/file_system_api.h"
16 #include "chrome/browser/extensions/app_sync_data.h" 15 #include "chrome/browser/extensions/app_sync_data.h"
17 #include "chrome/browser/extensions/extension_service.h" 16 #include "chrome/browser/extensions/extension_service.h"
18 #include "chrome/browser/extensions/extension_sync_service.h" 17 #include "chrome/browser/extensions/extension_sync_service.h"
19 #include "chrome/browser/extensions/extension_test_message_listener.h" 18 #include "chrome/browser/extensions/extension_test_message_listener.h"
20 #include "chrome/browser/extensions/extension_util.h" 19 #include "chrome/browser/extensions/extension_util.h"
21 #include "chrome/browser/notifications/desktop_notification_service.h" 20 #include "chrome/browser/notifications/desktop_notification_service.h"
22 #include "chrome/browser/notifications/desktop_notification_service_factory.h" 21 #include "chrome/browser/notifications/desktop_notification_service_factory.h"
23 #include "chrome/common/chrome_switches.h" 22 #include "chrome/common/chrome_switches.h"
24 #include "chrome/common/extensions/api/alarms.h" 23 #include "chrome/common/extensions/api/alarms.h"
(...skipping 12 matching lines...) Expand all
37 #include "sync/api/fake_sync_change_processor.h" 36 #include "sync/api/fake_sync_change_processor.h"
38 #include "sync/api/sync_change_processor_wrapper_for_test.h" 37 #include "sync/api/sync_change_processor_wrapper_for_test.h"
39 #include "sync/api/sync_error_factory_mock.h" 38 #include "sync/api/sync_error_factory_mock.h"
40 #include "ui/message_center/message_center.h" 39 #include "ui/message_center/message_center.h"
41 #include "ui/message_center/notifier_settings.h" 40 #include "ui/message_center/notifier_settings.h"
42 41
43 using extensions::AppSyncData; 42 using extensions::AppSyncData;
44 using extensions::Event; 43 using extensions::Event;
45 using extensions::EventRouter; 44 using extensions::EventRouter;
46 using extensions::Extension; 45 using extensions::Extension;
47 using extensions::ExtensionInfo;
48 using extensions::ExtensionPrefs; 46 using extensions::ExtensionPrefs;
49 using extensions::ExtensionRegistry; 47 using extensions::ExtensionRegistry;
50 using extensions::ExtensionRegistryObserver; 48 using extensions::ExtensionRegistryObserver;
51 using extensions::ExtensionSystem; 49 using extensions::ExtensionSystem;
52 using extensions::Manifest; 50 using extensions::Manifest;
53 51
54 namespace { 52 namespace {
55 53
56 namespace alarms = extensions::api::alarms; 54 namespace alarms = extensions::api::alarms;
57 55
58 const char kDispatchEventTestApp[] = "ephemeral_apps/dispatch_event"; 56 const char kDispatchEventTestApp[] = "ephemeral_apps/dispatch_event";
59 const char kNotificationsTestApp[] = "ephemeral_apps/notification_settings"; 57 const char kNotificationsTestApp[] = "ephemeral_apps/notification_settings";
60 const char kFileSystemTestApp[] = "ephemeral_apps/filesystem_retain_entries"; 58 const char kFileSystemTestApp[] = "ephemeral_apps/filesystem_retain_entries";
61 const char kRetainDataApp[] = "ephemeral_apps/retain_data";
62 59
63 typedef std::vector<message_center::Notifier*> NotifierList; 60 typedef std::vector<message_center::Notifier*> NotifierList;
64 61
65 bool IsNotifierInList(const message_center::NotifierId& notifier_id, 62 bool IsNotifierInList(const message_center::NotifierId& notifier_id,
66 const NotifierList& notifiers) { 63 const NotifierList& notifiers) {
67 for (NotifierList::const_iterator it = notifiers.begin(); 64 for (NotifierList::const_iterator it = notifiers.begin();
68 it != notifiers.end(); ++it) { 65 it != notifiers.end(); ++it) {
69 const message_center::Notifier* notifier = *it; 66 const message_center::Notifier* notifier = *it;
70 if (notifier->notifier_id == notifier_id) 67 if (notifier->notifier_id == notifier_id)
71 return true; 68 return true;
72 } 69 }
73 70
74 return false; 71 return false;
75 } 72 }
76 73
77 bool IsAppInExtensionsInfo(const ExtensionPrefs::ExtensionsInfo& ext_info,
78 const std::string& extension_id) {
79 for (size_t i = 0; i < ext_info.size(); ++i) {
80 ExtensionInfo* info = ext_info.at(i).get();
81 if (info->extension_id == extension_id)
82 return true;
83 }
84
85 return false;
86 }
87
88 // Saves some parameters from the extension installed notification in order 74 // Saves some parameters from the extension installed notification in order
89 // to verify them in tests. 75 // to verify them in tests.
90 class InstallObserver : public ExtensionRegistryObserver { 76 class InstallObserver : public ExtensionRegistryObserver {
91 public: 77 public:
92 struct InstallParameters { 78 struct InstallParameters {
93 std::string id; 79 std::string id;
94 bool is_update; 80 bool is_update;
95 bool from_ephemeral; 81 bool from_ephemeral;
96 82
97 InstallParameters( 83 InstallParameters(
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 dummy_alarm.name = "test_alarm"; 280 dummy_alarm.name = "test_alarm";
295 281
296 scoped_ptr<base::ListValue> args(new base::ListValue()); 282 scoped_ptr<base::ListValue> args(new base::ListValue());
297 args->Append(dummy_alarm.ToValue().release()); 283 args->Append(dummy_alarm.ToValue().release());
298 scoped_ptr<Event> event(new Event(alarms::OnAlarm::kEventName, 284 scoped_ptr<Event> event(new Event(alarms::OnAlarm::kEventName,
299 args.Pass())); 285 args.Pass()));
300 286
301 event_router->DispatchEventToExtension(app_id, event.Pass()); 287 event_router->DispatchEventToExtension(app_id, event.Pass());
302 } 288 }
303 289
304 void GarbageCollectData() {
305 EphemeralAppService* service =
306 EphemeralAppService::Get(profile());
307 ASSERT_TRUE(service);
308 service->GarbageCollectData();
309 }
310
311 const Extension* ReplaceEphemeralApp(const std::string& app_id, 290 const Extension* ReplaceEphemeralApp(const std::string& app_id,
312 const char* test_path) { 291 const char* test_path) {
313 return UpdateExtensionWaitForIdle(app_id, GetTestPath(test_path), 0); 292 return UpdateExtensionWaitForIdle(app_id, GetTestPath(test_path), 0);
314 } 293 }
315 294
316 void VerifyPromotedApp(const std::string& app_id, 295 void VerifyPromotedApp(const std::string& app_id,
317 ExtensionRegistry::IncludeFlag expected_set) { 296 ExtensionRegistry::IncludeFlag expected_set) {
318 const Extension* app = ExtensionRegistry::Get(profile())->GetExtensionById( 297 const Extension* app = ExtensionRegistry::Get(profile())->GetExtensionById(
319 app_id, expected_set); 298 app_id, expected_set);
320 ASSERT_TRUE(app); 299 ASSERT_TRUE(app);
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 // flushed. 512 // flushed.
534 std::vector<apps::SavedFileEntry> file_entries = 513 std::vector<apps::SavedFileEntry> file_entries =
535 apps::SavedFilesService::Get(profile()) 514 apps::SavedFilesService::Get(profile())
536 ->GetAllFileEntries(app->id()); 515 ->GetAllFileEntries(app->id());
537 EXPECT_TRUE(file_entries.empty()); 516 EXPECT_TRUE(file_entries.empty());
538 517
539 // The second test verifies that the file cannot be reopened. 518 // The second test verifies that the file cannot be reopened.
540 ASSERT_TRUE(LaunchAppAndRunTest(app, "RestoreRetainedFile")) << message_; 519 ASSERT_TRUE(LaunchAppAndRunTest(app, "RestoreRetainedFile")) << message_;
541 } 520 }
542 521
543 // Verify that once evicted from the cache, the data of ephemeral apps will not
544 // be deleted.
545 IN_PROC_BROWSER_TEST_F(EphemeralAppBrowserTest, RetainData) {
546 // Phase 1 - Install the ephemeral app and write data to various storage.
547 const Extension* app = InstallEphemeralApp(kRetainDataApp);
548 ASSERT_TRUE(app);
549 ASSERT_TRUE(LaunchAppAndRunTest(app, "WriteData")) << message_;
550
551 // Sanity check to ensure that the ReadData tests should pass before the app
552 // is removed.
553 ASSERT_TRUE(LaunchAppAndRunTest(app, "ReadData")) << message_;
554
555 // Remove the app.
556 const std::string app_id = app->id();
557 EvictApp(app->id());
558 app = NULL;
559
560 // The app should be in the list of evicted apps.
561 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile());
562 ASSERT_TRUE(prefs);
563 scoped_ptr<ExtensionPrefs::ExtensionsInfo> extensions_info(
564 prefs->GetEvictedEphemeralAppsInfo());
565 EXPECT_TRUE(IsAppInExtensionsInfo(*extensions_info, app_id));
566 scoped_ptr<ExtensionInfo> single_extension_info(
567 prefs->GetEvictedEphemeralAppInfo(app_id));
568 EXPECT_TRUE(single_extension_info.get());
569
570 // The app should not be in the list of installed extensions.
571 extensions_info = prefs->GetInstalledExtensionsInfo();
572 EXPECT_FALSE(IsAppInExtensionsInfo(*extensions_info, app_id));
573 EXPECT_FALSE(prefs->IsEphemeralApp(app_id));
574
575 // Ensure the evicted app is considered to have isolated storage. This will
576 // prevent its data from getting garbage collected by
577 // ExtensionService::GarbageCollectIsolatedStorage().
578 GURL site_url = extensions::util::GetSiteForExtensionId(
579 app_id, profile());
580 EXPECT_TRUE(extensions::util::SiteHasIsolatedStorage(
581 site_url, profile()));
582
583 // Phase 2 - Reinstall the ephemeral app and verify that data still exists
584 // in the storage.
585 app = InstallEphemeralApp(kRetainDataApp);
586 ASSERT_TRUE(app);
587 EXPECT_TRUE(LaunchAppAndRunTest(app, "ReadData")) << message_;
588
589 // The app should now be in the list of installed extensions, but not in the
590 // list of evicted apps.
591 extensions_info = prefs->GetInstalledExtensionsInfo();
592 EXPECT_TRUE(IsAppInExtensionsInfo(*extensions_info, app_id));
593 extensions_info = prefs->GetEvictedEphemeralAppsInfo();
594 EXPECT_FALSE(IsAppInExtensionsInfo(*extensions_info, app_id));
595 single_extension_info = prefs->GetEvictedEphemeralAppInfo(app_id);
596 EXPECT_FALSE(single_extension_info.get());
597 EXPECT_TRUE(prefs->IsEphemeralApp(app_id));
598 }
599
600 // Verify that preferences are updated correctly when an evicted ephemeral app
601 // is re-installed permanently.
602 IN_PROC_BROWSER_TEST_F(EphemeralAppBrowserTest, InstallEvictedEphemeralApp) {
603 const Extension* app = InstallEphemeralApp(kRetainDataApp);
604 ASSERT_TRUE(app);
605
606 // Remove the app.
607 EvictApp(app->id());
608 app = NULL;
609
610 // Install the app permanently.
611 app = InstallPlatformApp(kRetainDataApp);
612 ASSERT_TRUE(app);
613
614 // Verify that preferences are correct.
615 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile());
616 ASSERT_TRUE(prefs);
617 EXPECT_FALSE(prefs->IsEphemeralApp(app->id()));
618
619 scoped_ptr<ExtensionPrefs::ExtensionsInfo> extensions_info(
620 prefs->GetEvictedEphemeralAppsInfo());
621 EXPECT_FALSE(IsAppInExtensionsInfo(*extensions_info, app->id()));
622 extensions_info = prefs->GetInstalledExtensionsInfo();
623 EXPECT_TRUE(IsAppInExtensionsInfo(*extensions_info, app->id()));
624 }
625
626 // Verify that the data of regular installed apps are deleted on uninstall.
627 IN_PROC_BROWSER_TEST_F(EphemeralAppBrowserTest, RemoveInstalledData) {
628 // Install the ephemeral app and write data to various storage.
629 const Extension* app = InstallPlatformApp(kRetainDataApp);
630 ASSERT_TRUE(app);
631 ASSERT_TRUE(LaunchAppAndRunTest(app, "WriteData")) << message_;
632
633 // Remove the app.
634 const std::string app_id = app->id();
635 EvictApp(app->id());
636 app = NULL;
637
638 // The app should not be in the preferences.
639 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile());
640 ASSERT_TRUE(prefs);
641 scoped_ptr<ExtensionPrefs::ExtensionsInfo> extensions_info(
642 prefs->GetEvictedEphemeralAppsInfo());
643 EXPECT_FALSE(IsAppInExtensionsInfo(*extensions_info, app_id));
644 extensions_info = prefs->GetInstalledExtensionsInfo();
645 EXPECT_FALSE(IsAppInExtensionsInfo(*extensions_info, app_id));
646
647 // Reinstall the app and verify that all data has been reset.
648 app = InstallPlatformApp(kRetainDataApp);
649 ASSERT_TRUE(LaunchAppAndRunTest(app, "DataReset")) << message_;
650 }
651
652 // Verify that once evicted from the cache, ephemeral apps will remain in
653 // extension prefs, but marked as evicted. After garbage collection of data,
654 // both their data and preferences should be removed.
655 IN_PROC_BROWSER_TEST_F(EphemeralAppBrowserTest, GarbageCollectData) {
656 // Create two apps. Both will be evicted from the cache, but the data of
657 // one will be garbage collected.
658 const Extension* evict_app = InstallEphemeralApp(kRetainDataApp);
659 ASSERT_TRUE(evict_app);
660 ASSERT_TRUE(LaunchAppAndRunTest(evict_app, "WriteData")) << message_;
661 std::string evict_app_id = evict_app->id();
662 EvictApp(evict_app_id);
663 evict_app = NULL;
664
665 const Extension* retain_app = InstallEphemeralApp(kDispatchEventTestApp);
666 ASSERT_TRUE(retain_app);
667 std::string retain_app_id = retain_app->id();
668 EvictApp(retain_app_id);
669 retain_app = NULL;
670
671 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile());
672 ASSERT_TRUE(prefs);
673
674 // Both apps should be in the list of evicted apps.
675 scoped_ptr<ExtensionPrefs::ExtensionsInfo> extensions_info(
676 prefs->GetEvictedEphemeralAppsInfo());
677 EXPECT_TRUE(IsAppInExtensionsInfo(*extensions_info, retain_app_id));
678 EXPECT_TRUE(IsAppInExtensionsInfo(*extensions_info, evict_app_id));
679
680 // Set a fake last launch time so that the ephemeral app's data will be
681 // garbage collected.
682 base::Time launch_time =
683 base::Time::Now() - base::TimeDelta::FromDays(
684 EphemeralAppService::kDataInactiveThreshold + 1);
685 prefs->SetLastLaunchTime(evict_app_id, launch_time);
686 prefs->SetLastLaunchTime(retain_app_id, base::Time::Now());
687
688 // Garbage collect data.
689 GarbageCollectData();
690
691 // The garbage collected app should no longer be in the preferences.
692 extensions_info = prefs->GetEvictedEphemeralAppsInfo();
693 EXPECT_TRUE(IsAppInExtensionsInfo(*extensions_info, retain_app_id));
694 ASSERT_FALSE(IsAppInExtensionsInfo(*extensions_info, evict_app_id));
695
696 // Reinstall the app and verify that all data has been reset.
697 evict_app = InstallEphemeralApp(kRetainDataApp);
698 ASSERT_TRUE(LaunchAppAndRunTest(evict_app, "DataReset")) << message_;
699 }
700
701 // Checks the process of installing and then promoting an ephemeral app. 522 // Checks the process of installing and then promoting an ephemeral app.
702 IN_PROC_BROWSER_TEST_F(EphemeralAppBrowserTest, PromoteEphemeralApp) { 523 IN_PROC_BROWSER_TEST_F(EphemeralAppBrowserTest, PromoteEphemeralApp) {
703 InitSyncService(); 524 InitSyncService();
704 525
705 const Extension* app = InstallEphemeralApp(kRetainDataApp); 526 const Extension* app = InstallEphemeralApp(kNotificationsTestApp);
706 ASSERT_TRUE(app); 527 ASSERT_TRUE(app);
707 528
708 // Ephemeral apps should not be synced. 529 // Ephemeral apps should not be synced.
709 scoped_ptr<AppSyncData> sync_change = GetFirstSyncChangeForApp(app->id()); 530 scoped_ptr<AppSyncData> sync_change = GetFirstSyncChangeForApp(app->id());
710 EXPECT_FALSE(sync_change.get()); 531 EXPECT_FALSE(sync_change.get());
711 532
712 // Promote the app to a regular installed app. 533 // Promote the app to a regular installed app.
713 InstallObserver installed_observer(profile()); 534 InstallObserver installed_observer(profile());
714 PromoteEphemeralApp(app); 535 PromoteEphemeralApp(app);
715 VerifyPromotedApp(app->id(), ExtensionRegistry::ENABLED); 536 VerifyPromotedApp(app->id(), ExtensionRegistry::ENABLED);
716 537
717 // Check the notification parameters. 538 // Check the notification parameters.
718 const InstallObserver::InstallParameters& params = installed_observer.Last(); 539 const InstallObserver::InstallParameters& params = installed_observer.Last();
719 EXPECT_EQ(app->id(), params.id); 540 EXPECT_EQ(app->id(), params.id);
720 EXPECT_TRUE(params.is_update); 541 EXPECT_TRUE(params.is_update);
721 EXPECT_TRUE(params.from_ephemeral); 542 EXPECT_TRUE(params.from_ephemeral);
722 543
723 // The installation should now be synced. 544 // The installation should now be synced.
724 sync_change = GetFirstSyncChangeForApp(app->id()); 545 sync_change = GetFirstSyncChangeForApp(app->id());
725 VerifySyncChange(sync_change.get(), true); 546 VerifySyncChange(sync_change.get(), true);
726 } 547 }
727 548
728 // Verifies that promoting an ephemeral app will enable it. 549 // Verifies that promoting an ephemeral app will enable it.
729 IN_PROC_BROWSER_TEST_F(EphemeralAppBrowserTest, PromoteEphemeralAppAndEnable) { 550 IN_PROC_BROWSER_TEST_F(EphemeralAppBrowserTest, PromoteEphemeralAppAndEnable) {
730 InitSyncService(); 551 InitSyncService();
731 552
732 const Extension* app = InstallEphemeralApp(kRetainDataApp); 553 const Extension* app = InstallEphemeralApp(kNotificationsTestApp);
733 ASSERT_TRUE(app); 554 ASSERT_TRUE(app);
734 555
735 // Disable the ephemeral app. 556 // Disable the ephemeral app.
736 ExtensionService* service = 557 ExtensionService* service =
737 ExtensionSystem::Get(profile())->extension_service(); 558 ExtensionSystem::Get(profile())->extension_service();
738 service->DisableExtension(app->id(), Extension::DISABLE_PERMISSIONS_INCREASE); 559 service->DisableExtension(app->id(), Extension::DISABLE_PERMISSIONS_INCREASE);
739 ASSERT_TRUE(ExtensionRegistry::Get(profile())-> 560 ASSERT_TRUE(ExtensionRegistry::Get(profile())->
740 GetExtensionById(app->id(), ExtensionRegistry::DISABLED)); 561 GetExtensionById(app->id(), ExtensionRegistry::DISABLED));
741 562
742 // Promote to a regular installed app. It should be enabled. 563 // Promote to a regular installed app. It should be enabled.
743 PromoteEphemeralApp(app); 564 PromoteEphemeralApp(app);
744 VerifyPromotedApp(app->id(), ExtensionRegistry::ENABLED); 565 VerifyPromotedApp(app->id(), ExtensionRegistry::ENABLED);
745 566
746 scoped_ptr<AppSyncData> sync_change = GetFirstSyncChangeForApp(app->id()); 567 scoped_ptr<AppSyncData> sync_change = GetFirstSyncChangeForApp(app->id());
747 VerifySyncChange(sync_change.get(), true); 568 VerifySyncChange(sync_change.get(), true);
748 } 569 }
749 570
750 // Verifies that promoting an ephemeral app that has unsupported requirements 571 // Verifies that promoting an ephemeral app that has unsupported requirements
751 // will not enable it. 572 // will not enable it.
752 IN_PROC_BROWSER_TEST_F(EphemeralAppBrowserTest, 573 IN_PROC_BROWSER_TEST_F(EphemeralAppBrowserTest,
753 PromoteUnsupportedEphemeralApp) { 574 PromoteUnsupportedEphemeralApp) {
754 InitSyncService(); 575 InitSyncService();
755 576
756 const Extension* app = InstallEphemeralApp(kRetainDataApp); 577 const Extension* app = InstallEphemeralApp(kNotificationsTestApp);
757 ASSERT_TRUE(app); 578 ASSERT_TRUE(app);
758 579
759 // Disable the ephemeral app. 580 // Disable the ephemeral app.
760 ExtensionService* service = 581 ExtensionService* service =
761 ExtensionSystem::Get(profile())->extension_service(); 582 ExtensionSystem::Get(profile())->extension_service();
762 service->DisableExtension( 583 service->DisableExtension(
763 app->id(), Extension::DISABLE_UNSUPPORTED_REQUIREMENT); 584 app->id(), Extension::DISABLE_UNSUPPORTED_REQUIREMENT);
764 ASSERT_TRUE(ExtensionRegistry::Get(profile())-> 585 ASSERT_TRUE(ExtensionRegistry::Get(profile())->
765 GetExtensionById(app->id(), ExtensionRegistry::DISABLED)); 586 GetExtensionById(app->id(), ExtensionRegistry::DISABLED));
766 587
767 // Promote to a regular installed app. It should remain disabled. 588 // Promote to a regular installed app. It should remain disabled.
768 PromoteEphemeralApp(app); 589 PromoteEphemeralApp(app);
769 VerifyPromotedApp(app->id(), ExtensionRegistry::DISABLED); 590 VerifyPromotedApp(app->id(), ExtensionRegistry::DISABLED);
770 591
771 scoped_ptr<AppSyncData> sync_change = GetFirstSyncChangeForApp(app->id()); 592 scoped_ptr<AppSyncData> sync_change = GetFirstSyncChangeForApp(app->id());
772 VerifySyncChange(sync_change.get(), false); 593 VerifySyncChange(sync_change.get(), false);
773 } 594 }
774 595
775 // Checks the process of promoting an ephemeral app from sync. 596 // Checks the process of promoting an ephemeral app from sync.
776 IN_PROC_BROWSER_TEST_F(EphemeralAppBrowserTest, PromoteEphemeralAppFromSync) { 597 IN_PROC_BROWSER_TEST_F(EphemeralAppBrowserTest, PromoteEphemeralAppFromSync) {
777 InitSyncService(); 598 InitSyncService();
778 599
779 const Extension* app = InstallEphemeralApp(kRetainDataApp); 600 const Extension* app = InstallEphemeralApp(kNotificationsTestApp);
780 ASSERT_TRUE(app); 601 ASSERT_TRUE(app);
781 std::string app_id = app->id(); 602 std::string app_id = app->id();
782 603
783 // Simulate an install from sync. 604 // Simulate an install from sync.
784 const syncer::StringOrdinal kAppLaunchOrdinal("x"); 605 const syncer::StringOrdinal kAppLaunchOrdinal("x");
785 const syncer::StringOrdinal kPageOrdinal("y"); 606 const syncer::StringOrdinal kPageOrdinal("y");
786 AppSyncData app_sync_data( 607 AppSyncData app_sync_data(
787 *app, 608 *app,
788 true /* enabled */, 609 true /* enabled */,
789 false /* incognito enabled */, 610 false /* incognito enabled */,
(...skipping 15 matching lines...) Expand all
805 kAppLaunchOrdinal)); 626 kAppLaunchOrdinal));
806 EXPECT_TRUE(app_sorting->GetPageOrdinal(app_id).Equals(kPageOrdinal)); 627 EXPECT_TRUE(app_sorting->GetPageOrdinal(app_id).Equals(kPageOrdinal));
807 } 628 }
808 629
809 // In most cases, ExtensionService::PromoteEphemeralApp() will be called to 630 // In most cases, ExtensionService::PromoteEphemeralApp() will be called to
810 // permanently install an ephemeral app. However, there may be cases where an 631 // permanently install an ephemeral app. However, there may be cases where an
811 // install occurs through the usual route of installing from the Web Store (due 632 // install occurs through the usual route of installing from the Web Store (due
812 // to race conditions). Ensure that the app is still installed correctly. 633 // to race conditions). Ensure that the app is still installed correctly.
813 IN_PROC_BROWSER_TEST_F(EphemeralAppBrowserTest, 634 IN_PROC_BROWSER_TEST_F(EphemeralAppBrowserTest,
814 ReplaceEphemeralAppWithInstalledApp) { 635 ReplaceEphemeralAppWithInstalledApp) {
815 const Extension* app = InstallEphemeralApp(kRetainDataApp); 636 const Extension* app = InstallEphemeralApp(kNotificationsTestApp);
816 ASSERT_TRUE(app); 637 ASSERT_TRUE(app);
817 std::string app_id = app->id(); 638 std::string app_id = app->id();
818 app = NULL; 639 app = NULL;
819 640
820 InstallObserver installed_observer(profile()); 641 InstallObserver installed_observer(profile());
821 ReplaceEphemeralApp(app_id, kRetainDataApp); 642 ReplaceEphemeralApp(app_id, kNotificationsTestApp);
822 VerifyPromotedApp(app_id, ExtensionRegistry::ENABLED); 643 VerifyPromotedApp(app_id, ExtensionRegistry::ENABLED);
823 644
824 // Check the notification parameters. 645 // Check the notification parameters.
825 const InstallObserver::InstallParameters& params = installed_observer.Last(); 646 const InstallObserver::InstallParameters& params = installed_observer.Last();
826 EXPECT_EQ(app_id, params.id); 647 EXPECT_EQ(app_id, params.id);
827 EXPECT_TRUE(params.is_update); 648 EXPECT_TRUE(params.is_update);
828 EXPECT_TRUE(params.from_ephemeral); 649 EXPECT_TRUE(params.from_ephemeral);
829 } 650 }
830 651
831 // This is similar to ReplaceEphemeralAppWithInstalledApp, but installs will 652 // This is similar to ReplaceEphemeralAppWithInstalledApp, but installs will
832 // be delayed until the app is idle. 653 // be delayed until the app is idle.
833 IN_PROC_BROWSER_TEST_F(EphemeralAppBrowserTest, 654 IN_PROC_BROWSER_TEST_F(EphemeralAppBrowserTest,
834 ReplaceEphemeralAppWithDelayedInstalledApp) { 655 ReplaceEphemeralAppWithDelayedInstalledApp) {
835 const Extension* app = InstallAndLaunchEphemeralApp(kRetainDataApp); 656 const Extension* app = InstallAndLaunchEphemeralApp(kNotificationsTestApp);
836 ASSERT_TRUE(app); 657 ASSERT_TRUE(app);
837 std::string app_id = app->id(); 658 std::string app_id = app->id();
838 app = NULL; 659 app = NULL;
839 660
840 // Initiate install. 661 // Initiate install.
841 ReplaceEphemeralApp(app_id, kRetainDataApp); 662 ReplaceEphemeralApp(app_id, kNotificationsTestApp);
842 663
843 // The delayed installation will occur when the ephemeral app is closed. 664 // The delayed installation will occur when the ephemeral app is closed.
844 content::WindowedNotificationObserver installed_signal( 665 content::WindowedNotificationObserver installed_signal(
845 chrome::NOTIFICATION_EXTENSION_INSTALLED_DEPRECATED, 666 chrome::NOTIFICATION_EXTENSION_INSTALLED_DEPRECATED,
846 content::Source<Profile>(profile())); 667 content::Source<Profile>(profile()));
847 InstallObserver installed_observer(profile()); 668 InstallObserver installed_observer(profile());
848 CloseApp(app_id); 669 CloseApp(app_id);
849 installed_signal.Wait(); 670 installed_signal.Wait();
850 VerifyPromotedApp(app_id, ExtensionRegistry::ENABLED); 671 VerifyPromotedApp(app_id, ExtensionRegistry::ENABLED);
851 672
852 // Check the notification parameters. 673 // Check the notification parameters.
853 const InstallObserver::InstallParameters& params = installed_observer.Last(); 674 const InstallObserver::InstallParameters& params = installed_observer.Last();
854 EXPECT_EQ(app_id, params.id); 675 EXPECT_EQ(app_id, params.id);
855 EXPECT_TRUE(params.is_update); 676 EXPECT_TRUE(params.is_update);
856 EXPECT_TRUE(params.from_ephemeral); 677 EXPECT_TRUE(params.from_ephemeral);
857 } 678 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/apps/ephemeral_app_service.h » ('j') | chrome/browser/apps/ephemeral_app_service.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698