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

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

Issue 2641973003: Implement server-suggested update check backoff (Closed)
Patch Set: Nits. Created 3 years, 9 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/junit/src/org/chromium/chrome/browser/webapps/WebappDataStorageTest.java
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappDataStorageTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappDataStorageTest.java
index f9bc08c08f2be1b17cbc77e642f11930a84781fc..c0b6fbca4602c40e1e8d57a661554b3da6ff2316 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappDataStorageTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappDataStorageTest.java
@@ -5,6 +5,7 @@
package org.chromium.chrome.browser.webapps;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import android.content.Context;
@@ -26,6 +27,7 @@ import org.chromium.base.ContextUtils;
import org.chromium.base.test.util.Feature;
import org.chromium.blink_public.platform.WebDisplayMode;
import org.chromium.chrome.browser.ShortcutHelper;
+import org.chromium.chrome.browser.webapps.WebappDataStorage.Clock;
import org.chromium.testing.local.BackgroundShadowAsyncTask;
import org.chromium.testing.local.LocalRobolectricTestRunner;
@@ -63,6 +65,10 @@ public class WebappDataStorageTest {
updateTime(currentTime);
}
+ public void advance(long millis) {
+ mCurrentTime += millis;
+ }
+
public void updateTime(long currentTime) {
mCurrentTime = currentTime;
}
@@ -88,6 +94,7 @@ public class WebappDataStorageTest {
@After
public void tearDown() {
mSharedPreferences.edit().clear().apply();
+ WebappDataStorage.setClockForTests(new Clock());
}
@Test
@@ -315,6 +322,89 @@ public class WebappDataStorageTest {
mSharedPreferences.getBoolean(WebappDataStorage.KEY_IS_ICON_GENERATED, true));
}
+ /**
+ * Test that if the WebAPK update failed (e.g. because the WebAPK server is not reachable) that
+ * the is-update-needed check is retried after less time than if the WebAPK update had
+ * succeeded. The is-update-needed check is the first step in retrying to update the WebAPK.
+ */
+ @Test
+ public void testCheckUpdateMoreFrequentlyIfUpdateFails() {
+ assertTrue(WebappDataStorage.UPDATE_INTERVAL > WebappDataStorage.RETRY_UPDATE_DURATION);
+
+ final TestClock clock = new TestClock(System.currentTimeMillis());
+ WebappDataStorage storage = getStorage(clock);
+
+ storage.updateTimeOfLastWebApkUpdateRequestCompletion();
+ storage.updateDidLastWebApkUpdateRequestSucceed(true);
+
+ assertFalse(storage.shouldCheckForUpdate());
+ clock.advance(WebappDataStorage.RETRY_UPDATE_DURATION);
+ assertFalse(storage.shouldCheckForUpdate());
+
+ // Advance all of the time stamps.
+ storage.updateTimeOfLastCheckForUpdatedWebManifest();
+ storage.updateTimeOfLastWebApkUpdateRequestCompletion();
+ storage.updateDidLastWebApkUpdateRequestSucceed(false);
+
+ assertFalse(storage.shouldCheckForUpdate());
+ clock.advance(WebappDataStorage.RETRY_UPDATE_DURATION);
+ assertTrue(storage.shouldCheckForUpdate());
+
+ // Verifies that {@link WebappDataStorage#shouldCheckForUpdate()} returns true because the
+ // previous update failed, no matter whether we want to check update less frequently.
+ storage.setRelaxedUpdates(true);
+ assertTrue(storage.shouldCheckForUpdate());
+ }
+
+ /**
+ * Test that if there was no previous WebAPK update attempt that the is-update-needed check is
+ * done after the usual delay (as opposed to the shorter delay if the previous WebAPK update
+ * failed.)
+ */
+ @Test
+ public void testRegularCheckIntervalIfNoPriorWebApkUpdate() {
+ assertTrue(WebappDataStorage.UPDATE_INTERVAL > WebappDataStorage.RETRY_UPDATE_DURATION);
+
+ final TestClock clock = new TestClock(System.currentTimeMillis());
+ WebappDataStorage storage = getStorage(clock);
+
+ assertFalse(storage.shouldCheckForUpdate());
+ clock.advance(WebappDataStorage.RETRY_UPDATE_DURATION);
+ assertFalse(storage.shouldCheckForUpdate());
+ clock.advance(WebappDataStorage.UPDATE_INTERVAL - WebappDataStorage.RETRY_UPDATE_DURATION);
+ assertTrue(storage.shouldCheckForUpdate());
+ }
+
+ /**
+ * Test that if there was no previous WebAPK update attempt and the relax-update flag is set to
+ * true, the is-update-needed check is done after the relaxed update interval (as opposed to the
+ * usual delay.)
+ */
+ @Test
+ public void testRelaxedUpdates() {
+ assertTrue(WebappDataStorage.RELAXED_UPDATE_INTERVAL > WebappDataStorage.UPDATE_INTERVAL);
+
+ final TestClock clock = new TestClock(System.currentTimeMillis());
+ WebappDataStorage storage = getStorage(clock);
+
+ storage.setRelaxedUpdates(true);
+
+ clock.advance(WebappDataStorage.UPDATE_INTERVAL);
+ assertFalse(storage.shouldCheckForUpdate());
+ clock.advance(
+ WebappDataStorage.RELAXED_UPDATE_INTERVAL - WebappDataStorage.UPDATE_INTERVAL);
+ assertTrue(storage.shouldCheckForUpdate());
+ }
+
+ private WebappDataStorage getStorage(TestClock clock) {
+ WebappDataStorage.setClockForTests(clock);
+ WebappDataStorage storage = WebappDataStorage.open("test");
+
+ // Done when WebAPK is registered in {@link WebApkActivity}.
+ storage.updateTimeOfLastCheckForUpdatedWebManifest();
+ return storage;
+ }
+
// TODO(lalitm) - There seems to be a bug in Robolectric where a Bitmap
// produced from a byte stream is hardcoded to be a 100x100 bitmap with
// ARGB_8888 pixel format. Because of this, we need to work around the

Powered by Google App Engine
This is Rietveld 408576698