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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappDataStorage.java

Issue 2641973003: Implement server-suggested update check backoff (Closed)
Patch Set: Rebase. Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappDataStorage.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappDataStorage.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappDataStorage.java
index cc68e6613d0150ec72614748a25ad2855164633c..fd443658789f04fa44882656e04660e584ddf351 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappDataStorage.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappDataStorage.java
@@ -61,6 +61,20 @@ public class WebappDataStorage {
// The number of times that updating a WebAPK in the background has been requested.
static final String KEY_UPDATE_REQUESTED = "update_requested";
+ // Whether to check updates less frequently.
+ static final String KEY_RELAX_UPDATES = "relax_updates";
+
+ // Number of milliseconds between checks for whether the WebAPK's Web Manifest has changed.
+ public static final long UPDATE_INTERVAL = TimeUnit.DAYS.toMillis(3L);
+
+ // Number of milliseconds between checks of updates for a WebAPK that is expected to check
+ // updates less frequently. crbug.com/680128.
+ public static final long RELAXED_UPDATE_INTERVAL = TimeUnit.DAYS.toMillis(30L);
+
+ // Number of milliseconds to wait before re-requesting an updated WebAPK from the WebAPK
+ // server if the previous update attempt failed.
+ public static final long RETRY_UPDATE_DURATION = TimeUnit.HOURS.toMillis(12L);
+
// Unset/invalid constants for last used times and URLs. 0 is used as the null last used time as
// WebappRegistry assumes that this is always a valid timestamp.
static final long LAST_USED_UNSET = 0;
@@ -305,6 +319,7 @@ public class WebappDataStorage {
editor.remove(KEY_LAST_WEBAPK_UPDATE_REQUEST_COMPLETE_TIME);
editor.remove(KEY_DID_LAST_WEBAPK_UPDATE_REQUEST_SUCCEED);
editor.remove(KEY_UPDATE_REQUESTED);
+ editor.remove(KEY_RELAX_UPDATES);
editor.apply();
}
@@ -390,7 +405,7 @@ public class WebappDataStorage {
}
/**
- * Updates the result of whether the last update request to WebAPK Server succeeded.
+ * Updates whether the last update request to WebAPK Server succeeded.
*/
void updateDidLastWebApkUpdateRequestSucceed(boolean success) {
mPreferences.edit()
@@ -426,6 +441,48 @@ public class WebappDataStorage {
return mPreferences.getInt(KEY_UPDATE_REQUESTED, 0);
}
+ /**
+ * Returns whether the previous WebAPK update attempt succeeded. Returns true if there has not
+ * been any update attempts.
+ */
+ boolean didPreviousUpdateSucceed() {
pkotwicz 2017/03/04 00:20:46 Nit: Rename this to didPreviousWebApkUpdateSucceed
dominickn 2017/03/06 02:28:36 I think we can leave the WebAPK bit out of the met
Xi Han 2017/03/06 22:14:20 Acknowledged.
+ long lastUpdateCompletionTime = getLastWebApkUpdateRequestCompletionTime();
+ if (lastUpdateCompletionTime == WebappDataStorage.LAST_USED_INVALID
+ || lastUpdateCompletionTime == WebappDataStorage.LAST_USED_UNSET) {
+ return true;
+ }
+ return getDidLastWebApkUpdateRequestSucceed();
+ }
+
+ /**
+ * Sets whether we should check updates less frequently.
pkotwicz 2017/03/04 00:20:46 "check for updates" here too I am unsure whether
dominickn 2017/03/06 02:28:36 See above comment - we can probably leave WebApk o
Xi Han 2017/03/06 22:14:20 Acknowledged.
+ */
+ void setRelaxedUpdates(boolean relaxUpdates) {
+ mPreferences.edit().putBoolean(KEY_RELAX_UPDATES, relaxUpdates).apply();
+ }
+
+ /**
pkotwicz 2017/03/04 00:20:46 Nit: - "check updates" -> "check for updates" - I
Xi Han 2017/03/06 22:14:20 Done.
+ * Returns whether we should check updates less frequently.
+ */
+ boolean shouldRelaxUpdates() {
+ return mPreferences.getBoolean(KEY_RELAX_UPDATES, false);
+ }
+
+ /**
+ * Returns whether we should check update.
pkotwicz 2017/03/04 00:20:47 Nits: - "check update." -> "check for update." - Y
Xi Han 2017/03/06 22:14:20 Done.
+ */
+ boolean shouldUpdate() {
pkotwicz 2017/03/04 00:20:46 Nit: Maybe rename this function to shouldCheckForU
dominickn 2017/03/06 02:28:36 shouldCheckForUpdate SGTM
Xi Han 2017/03/06 22:14:20 Done.
+ long checkUpdatesInterval =
+ shouldRelaxUpdates() ? RELAXED_UPDATE_INTERVAL : UPDATE_INTERVAL;
+ long now = sClock.currentTimeMillis();
+ long sinceLastCheckDurationMs = now - getLastCheckForWebManifestUpdateTime();
+ if (sinceLastCheckDurationMs >= checkUpdatesInterval) return true;
+
+ long sinceLastUpdateRequestDurationMs = now - getLastWebApkUpdateRequestCompletionTime();
+ return sinceLastUpdateRequestDurationMs >= WebappDataStorage.RETRY_UPDATE_DURATION
+ && !didPreviousUpdateSucceed();
+ }
+
protected WebappDataStorage(String webappId) {
mId = webappId;
mPreferences = ContextUtils.getApplicationContext().getSharedPreferences(

Powered by Google App Engine
This is Rietveld 408576698