Index: chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java |
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java |
index 551991aaf17d376f979db71b0c9efa8bc4e3ee95..b619e3bf7a429bcd8f6f1184ef7fe65295e1b195 100644 |
--- a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java |
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java |
@@ -8,6 +8,8 @@ import static org.junit.Assert.assertEquals; |
import static org.junit.Assert.assertFalse; |
import static org.junit.Assert.assertTrue; |
+import static org.chromium.webapk.lib.client.WebApkVersion.CURRENT_SHELL_APK_VERSION; |
+ |
import android.content.Intent; |
import android.graphics.Bitmap; |
import android.graphics.Color; |
@@ -31,7 +33,6 @@ import org.chromium.chrome.browser.ShortcutHelper; |
import org.chromium.chrome.browser.tab.Tab; |
import org.chromium.content_public.common.ScreenOrientationValues; |
import org.chromium.testing.local.LocalRobolectricTestRunner; |
-import org.chromium.webapk.lib.client.WebApkVersion; |
import org.chromium.webapk.lib.common.WebApkConstants; |
import org.chromium.webapk.lib.common.WebApkMetaDataKeys; |
import org.chromium.webapk.test.WebApkTestHelper; |
@@ -48,9 +49,8 @@ public class WebApkUpdateManagerTest { |
@Rule |
public DisableHistogramsRule mDisableHistogramsRule = new DisableHistogramsRule(); |
- /** WebAPK's id in {@link WebAppDataStorage}. */ |
- private static final String WEBAPK_ID = |
- WebApkConstants.WEBAPK_ID_PREFIX + WebApkTestHelper.WEBAPK_PACKAGE_NAME; |
+ private static final String WEBAPK_PACKAGE_NAME = "org.chromium.webapk.test_package"; |
+ private static final String UNBOUND_WEBAPK_PACKAGE_NAME = "com.webapk.test_package"; |
/** Web Manifest URL */ |
private static final String WEB_MANIFEST_URL = "manifest.json"; |
@@ -192,16 +192,22 @@ public class WebApkUpdateManagerTest { |
private MockClock mClock; |
- private WebappDataStorage getStorage() { |
- return WebappRegistry.getInstance().getWebappDataStorage(WEBAPK_ID); |
+ private static String getWebApkId(String packageName) { |
+ return WebApkConstants.WEBAPK_ID_PREFIX + packageName; |
+ } |
+ |
+ private WebappDataStorage getStorage(String packageName) { |
+ return WebappRegistry.getInstance().getWebappDataStorage(getWebApkId(packageName)); |
} |
/** |
* Registers WebAPK with default package name. Overwrites previous registrations. |
+ * @param packageName Package name for which to register the WebApk. |
* @param manifestData <meta-data> values for WebAPK's Android Manifest. |
* @param shellApkVersionCode WebAPK's version of the //chrome/android/webapk/shell_apk code. |
*/ |
- private void registerWebApk(ManifestData manifestData, int shellApkVersionCode) { |
+ private void registerWebApk( |
+ String packageName, ManifestData manifestData, int shellApkVersionCode) { |
Bundle metaData = new Bundle(); |
metaData.putInt( |
WebApkMetaDataKeys.SHELL_APK_VERSION, shellApkVersionCode); |
@@ -225,7 +231,7 @@ public class WebApkUpdateManagerTest { |
metaData.putString(WebApkMetaDataKeys.ICON_URLS_AND_ICON_MURMUR2_HASHES, |
iconUrlsAndIconMurmur2Hashes); |
- WebApkTestHelper.registerWebApkWithMetaData(metaData); |
+ WebApkTestHelper.registerWebApkWithMetaData(packageName, metaData); |
} |
private static ManifestData defaultManifestData() { |
@@ -250,11 +256,12 @@ public class WebApkUpdateManagerTest { |
private static WebApkInfo infoFromManifestData(ManifestData manifestData) { |
if (manifestData == null) return null; |
- return WebApkInfo.create(WEBAPK_ID, "", false /* forceNavigation */, manifestData.scopeUrl, |
- new WebApkInfo.Icon(manifestData.bestIcon), manifestData.name, |
- manifestData.shortName, manifestData.displayMode, manifestData.orientation, -1, |
- manifestData.themeColor, manifestData.backgroundColor, |
- WebApkTestHelper.WEBAPK_PACKAGE_NAME, -1, WEB_MANIFEST_URL, manifestData.startUrl, |
+ final String kPackageName = "org.random.webapk"; |
+ return WebApkInfo.create(getWebApkId(kPackageName), "", false /* forceNavigation */, |
+ manifestData.scopeUrl, new WebApkInfo.Icon(manifestData.bestIcon), |
+ manifestData.name, manifestData.shortName, manifestData.displayMode, |
+ manifestData.orientation, -1, manifestData.themeColor, manifestData.backgroundColor, |
+ kPackageName, -1, WEB_MANIFEST_URL, manifestData.startUrl, |
manifestData.iconUrlToMurmur2HashMap); |
} |
@@ -268,12 +275,15 @@ public class WebApkUpdateManagerTest { |
} |
private static void updateIfNeeded(WebApkUpdateManager updateManager) { |
+ updateIfNeeded(WEBAPK_PACKAGE_NAME, updateManager); |
+ } |
+ |
+ private static void updateIfNeeded(String packageName, WebApkUpdateManager updateManager) { |
// Use the intent version of {@link WebApkInfo#create()} in order to test default values |
// set by the intent version of {@link WebApkInfo#create()}. |
Intent intent = new Intent(); |
intent.putExtra(ShortcutHelper.EXTRA_URL, ""); |
- intent.putExtra( |
- WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WebApkTestHelper.WEBAPK_PACKAGE_NAME); |
+ intent.putExtra(WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, packageName); |
WebApkInfo info = WebApkInfo.create(intent); |
updateManager.updateIfNeeded(null, info); |
@@ -297,25 +307,16 @@ public class WebApkUpdateManagerTest { |
} |
/** |
- * Runs {@link WebApkUpdateManager#updateIfNeeded()} and returns whether an |
- * is-update-needed check has been triggered. |
- */ |
- private boolean updateIfNeededChecksForUpdatedWebManifest() { |
- TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); |
- updateIfNeeded(updateManager); |
- return updateManager.updateCheckStarted(); |
- } |
- |
- /** |
* Checks whether the WebAPK is updated given data from the WebAPK's Android Manifest and data |
* from the fetched Web Manifest. |
*/ |
private boolean checkUpdateNeededForFetchedManifest( |
ManifestData androidManifestData, ManifestData fetchedManifestData) { |
- registerWebApk(androidManifestData, WebApkVersion.CURRENT_SHELL_APK_VERSION); |
+ registerWebApk(WEBAPK_PACKAGE_NAME, androidManifestData, CURRENT_SHELL_APK_VERSION); |
mClock.advance(WebappDataStorage.UPDATE_INTERVAL); |
- TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); |
+ TestWebApkUpdateManager updateManager = |
+ new TestWebApkUpdateManager(getStorage(WEBAPK_PACKAGE_NAME)); |
updateIfNeeded(updateManager); |
assertTrue(updateManager.updateCheckStarted()); |
updateManager.onGotManifestData( |
@@ -329,18 +330,18 @@ public class WebApkUpdateManagerTest { |
CommandLine.init(null); |
ChromeWebApkHost.initForTesting(true); |
- registerWebApk(defaultManifestData(), WebApkVersion.CURRENT_SHELL_APK_VERSION); |
+ registerWebApk(WEBAPK_PACKAGE_NAME, defaultManifestData(), CURRENT_SHELL_APK_VERSION); |
mClock = new MockClock(); |
WebappDataStorage.setClockForTests(mClock); |
- WebappRegistry.getInstance().register( |
- WEBAPK_ID, new WebappRegistry.FetchWebappDataStorageCallback() { |
+ WebappRegistry.getInstance().register(getWebApkId(WEBAPK_PACKAGE_NAME), |
+ new WebappRegistry.FetchWebappDataStorageCallback() { |
@Override |
public void onWebappDataStorageRetrieved(WebappDataStorage storage) {} |
}); |
ShadowApplication.getInstance().runBackgroundTasks(); |
- WebappDataStorage storage = getStorage(); |
+ WebappDataStorage storage = getStorage(WEBAPK_PACKAGE_NAME); |
storage.updateTimeOfLastCheckForUpdatedWebManifest(); |
storage.updateTimeOfLastWebApkUpdateRequestCompletion(); |
storage.updateDidLastWebApkUpdateRequestSucceed(true); |
@@ -354,7 +355,8 @@ public class WebApkUpdateManagerTest { |
public void testCheckOnNextLaunchIfClosePriorToFirstPageLoad() { |
mClock.advance(WebappDataStorage.UPDATE_INTERVAL); |
{ |
- TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); |
+ TestWebApkUpdateManager updateManager = |
+ new TestWebApkUpdateManager(getStorage(WEBAPK_PACKAGE_NAME)); |
updateIfNeeded(updateManager); |
assertTrue(updateManager.updateCheckStarted()); |
} |
@@ -365,7 +367,8 @@ public class WebApkUpdateManagerTest { |
{ |
// Relaunching the WebAPK should do an is-update-needed check. |
- TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); |
+ TestWebApkUpdateManager updateManager = |
+ new TestWebApkUpdateManager(getStorage(WEBAPK_PACKAGE_NAME)); |
updateIfNeeded(updateManager); |
assertTrue(updateManager.updateCheckStarted()); |
onGotUnchangedWebManifestData(updateManager); |
@@ -373,7 +376,8 @@ public class WebApkUpdateManagerTest { |
{ |
// Relaunching the WebAPK should not do an is-update-needed-check. |
- TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); |
+ TestWebApkUpdateManager updateManager = |
+ new TestWebApkUpdateManager(getStorage(WEBAPK_PACKAGE_NAME)); |
updateIfNeeded(updateManager); |
assertFalse(updateManager.updateCheckStarted()); |
} |
@@ -390,13 +394,14 @@ public class WebApkUpdateManagerTest { |
long initialTime = mClock.currentTimeMillis(); |
mClock.advance(WebappDataStorage.UPDATE_INTERVAL); |
- TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); |
+ TestWebApkUpdateManager updateManager = |
+ new TestWebApkUpdateManager(getStorage(WEBAPK_PACKAGE_NAME)); |
updateIfNeeded(updateManager); |
assertTrue(updateManager.updateCheckStarted()); |
onGotUnchangedWebManifestData(updateManager); |
assertFalse(updateManager.updateRequested()); |
- WebappDataStorage storage = getStorage(); |
+ WebappDataStorage storage = getStorage(WEBAPK_PACKAGE_NAME); |
assertTrue(storage.getDidLastWebApkUpdateRequestSucceed()); |
assertEquals(initialTime, storage.getLastWebApkUpdateRequestCompletionTime()); |
} |
@@ -409,11 +414,12 @@ public class WebApkUpdateManagerTest { |
*/ |
@Test |
public void testMarkUpdateAsSucceededIfUpdateNoLongerNeeded() { |
- WebappDataStorage storage = getStorage(); |
+ WebappDataStorage storage = getStorage(WEBAPK_PACKAGE_NAME); |
storage.updateDidLastWebApkUpdateRequestSucceed(false); |
mClock.advance(WebappDataStorage.RETRY_UPDATE_DURATION); |
- TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); |
+ TestWebApkUpdateManager updateManager = |
+ new TestWebApkUpdateManager(getStorage(WEBAPK_PACKAGE_NAME)); |
updateIfNeeded(updateManager); |
assertTrue(updateManager.updateCheckStarted()); |
onGotUnchangedWebManifestData(updateManager); |
@@ -432,7 +438,8 @@ public class WebApkUpdateManagerTest { |
public void testMarkUpdateAsFailedIfClosePriorToUpdateCompleting() { |
mClock.advance(WebappDataStorage.UPDATE_INTERVAL); |
- TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); |
+ TestWebApkUpdateManager updateManager = |
+ new TestWebApkUpdateManager(getStorage(WEBAPK_PACKAGE_NAME)); |
updateIfNeeded(updateManager); |
assertTrue(updateManager.updateCheckStarted()); |
ManifestData manifestData = defaultManifestData(); |
@@ -443,7 +450,7 @@ public class WebApkUpdateManagerTest { |
// Chrome is killed. {@link WebApkUpdateManager#onBuiltWebApk} is never called. |
// Check {@link WebappDataStorage} state. |
- WebappDataStorage storage = getStorage(); |
+ WebappDataStorage storage = getStorage(WEBAPK_PACKAGE_NAME); |
assertFalse(storage.getDidLastWebApkUpdateRequestSucceed()); |
assertEquals( |
mClock.currentTimeMillis(), storage.getLastWebApkUpdateRequestCompletionTime()); |
@@ -460,10 +467,11 @@ public class WebApkUpdateManagerTest { |
*/ |
@Test |
public void testShellApkOutOfDateNoWebManifest() { |
- registerWebApk(defaultManifestData(), WebApkVersion.CURRENT_SHELL_APK_VERSION - 1); |
+ registerWebApk(WEBAPK_PACKAGE_NAME, defaultManifestData(), CURRENT_SHELL_APK_VERSION - 1); |
mClock.advance(WebappDataStorage.UPDATE_INTERVAL); |
- TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); |
+ TestWebApkUpdateManager updateManager = |
+ new TestWebApkUpdateManager(getStorage(WEBAPK_PACKAGE_NAME)); |
updateIfNeeded(updateManager); |
assertTrue(updateManager.updateCheckStarted()); |
@@ -483,10 +491,11 @@ public class WebApkUpdateManagerTest { |
*/ |
@Test |
public void testShellApkOutOfDateStillHasWebManifest() { |
- registerWebApk(defaultManifestData(), WebApkVersion.CURRENT_SHELL_APK_VERSION - 1); |
+ registerWebApk(WEBAPK_PACKAGE_NAME, defaultManifestData(), CURRENT_SHELL_APK_VERSION - 1); |
mClock.advance(WebappDataStorage.UPDATE_INTERVAL); |
- TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); |
+ TestWebApkUpdateManager updateManager = |
+ new TestWebApkUpdateManager(getStorage(WEBAPK_PACKAGE_NAME)); |
updateIfNeeded(updateManager); |
assertTrue(updateManager.updateCheckStarted()); |
@@ -511,7 +520,8 @@ public class WebApkUpdateManagerTest { |
public void testStartUrlRedirectsToPageWithUpdatedWebManifest() { |
mClock.advance(WebappDataStorage.UPDATE_INTERVAL); |
- TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); |
+ TestWebApkUpdateManager updateManager = |
+ new TestWebApkUpdateManager(getStorage(WEBAPK_PACKAGE_NAME)); |
updateIfNeeded(updateManager); |
assertTrue(updateManager.updateCheckStarted()); |
@@ -545,7 +555,8 @@ public class WebApkUpdateManagerTest { |
public void testStartUrlRedirectsToPageWithUnchangedWebManifest() { |
mClock.advance(WebappDataStorage.UPDATE_INTERVAL); |
- TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); |
+ TestWebApkUpdateManager updateManager = |
+ new TestWebApkUpdateManager(getStorage(WEBAPK_PACKAGE_NAME)); |
updateIfNeeded(updateManager); |
updateManager.onWebManifestForInitialUrlNotWebApkCompatible(); |
onGotManifestData(updateManager, defaultManifestData()); |
@@ -563,6 +574,23 @@ public class WebApkUpdateManagerTest { |
} |
/** |
+ * Test that a webapk with an unexpected package name does not request updates. |
+ */ |
+ @Test |
+ public void testUnboundWebApkDoesNotUpgrade() { |
+ ManifestData androidManifestData = defaultManifestData(); |
+ |
+ registerWebApk(UNBOUND_WEBAPK_PACKAGE_NAME, androidManifestData, CURRENT_SHELL_APK_VERSION); |
+ mClock.advance(WebappDataStorage.UPDATE_INTERVAL); |
+ |
+ TestWebApkUpdateManager updateManager = |
+ new TestWebApkUpdateManager(getStorage(UNBOUND_WEBAPK_PACKAGE_NAME)); |
+ updateIfNeeded(UNBOUND_WEBAPK_PACKAGE_NAME, updateManager); |
+ assertFalse(updateManager.updateCheckStarted()); |
+ assertFalse(updateManager.updateRequested()); |
+ } |
+ |
+ /** |
* Test that an upgrade is not requested when the Web Manifest did not change and the Web |
* Manifest scope is empty. |
*/ |
@@ -672,10 +700,10 @@ public class WebApkUpdateManagerTest { |
mClock.advance(WebappDataStorage.UPDATE_INTERVAL); |
ManifestData differentManifestData = defaultManifestData(); |
differentManifestData.name = DIFFERENT_NAME; |
- WebappDataStorage storage = WebappRegistry.getInstance().getWebappDataStorage(WEBAPK_ID); |
+ WebappDataStorage storage = getStorage(WEBAPK_PACKAGE_NAME); |
for (int i = 0; i < 3; ++i) { |
- TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); |
+ TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(storage); |
updateManager.setIsWebApkForeground(true); |
updateIfNeeded(updateManager); |
@@ -685,7 +713,7 @@ public class WebApkUpdateManagerTest { |
assertEquals(i + 1, storage.getUpdateRequests()); |
} |
- TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); |
+ TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(storage); |
updateManager.setIsWebApkForeground(true); |
updateIfNeeded(updateManager); |
@@ -699,10 +727,10 @@ public class WebApkUpdateManagerTest { |
public void testRequestUpdateAfterWebApkOnStopIsCalled() { |
ManifestData differentManifestData = defaultManifestData(); |
differentManifestData.name = DIFFERENT_NAME; |
- WebappDataStorage storage = WebappRegistry.getInstance().getWebappDataStorage(WEBAPK_ID); |
+ WebappDataStorage storage = getStorage(WEBAPK_PACKAGE_NAME); |
mClock.advance(WebappDataStorage.UPDATE_INTERVAL); |
- TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); |
+ TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(storage); |
updateManager.setIsWebApkForeground(true); |
updateIfNeeded(updateManager); |
assertTrue(updateManager.updateCheckStarted()); |
@@ -730,8 +758,9 @@ public class WebApkUpdateManagerTest { |
*/ |
@Test |
public void testShellApkOutOfDate() { |
- registerWebApk(defaultManifestData(), WebApkVersion.CURRENT_SHELL_APK_VERSION - 1); |
- TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); |
+ registerWebApk(WEBAPK_PACKAGE_NAME, defaultManifestData(), CURRENT_SHELL_APK_VERSION - 1); |
+ TestWebApkUpdateManager updateManager = |
+ new TestWebApkUpdateManager(getStorage(WEBAPK_PACKAGE_NAME)); |
// There have not been any update requests for the current ShellAPK version. A WebAPK update |
// should be requested immediately. |
@@ -740,9 +769,9 @@ public class WebApkUpdateManagerTest { |
onGotManifestData(updateManager, defaultManifestData()); |
assertTrue(updateManager.updateRequested()); |
- WebappDataStorage storage = getStorage(); |
+ WebappDataStorage storage = getStorage(WEBAPK_PACKAGE_NAME); |
storage.updateTimeOfLastWebApkUpdateRequestCompletion(); |
- storage.updateLastRequestedShellApkVersion(WebApkVersion.CURRENT_SHELL_APK_VERSION); |
+ storage.updateLastRequestedShellApkVersion(CURRENT_SHELL_APK_VERSION); |
mClock.advance(1); |
updateIfNeeded(updateManager); |