Update mojo surfaces bindings and mojo/cc/ glue
[chromium-blink-merge.git] / chrome / browser / apps / ephemeral_app_service_browsertest.cc
blobea1fce19bf4e68523c32ea1738944fb14d43eac7
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include <vector>
7 #include "chrome/browser/apps/ephemeral_app_browsertest.h"
8 #include "chrome/browser/apps/ephemeral_app_service.h"
9 #include "chrome/browser/profiles/profile.h"
10 #include "content/public/test/test_utils.h"
11 #include "extensions/browser/extension_prefs.h"
12 #include "extensions/browser/extension_registry.h"
13 #include "extensions/browser/notification_types.h"
14 #include "extensions/common/manifest.h"
16 using extensions::Extension;
17 using extensions::ExtensionPrefs;
18 using extensions::ExtensionRegistry;
20 namespace {
22 const int kNumTestApps = 2;
23 const char* kTestApps[] = {
24 "app_window/generic",
25 "minimal"
28 } // namespace
30 class EphemeralAppServiceBrowserTest : public EphemeralAppTestBase {
31 protected:
32 void LoadApps() {
33 for (int i = 0; i < kNumTestApps; ++i) {
34 const Extension* extension = InstallEphemeralApp(kTestApps[i]);
35 ASSERT_TRUE(extension);
36 app_ids_.push_back(extension->id());
39 ASSERT_EQ(kNumTestApps, (int) app_ids_.size());
42 void GarbageCollectEphemeralApps() {
43 EphemeralAppService* ephemeral_service = EphemeralAppService::Get(
44 browser()->profile());
45 ASSERT_TRUE(ephemeral_service);
46 ephemeral_service->GarbageCollectApps();
49 void InitEphemeralAppCount(EphemeralAppService* ephemeral_service) {
50 ephemeral_service->InitEphemeralAppCount();
53 void DisableEphemeralAppsOnStartup() {
54 EphemeralAppService* ephemeral_service =
55 EphemeralAppService::Get(browser()->profile());
56 ASSERT_TRUE(ephemeral_service);
57 ephemeral_service->DisableEphemeralAppsOnStartup();
60 std::vector<std::string> app_ids_;
63 // Verifies that inactive ephemeral apps are uninstalled and active apps are
64 // not removed. Extensive testing of the ephemeral app cache's replacement
65 // policies is done in the unit tests for EphemeralAppService. This is more
66 // like an integration test.
67 IN_PROC_BROWSER_TEST_F(EphemeralAppServiceBrowserTest,
68 GarbageCollectInactiveApps) {
69 EphemeralAppService* ephemeral_service =
70 EphemeralAppService::Get(browser()->profile());
71 ASSERT_TRUE(ephemeral_service);
72 InitEphemeralAppCount(ephemeral_service);
74 LoadApps();
76 const base::Time time_now = base::Time::Now();
77 ExtensionPrefs* prefs = ExtensionPrefs::Get(browser()->profile());
78 ASSERT_TRUE(prefs);
80 // Set launch time for an inactive app.
81 std::string inactive_app_id = app_ids_[0];
82 base::Time inactive_launch = time_now -
83 base::TimeDelta::FromDays(EphemeralAppService::kAppInactiveThreshold + 1);
84 prefs->SetLastLaunchTime(inactive_app_id, inactive_launch);
86 // Set launch time for an active app.
87 std::string active_app_id = app_ids_[1];
88 base::Time active_launch = time_now -
89 base::TimeDelta::FromDays(EphemeralAppService::kAppKeepThreshold);
90 prefs->SetLastLaunchTime(active_app_id, active_launch);
92 // Perform garbage collection.
93 content::WindowedNotificationObserver uninstall_signal(
94 extensions::NOTIFICATION_EXTENSION_UNINSTALLED_DEPRECATED,
95 content::Source<Profile>(browser()->profile()));
96 GarbageCollectEphemeralApps();
97 uninstall_signal.Wait();
99 ExtensionRegistry* registry = ExtensionRegistry::Get(profile());
100 ASSERT_TRUE(registry);
101 EXPECT_FALSE(registry->GetExtensionById(inactive_app_id,
102 ExtensionRegistry::EVERYTHING));
103 EXPECT_TRUE(
104 registry->GetExtensionById(active_app_id, ExtensionRegistry::EVERYTHING));
106 EXPECT_EQ(1, ephemeral_service->ephemeral_app_count());
109 // Verify that the count of ephemeral apps is maintained correctly.
110 IN_PROC_BROWSER_TEST_F(EphemeralAppServiceBrowserTest, EphemeralAppCount) {
111 EphemeralAppService* ephemeral_service =
112 EphemeralAppService::Get(browser()->profile());
113 ASSERT_TRUE(ephemeral_service);
114 InitEphemeralAppCount(ephemeral_service);
116 // The count should not increase for regular installed apps.
117 EXPECT_TRUE(InstallPlatformApp("minimal"));
118 EXPECT_EQ(0, ephemeral_service->ephemeral_app_count());
120 // The count should increase when an ephemeral app is added.
121 const Extension* app = InstallEphemeralApp(kMessagingReceiverApp);
122 ASSERT_TRUE(app);
123 EXPECT_EQ(1, ephemeral_service->ephemeral_app_count());
125 // The count should remain constant if the ephemeral app is updated.
126 const std::string app_id = app->id();
127 app = UpdateEphemeralApp(
128 app_id, GetTestPath(kMessagingReceiverAppV2),
129 GetTestPath(kMessagingReceiverApp).ReplaceExtension(
130 FILE_PATH_LITERAL(".pem")));
131 ASSERT_TRUE(app);
132 EXPECT_EQ(1, ephemeral_service->ephemeral_app_count());
134 // The count should decrease when an ephemeral app is promoted to a regular
135 // installed app.
136 PromoteEphemeralApp(app);
137 EXPECT_EQ(0, ephemeral_service->ephemeral_app_count());
140 // Verify that the cache of ephemeral apps is correctly cleared. Running apps
141 // should not be removed.
142 IN_PROC_BROWSER_TEST_F(EphemeralAppServiceBrowserTest, ClearCachedApps) {
143 const Extension* running_app =
144 InstallAndLaunchEphemeralApp(kMessagingReceiverApp);
145 const Extension* inactive_app =
146 InstallAndLaunchEphemeralApp(kDispatchEventTestApp);
147 std::string inactive_app_id = inactive_app->id();
148 std::string running_app_id = running_app->id();
149 CloseAppWaitForUnload(inactive_app_id);
151 EphemeralAppService* ephemeral_service =
152 EphemeralAppService::Get(browser()->profile());
153 ASSERT_TRUE(ephemeral_service);
154 EXPECT_EQ(2, ephemeral_service->ephemeral_app_count());
156 ephemeral_service->ClearCachedApps();
158 ExtensionRegistry* registry = ExtensionRegistry::Get(profile());
159 ASSERT_TRUE(registry);
160 EXPECT_FALSE(registry->GetExtensionById(inactive_app_id,
161 ExtensionRegistry::EVERYTHING));
162 EXPECT_TRUE(registry->GetExtensionById(running_app_id,
163 ExtensionRegistry::EVERYTHING));
165 EXPECT_EQ(1, ephemeral_service->ephemeral_app_count());
168 // Verify that the service will unload and disable ephemeral apps on startup.
169 IN_PROC_BROWSER_TEST_F(EphemeralAppServiceBrowserTest,
170 DisableEphemeralAppsOnStartup) {
171 const Extension* installed_app = InstallPlatformApp(kNotificationsTestApp);
172 const Extension* running_app =
173 InstallAndLaunchEphemeralApp(kMessagingReceiverApp);
174 const Extension* inactive_app = InstallEphemeralApp(kDispatchEventTestApp);
175 const Extension* disabled_app = InstallEphemeralApp(kFileSystemTestApp);
176 ASSERT_TRUE(installed_app);
177 ASSERT_TRUE(running_app);
178 ASSERT_TRUE(inactive_app);
179 ASSERT_TRUE(disabled_app);
180 DisableEphemeralApp(disabled_app, Extension::DISABLE_PERMISSIONS_INCREASE);
182 ExtensionRegistry* registry = ExtensionRegistry::Get(profile());
183 ASSERT_TRUE(registry);
184 EXPECT_TRUE(registry->enabled_extensions().Contains(installed_app->id()));
185 EXPECT_TRUE(registry->enabled_extensions().Contains(running_app->id()));
186 EXPECT_TRUE(registry->enabled_extensions().Contains(inactive_app->id()));
187 EXPECT_TRUE(registry->disabled_extensions().Contains(disabled_app->id()));
189 DisableEphemeralAppsOnStartup();
191 // Verify that the inactive app is disabled.
192 EXPECT_TRUE(registry->enabled_extensions().Contains(installed_app->id()));
193 EXPECT_TRUE(registry->enabled_extensions().Contains(running_app->id()));
194 EXPECT_TRUE(registry->disabled_extensions().Contains(inactive_app->id()));
195 EXPECT_TRUE(registry->disabled_extensions().Contains(disabled_app->id()));
197 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile());
198 ASSERT_TRUE(prefs);
199 EXPECT_FALSE(prefs->HasDisableReason(
200 installed_app->id(), Extension::DISABLE_INACTIVE_EPHEMERAL_APP));
201 EXPECT_FALSE(prefs->HasDisableReason(
202 running_app->id(), Extension::DISABLE_INACTIVE_EPHEMERAL_APP));
203 EXPECT_TRUE(prefs->HasDisableReason(
204 inactive_app->id(), Extension::DISABLE_INACTIVE_EPHEMERAL_APP));
205 EXPECT_TRUE(prefs->HasDisableReason(
206 disabled_app->id(), Extension::DISABLE_INACTIVE_EPHEMERAL_APP));
207 EXPECT_TRUE(prefs->HasDisableReason(
208 disabled_app->id(), Extension::DISABLE_PERMISSIONS_INCREASE));