| 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));
|
| }
|
| }
|
|
|