| Index: chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappRegistry.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappRegistry.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappRegistry.java
|
| index dff54ad1e36ae6b3c2f3b12acefbf6d0b55b8a11..6646582a6fb52d349d6941829f3364a272d9a7ba 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappRegistry.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappRegistry.java
|
| @@ -14,6 +14,7 @@ import org.chromium.base.annotations.CalledByNative;
|
| import java.util.Collections;
|
| import java.util.HashSet;
|
| import java.util.Set;
|
| +import java.util.concurrent.TimeUnit;
|
|
|
| /**
|
| * Keeps track of web apps which have created a SharedPreference file (through the used of the
|
| @@ -28,6 +29,13 @@ public class WebappRegistry {
|
|
|
| static final String REGISTRY_FILE_NAME = "webapp_registry";
|
| static final String KEY_WEBAPP_SET = "webapp_set";
|
| + static final String KEY_LAST_CLEANUP = "last_cleanup";
|
| +
|
| + /** Represents a period of 4 weeks in milliseconds */
|
| + static final long FULL_CLEANUP_DURATION = TimeUnit.DAYS.toMillis(4L * 7L);
|
| +
|
| + /** Represents a period of 13 weeks in milliseconds */
|
| + static final long WEBAPP_UNOPENED_CLEANUP_DURATION = TimeUnit.DAYS.toMillis(13L * 7L);
|
|
|
| /**
|
| * Called when a retrieval of the stored web apps occurs.
|
| @@ -81,6 +89,40 @@ public class WebappRegistry {
|
| }
|
|
|
| /**
|
| + * Deletes the data for all "old" web apps. i.e. web apps which have not been opened by the user
|
| + * in the last 3 months. Cleanup is run, at most, once a month.
|
| + * @param context Context to open the registry with.
|
| + * @param currentTime The current time which will be checked to decide if the task should be run
|
| + * and if a web app should be cleaned up.
|
| + */
|
| + static void unregisterOldWebapps(final Context context, final long currentTime) {
|
| + new AsyncTask<Void, Void, Void>() {
|
| + @Override
|
| + protected final Void doInBackground(Void... nothing) {
|
| + SharedPreferences preferences = openSharedPreferences(context);
|
| + long lastCleanup = preferences.getLong(KEY_LAST_CLEANUP, 0);
|
| + if ((currentTime - lastCleanup) < FULL_CLEANUP_DURATION) return null;
|
| +
|
| + Set<String> currentWebapps = getRegisteredWebappIds(preferences);
|
| + Set<String> retainedWebapps = new HashSet<String>(currentWebapps);
|
| + for (String id : currentWebapps) {
|
| + long lastUsed = new WebappDataStorage(context, id).getLastUsedTime();
|
| + if ((currentTime - lastUsed) < WEBAPP_UNOPENED_CLEANUP_DURATION) continue;
|
| +
|
| + WebappDataStorage.deleteDataForWebapp(context, id);
|
| + retainedWebapps.remove(id);
|
| + }
|
| +
|
| + preferences.edit()
|
| + .putLong(KEY_LAST_CLEANUP, currentTime)
|
| + .putStringSet(KEY_WEBAPP_SET, retainedWebapps)
|
| + .commit();
|
| + return null;
|
| + }
|
| + }.execute();
|
| + }
|
| +
|
| + /**
|
| * Deletes the data of all web apps, as well as the registry tracking the web apps.
|
| */
|
| @VisibleForTesting
|
|
|