| Index: chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappRegistryTest.java
|
| diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappRegistryTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappRegistryTest.java
|
| index 66f47e34cc3d94f3072e321ba40e986cb35eb3e3..145742bd49ff8f4ae4f48370bc2323b66cf25f82 100644
|
| --- a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappRegistryTest.java
|
| +++ b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappRegistryTest.java
|
| @@ -351,6 +351,104 @@ public class WebappRegistryTest {
|
| }
|
|
|
| @Test
|
| + @Feature({"WebApk"})
|
| + public void testCleanupRemovesUninstalledWebApks() throws Exception {
|
| + String webappId1 = "webapk:uninstalledWebApk1";
|
| + String webApkPackage1 = "uninstalledWebApk1";
|
| + String webappId2 = "webapk:uninstalledWebApk2";
|
| + String webApkPackage2 = "uninstalledWebApk2";
|
| +
|
| + FetchStorageCallback storageCallback1 = new FetchStorageCallback(
|
| + createWebApkIntent(webappId1, webApkPackage1));
|
| + WebappRegistry.registerWebapp(Robolectric.application, webappId1, storageCallback1);
|
| + BackgroundShadowAsyncTask.runBackgroundTasks();
|
| + Robolectric.runUiThreadTasks();
|
| + assertTrue(storageCallback1.getCallbackCalled());
|
| +
|
| + FetchStorageCallback storageCallback2 = new FetchStorageCallback(
|
| + createWebApkIntent(webappId1, webApkPackage2));
|
| + WebappRegistry.registerWebapp(Robolectric.application, webappId2, storageCallback2);
|
| + BackgroundShadowAsyncTask.runBackgroundTasks();
|
| + Robolectric.runUiThreadTasks();
|
| + assertTrue(storageCallback2.getCallbackCalled());
|
| +
|
| + // Verify that both WebAPKs are registered.
|
| + Set<String> actual = mSharedPreferences.getStringSet(
|
| + WebappRegistry.KEY_WEBAPP_SET, Collections.<String>emptySet());
|
| + assertEquals(2, actual.size());
|
| + assertTrue(actual.contains(webappId1));
|
| + assertTrue(actual.contains(webappId2));
|
| +
|
| + // Set the current time such that the task runs.
|
| + long currentTime = System.currentTimeMillis() + WebappRegistry.FULL_CLEANUP_DURATION;
|
| + // Because the time is just inside the window, there should be a cleanup of
|
| + // uninstalled WebAPKs and the last cleaned up time should be set to the
|
| + // current time.
|
| + WebappRegistry.unregisterOldWebapps(Robolectric.application, currentTime);
|
| + BackgroundShadowAsyncTask.runBackgroundTasks();
|
| + Robolectric.runUiThreadTasks();
|
| +
|
| + actual = mSharedPreferences.getStringSet(
|
| + WebappRegistry.KEY_WEBAPP_SET, Collections.<String>emptySet());
|
| + assertTrue(actual.isEmpty());
|
| +
|
| + long lastCleanup = mSharedPreferences.getLong(
|
| + WebappRegistry.KEY_LAST_CLEANUP, -1);
|
| + assertEquals(currentTime, lastCleanup);
|
| + }
|
| +
|
| + @Test
|
| + @Feature({"WebApk"})
|
| + public void testCleanupDoesNotRemoveInstalledWebApks() throws Exception {
|
| + String webappId = "webapk:installedWebApk";
|
| + String webApkPackage = "installedWebApk";
|
| + String uninstalledWebappId = "webapk:uninstalledWebApk";
|
| + String uninstalledWebApkPackage = "uninstalledWebApk";
|
| +
|
| + FetchStorageCallback storageCallback = new FetchStorageCallback(
|
| + createWebApkIntent(webappId, webApkPackage));
|
| + WebappRegistry.registerWebapp(Robolectric.application, webappId, storageCallback);
|
| + BackgroundShadowAsyncTask.runBackgroundTasks();
|
| + Robolectric.runUiThreadTasks();
|
| + assertTrue(storageCallback.getCallbackCalled());
|
| +
|
| + FetchStorageCallback storageCallback2 = new FetchStorageCallback(
|
| + createWebApkIntent(uninstalledWebappId, uninstalledWebApkPackage));
|
| + WebappRegistry.registerWebapp(Robolectric.application, uninstalledWebappId,
|
| + storageCallback2);
|
| + BackgroundShadowAsyncTask.runBackgroundTasks();
|
| + Robolectric.runUiThreadTasks();
|
| + assertTrue(storageCallback2.getCallbackCalled());
|
| +
|
| + // Verify that both WebAPKs are registered.
|
| + Set<String> actual = mSharedPreferences.getStringSet(
|
| + WebappRegistry.KEY_WEBAPP_SET, Collections.<String>emptySet());
|
| + assertEquals(2, actual.size());
|
| + assertTrue(actual.contains(webappId));
|
| + assertTrue(actual.contains(uninstalledWebappId));
|
| +
|
| + Robolectric.packageManager.addPackage(webApkPackage);
|
| +
|
| + // Set the current time such that the task runs.
|
| + long currentTime = System.currentTimeMillis() + WebappRegistry.FULL_CLEANUP_DURATION;
|
| + // Because the time is just inside the window, there should be a cleanup of
|
| + // uninstalled WebAPKs and the last cleaned up time should be set to the
|
| + // current time.
|
| + WebappRegistry.unregisterOldWebapps(Robolectric.application, currentTime);
|
| + BackgroundShadowAsyncTask.runBackgroundTasks();
|
| + Robolectric.runUiThreadTasks();
|
| +
|
| + actual = mSharedPreferences.getStringSet(
|
| + WebappRegistry.KEY_WEBAPP_SET, Collections.<String>emptySet());
|
| + assertEquals(1, actual.size());
|
| + assertTrue(actual.contains(webappId));
|
| +
|
| + long lastCleanup = mSharedPreferences.getLong(
|
| + WebappRegistry.KEY_LAST_CLEANUP, -1);
|
| + assertEquals(currentTime, lastCleanup);
|
| + }
|
| +
|
| + @Test
|
| @Feature({"Webapp"})
|
| public void testClearWebappHistoryRunsCallback() throws Exception {
|
| CallbackRunner callback = new CallbackRunner();
|
| @@ -606,4 +704,12 @@ public class WebappRegistryTest {
|
| ShortcutHelper.getScopeFromUrl(url), "name", "shortName", null,
|
| ShortcutHelper.WEBAPP_SHORTCUT_VERSION, WebDisplayMode.Standalone, 0, 0, 0, false);
|
| }
|
| +
|
| + private Intent createWebApkIntent(String webappId, String webApkPackage) {
|
| + Intent intent = new Intent();
|
| + intent.putExtra(ShortcutHelper.EXTRA_ID, webappId)
|
| + .putExtra(ShortcutHelper.EXTRA_URL, "https://foo.com")
|
| + .putExtra(ShortcutHelper.EXTRA_WEBAPK_PACKAGE_NAME, webApkPackage);
|
| + return intent;
|
| + }
|
| }
|
|
|