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

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

Issue 2460253002: Update WebAPKs even if the WebAPK start URL has no Web Manifest part 2/3 (Closed)
Patch Set: Merge branch 'master' into update_fail_refactor0 Created 4 years 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/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/ManifestUpgradeDetectorTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java
similarity index 66%
rename from chrome/android/javatests/src/org/chromium/chrome/browser/webapps/ManifestUpgradeDetectorTest.java
rename to chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java
index eeadabfcdbf6344a686d1798a26bc2da59ed1a6f..8f83831faa1becdb6511e02ac2c34e91b2fd672a 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/ManifestUpgradeDetectorTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java
@@ -9,22 +9,28 @@ import android.test.suitebuilder.annotation.MediumTest;
import org.chromium.base.ThreadUtils;
import org.chromium.base.test.util.CallbackHelper;
+import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.base.test.util.Feature;
import org.chromium.blink_public.platform.WebDisplayMode;
+import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.test.ChromeTabbedActivityTestBase;
import org.chromium.chrome.test.util.browser.WebappTestPage;
import org.chromium.content_public.common.ScreenOrientationValues;
import org.chromium.net.test.EmbeddedTestServer;
+import org.chromium.webapk.lib.client.WebApkVersion;
import java.util.HashMap;
import java.util.Map;
/**
- * Tests ManifestUpgradeDetector. This class contains tests which cannot be done as JUnit tests.
+ * Tests WebApkUpdateManager. This class contains tests which cannot be done as JUnit tests.
*/
-public class ManifestUpgradeDetectorTest extends ChromeTabbedActivityTestBase {
+@CommandLineFlags.Add(ChromeSwitches.CHECK_FOR_WEB_MANIFEST_UPDATE_ON_STARTUP)
+public class WebApkUpdateManagerTest extends ChromeTabbedActivityTestBase {
+ private static final String WEBAPK_PACKAGE = "test.package";
+ private static final String WEBAPK_ID = "webapk_id";
private static final String WEBAPK_MANIFEST_URL =
"/chrome/test/data/banners/manifest_one_icon.json";
@@ -44,29 +50,38 @@ public class ManifestUpgradeDetectorTest extends ChromeTabbedActivityTestBase {
private EmbeddedTestServer mTestServer;
private Tab mTab;
- // CallbackHelper which blocks until the {@link ManifestUpgradeDetector.Callback} callback is
- // called.
- private static class CallbackWaiter
- extends CallbackHelper implements ManifestUpgradeDetector.Callback {
- private String mName;
- private boolean mNeedsUpgrade;
+ /**
+ * Subclass of {@link WebApkUpdateManager} which notifies the {@link CallbackHelper} passed to
+ * the constructor when it has been determined whether an update is needed.
+ */
+ private static class TestWebApkUpdateManager extends WebApkUpdateManager {
+ private CallbackHelper mWaiter;
+ private boolean mNeedsUpdate = false;
+
+ public TestWebApkUpdateManager(CallbackHelper waiter) {
+ mWaiter = waiter;
+ }
@Override
public void onFinishedFetchingWebManifestForInitialUrl(
- boolean needsUpgrade, WebApkInfo info, String bestIconUrl) {}
+ WebApkInfo fetchedInfo, String bestIconUrl) {
+ super.onFinishedFetchingWebManifestForInitialUrl(fetchedInfo, bestIconUrl);
+ mWaiter.notifyCalled();
+ }
- public void onGotManifestData(boolean needsUpgrade, WebApkInfo info, String bestIconUrl) {
- mName = info.name();
- mNeedsUpgrade = needsUpgrade;
- notifyCalled();
+ @Override
+ public void onGotManifestData(WebApkInfo fetchedInfo, String bestIconUrl) {
+ super.onGotManifestData(fetchedInfo, bestIconUrl);
+ mWaiter.notifyCalled();
}
- public String name() {
- return mName;
+ @Override
+ protected void updateAsync(WebApkInfo fetchedInfo, String bestIconUrl) {
+ mNeedsUpdate = true;
}
- public boolean needsUpgrade() {
- return mNeedsUpgrade;
+ public boolean needsUpdate() {
+ return mNeedsUpdate;
}
}
@@ -108,6 +123,10 @@ public class ManifestUpgradeDetectorTest extends ChromeTabbedActivityTestBase {
Context context = getInstrumentation().getTargetContext();
mTestServer = EmbeddedTestServer.createAndStartServer(context);
mTab = getActivity().getActivityTab();
+
+ TestFetchStorageCallback callback = new TestFetchStorageCallback();
+ WebappRegistry.getInstance().register(WEBAPK_ID, callback);
+ callback.waitForCallback(0);
}
@Override
@@ -121,24 +140,26 @@ public class ManifestUpgradeDetectorTest extends ChromeTabbedActivityTestBase {
startMainActivityOnBlankPage();
}
- /**
- * Starts a ManifestUpgradeDetector. Calls {@link callback} once the detector has fetched the
- * Web Manifest and determined whether the WebAPK needs to be upgraded.
- */
- private void startManifestUpgradeDetector(
- CreationData creationData, final ManifestUpgradeDetector.Callback callback) {
- WebApkInfo info = WebApkInfo.create("", "", creationData.scope, null, creationData.name,
- creationData.shortName, creationData.displayMode, creationData.orientation, 0,
- creationData.themeColor, creationData.backgroundColor, "", 0,
- creationData.manifestUrl, creationData.startUrl,
- creationData.iconUrlToMurmur2HashMap);
- final ManifestUpgradeDetector detector = new ManifestUpgradeDetector(mTab, info, callback);
+ /** Checks whether a WebAPK update is needed. */
+ private boolean checkUpdateNeeded(final CreationData creationData) throws Exception {
+ CallbackHelper waiter = new CallbackHelper();
+ final TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(waiter);
+
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
- detector.start();
+ WebApkInfo info = WebApkInfo.create(WEBAPK_ID, "", creationData.scope, null,
+ creationData.name, creationData.shortName, creationData.displayMode,
+ creationData.orientation, 0, creationData.themeColor,
+ creationData.backgroundColor, "", WebApkVersion.CURRENT_SHELL_APK_VERSION,
+ creationData.manifestUrl, creationData.startUrl,
+ creationData.iconUrlToMurmur2HashMap);
+ updateManager.updateIfNeeded(mTab, info);
}
});
+ waiter.waitForCallback(0);
+
+ return updateManager.needsUpdate();
}
/**
@@ -150,20 +171,14 @@ public class ManifestUpgradeDetectorTest extends ChromeTabbedActivityTestBase {
@MediumTest
@Feature({"WebApk"})
public void testCanonicalUrlsIdenticalShouldNotUpgrade() throws Exception {
- CallbackWaiter waiter = new CallbackWaiter();
-
// URL canonicalization should replace "%74" with 't'.
CreationData creationData = defaultCreationData(mTestServer);
creationData.startUrl = mTestServer.getURL(
"/chrome/test/data/banners/manifest_%74est_page.html");
- startManifestUpgradeDetector(creationData, waiter);
WebappTestPage.navigateToPageWithServiceWorkerAndManifest(
mTestServer, mTab, WEBAPK_MANIFEST_URL);
- waiter.waitForCallback(0);
-
- assertEquals(WEBAPK_NAME, waiter.name());
- assertFalse(waiter.needsUpgrade());
+ assertFalse(checkUpdateNeeded(creationData));
}
/**
@@ -172,19 +187,13 @@ public class ManifestUpgradeDetectorTest extends ChromeTabbedActivityTestBase {
@MediumTest
@Feature({"WebApk"})
public void testCanonicalUrlsDifferentShouldUpgrade() throws Exception {
- CallbackWaiter waiter = new CallbackWaiter();
-
// URL canonicalization should replace "%62" with 'b'.
CreationData creationData = defaultCreationData(mTestServer);
creationData.startUrl = mTestServer.getURL(
"/chrome/test/data/banners/manifest_%62est_page.html");
- startManifestUpgradeDetector(creationData, waiter);
WebappTestPage.navigateToPageWithServiceWorkerAndManifest(
mTestServer, mTab, WEBAPK_MANIFEST_URL);
- waiter.waitForCallback(0);
-
- assertEquals(WEBAPK_NAME, waiter.name());
- assertTrue(waiter.needsUpgrade());
+ assertTrue(checkUpdateNeeded(creationData));
}
}

Powered by Google App Engine
This is Rietveld 408576698