Commit 03d4670d authored by yfriedman's avatar yfriedman Committed by Commit bot

Don't update unbound WebApks.

Since we didn't install them, we can't update them.
BUG=714740

Review-Url: https://codereview.chromium.org/2847973002
Cr-Commit-Position: refs/heads/master@{#468313}
parent 6474e289
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
package org.chromium.chrome.browser.webapps; package org.chromium.chrome.browser.webapps;
import static org.chromium.webapk.lib.common.WebApkConstants.WEBAPK_PACKAGE_PREFIX;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.graphics.Bitmap; import android.graphics.Bitmap;
...@@ -285,6 +287,10 @@ public class WebApkUpdateManager implements WebApkUpdateDataFetcher.Observer { ...@@ -285,6 +287,10 @@ public class WebApkUpdateManager implements WebApkUpdateDataFetcher.Observer {
return true; return true;
} }
if (!info.webApkPackageName().startsWith(WEBAPK_PACKAGE_PREFIX)) {
return false;
}
if (isShellApkVersionOutOfDate(info) if (isShellApkVersionOutOfDate(info)
&& WebApkVersion.CURRENT_SHELL_APK_VERSION && WebApkVersion.CURRENT_SHELL_APK_VERSION
> mStorage.getLastRequestedShellApkVersion()) { > mStorage.getLastRequestedShellApkVersion()) {
......
...@@ -32,6 +32,7 @@ import java.util.Map; ...@@ -32,6 +32,7 @@ import java.util.Map;
@RunWith(LocalRobolectricTestRunner.class) @RunWith(LocalRobolectricTestRunner.class)
@Config(manifest = Config.NONE) @Config(manifest = Config.NONE)
public class WebApkInfoTest { public class WebApkInfoTest {
private static final String WEBAPK_PACKAGE_NAME = "org.chromium.webapk.test_package";
// Android Manifest meta data for {@link PACKAGE_NAME}. // Android Manifest meta data for {@link PACKAGE_NAME}.
private static final String START_URL = "https://www.google.com/scope/a_is_for_apple"; private static final String START_URL = "https://www.google.com/scope/a_is_for_apple";
...@@ -68,19 +69,17 @@ public class WebApkInfoTest { ...@@ -68,19 +69,17 @@ public class WebApkInfoTest {
bundle.putString(WebApkMetaDataKeys.START_URL, START_URL); bundle.putString(WebApkMetaDataKeys.START_URL, START_URL);
bundle.putString(WebApkMetaDataKeys.ICON_URL, ICON_URL); bundle.putString(WebApkMetaDataKeys.ICON_URL, ICON_URL);
bundle.putString(WebApkMetaDataKeys.ICON_MURMUR2_HASH, ICON_MURMUR2_HASH + "L"); bundle.putString(WebApkMetaDataKeys.ICON_MURMUR2_HASH, ICON_MURMUR2_HASH + "L");
WebApkTestHelper.registerWebApkWithMetaData(bundle); WebApkTestHelper.registerWebApkWithMetaData(WEBAPK_PACKAGE_NAME, bundle);
Intent intent = new Intent(); Intent intent = new Intent();
intent.putExtra( intent.putExtra(WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WEBAPK_PACKAGE_NAME);
WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WebApkTestHelper.WEBAPK_PACKAGE_NAME);
intent.putExtra(WebApkConstants.EXTRA_WEBAPK_FORCE_NAVIGATION, true); intent.putExtra(WebApkConstants.EXTRA_WEBAPK_FORCE_NAVIGATION, true);
intent.putExtra(ShortcutHelper.EXTRA_URL, START_URL); intent.putExtra(ShortcutHelper.EXTRA_URL, START_URL);
intent.putExtra(ShortcutHelper.EXTRA_SOURCE, ShortcutSource.NOTIFICATION); intent.putExtra(ShortcutHelper.EXTRA_SOURCE, ShortcutSource.NOTIFICATION);
WebApkInfo info = WebApkInfo.create(intent); WebApkInfo info = WebApkInfo.create(intent);
Assert.assertEquals(WebApkConstants.WEBAPK_ID_PREFIX + WebApkTestHelper.WEBAPK_PACKAGE_NAME, Assert.assertEquals(WebApkConstants.WEBAPK_ID_PREFIX + WEBAPK_PACKAGE_NAME, info.id());
info.id());
Assert.assertEquals(START_URL, info.uri().toString()); Assert.assertEquals(START_URL, info.uri().toString());
Assert.assertTrue(info.shouldForceNavigation()); Assert.assertTrue(info.shouldForceNavigation());
Assert.assertEquals(SCOPE, info.scopeUri().toString()); Assert.assertEquals(SCOPE, info.scopeUri().toString());
...@@ -92,7 +91,7 @@ public class WebApkInfoTest { ...@@ -92,7 +91,7 @@ public class WebApkInfoTest {
Assert.assertEquals(1L, info.themeColor()); Assert.assertEquals(1L, info.themeColor());
Assert.assertTrue(info.hasValidBackgroundColor()); Assert.assertTrue(info.hasValidBackgroundColor());
Assert.assertEquals(2L, info.backgroundColor()); Assert.assertEquals(2L, info.backgroundColor());
Assert.assertEquals(WebApkTestHelper.WEBAPK_PACKAGE_NAME, info.webApkPackageName()); Assert.assertEquals(WEBAPK_PACKAGE_NAME, info.webApkPackageName());
Assert.assertEquals(SHELL_APK_VERSION, info.shellApkVersion()); Assert.assertEquals(SHELL_APK_VERSION, info.shellApkVersion());
Assert.assertEquals(MANIFEST_URL, info.manifestUrl()); Assert.assertEquals(MANIFEST_URL, info.manifestUrl());
Assert.assertEquals(START_URL, info.manifestStartUrl()); Assert.assertEquals(START_URL, info.manifestStartUrl());
...@@ -116,11 +115,10 @@ public class WebApkInfoTest { ...@@ -116,11 +115,10 @@ public class WebApkInfoTest {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString(WebApkMetaDataKeys.START_URL, START_URL); bundle.putString(WebApkMetaDataKeys.START_URL, START_URL);
WebApkTestHelper.registerWebApkWithMetaData(bundle); WebApkTestHelper.registerWebApkWithMetaData(WEBAPK_PACKAGE_NAME, bundle);
Intent intent = new Intent(); Intent intent = new Intent();
intent.putExtra( intent.putExtra(WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WEBAPK_PACKAGE_NAME);
WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WebApkTestHelper.WEBAPK_PACKAGE_NAME);
intent.putExtra(ShortcutHelper.EXTRA_URL, intentStartUrl); intent.putExtra(ShortcutHelper.EXTRA_URL, intentStartUrl);
WebApkInfo info = WebApkInfo.create(intent); WebApkInfo info = WebApkInfo.create(intent);
...@@ -148,11 +146,10 @@ public class WebApkInfoTest { ...@@ -148,11 +146,10 @@ public class WebApkInfoTest {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString(WebApkMetaDataKeys.START_URL, manifestStartUrl); bundle.putString(WebApkMetaDataKeys.START_URL, manifestStartUrl);
bundle.putString(WebApkMetaDataKeys.SCOPE, ""); bundle.putString(WebApkMetaDataKeys.SCOPE, "");
WebApkTestHelper.registerWebApkWithMetaData(bundle); WebApkTestHelper.registerWebApkWithMetaData(WEBAPK_PACKAGE_NAME, bundle);
Intent intent = new Intent(); Intent intent = new Intent();
intent.putExtra( intent.putExtra(WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WEBAPK_PACKAGE_NAME);
WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WebApkTestHelper.WEBAPK_PACKAGE_NAME);
intent.putExtra(ShortcutHelper.EXTRA_URL, intentStartUrl); intent.putExtra(ShortcutHelper.EXTRA_URL, intentStartUrl);
WebApkInfo info = WebApkInfo.create(intent); WebApkInfo info = WebApkInfo.create(intent);
...@@ -174,10 +171,9 @@ public class WebApkInfoTest { ...@@ -174,10 +171,9 @@ public class WebApkInfoTest {
bundle.putString(WebApkMetaDataKeys.START_URL, START_URL); bundle.putString(WebApkMetaDataKeys.START_URL, START_URL);
bundle.putString(WebApkMetaDataKeys.ICON_URLS_AND_ICON_MURMUR2_HASHES, bundle.putString(WebApkMetaDataKeys.ICON_URLS_AND_ICON_MURMUR2_HASHES,
iconUrl1 + " " + murmur2Hash1 + " " + iconUrl2 + " " + murmur2Hash2); iconUrl1 + " " + murmur2Hash1 + " " + iconUrl2 + " " + murmur2Hash2);
WebApkTestHelper.registerWebApkWithMetaData(bundle); WebApkTestHelper.registerWebApkWithMetaData(WEBAPK_PACKAGE_NAME, bundle);
Intent intent = new Intent(); Intent intent = new Intent();
intent.putExtra( intent.putExtra(WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WEBAPK_PACKAGE_NAME);
WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WebApkTestHelper.WEBAPK_PACKAGE_NAME);
intent.putExtra(ShortcutHelper.EXTRA_URL, START_URL); intent.putExtra(ShortcutHelper.EXTRA_URL, START_URL);
WebApkInfo info = WebApkInfo.create(intent); WebApkInfo info = WebApkInfo.create(intent);
...@@ -199,10 +195,9 @@ public class WebApkInfoTest { ...@@ -199,10 +195,9 @@ public class WebApkInfoTest {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString(WebApkMetaDataKeys.START_URL, START_URL); bundle.putString(WebApkMetaDataKeys.START_URL, START_URL);
bundle.putString(WebApkMetaDataKeys.ICON_URLS_AND_ICON_MURMUR2_HASHES, "randomUrl " + hash); bundle.putString(WebApkMetaDataKeys.ICON_URLS_AND_ICON_MURMUR2_HASHES, "randomUrl " + hash);
WebApkTestHelper.registerWebApkWithMetaData(bundle); WebApkTestHelper.registerWebApkWithMetaData(WEBAPK_PACKAGE_NAME, bundle);
Intent intent = new Intent(); Intent intent = new Intent();
intent.putExtra( intent.putExtra(WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WEBAPK_PACKAGE_NAME);
WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WebApkTestHelper.WEBAPK_PACKAGE_NAME);
intent.putExtra(ShortcutHelper.EXTRA_URL, START_URL); intent.putExtra(ShortcutHelper.EXTRA_URL, START_URL);
WebApkInfo info = WebApkInfo.create(intent); WebApkInfo info = WebApkInfo.create(intent);
...@@ -221,11 +216,10 @@ public class WebApkInfoTest { ...@@ -221,11 +216,10 @@ public class WebApkInfoTest {
public void testForceNavigationNotSpecified() { public void testForceNavigationNotSpecified() {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString(WebApkMetaDataKeys.START_URL, START_URL); bundle.putString(WebApkMetaDataKeys.START_URL, START_URL);
WebApkTestHelper.registerWebApkWithMetaData(bundle); WebApkTestHelper.registerWebApkWithMetaData(WEBAPK_PACKAGE_NAME, bundle);
Intent intent = new Intent(); Intent intent = new Intent();
intent.putExtra( intent.putExtra(WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WEBAPK_PACKAGE_NAME);
WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WebApkTestHelper.WEBAPK_PACKAGE_NAME);
intent.putExtra(ShortcutHelper.EXTRA_URL, START_URL); intent.putExtra(ShortcutHelper.EXTRA_URL, START_URL);
WebApkInfo info = WebApkInfo.create(intent); WebApkInfo info = WebApkInfo.create(intent);
......
...@@ -8,6 +8,8 @@ import static org.junit.Assert.assertEquals; ...@@ -8,6 +8,8 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.chromium.webapk.lib.client.WebApkVersion.CURRENT_SHELL_APK_VERSION;
import android.content.Intent; import android.content.Intent;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.Color; import android.graphics.Color;
...@@ -31,7 +33,6 @@ import org.chromium.chrome.browser.ShortcutHelper; ...@@ -31,7 +33,6 @@ import org.chromium.chrome.browser.ShortcutHelper;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.content_public.common.ScreenOrientationValues; import org.chromium.content_public.common.ScreenOrientationValues;
import org.chromium.testing.local.LocalRobolectricTestRunner; 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.WebApkConstants;
import org.chromium.webapk.lib.common.WebApkMetaDataKeys; import org.chromium.webapk.lib.common.WebApkMetaDataKeys;
import org.chromium.webapk.test.WebApkTestHelper; import org.chromium.webapk.test.WebApkTestHelper;
...@@ -48,9 +49,8 @@ public class WebApkUpdateManagerTest { ...@@ -48,9 +49,8 @@ public class WebApkUpdateManagerTest {
@Rule @Rule
public DisableHistogramsRule mDisableHistogramsRule = new DisableHistogramsRule(); public DisableHistogramsRule mDisableHistogramsRule = new DisableHistogramsRule();
/** WebAPK's id in {@link WebAppDataStorage}. */ private static final String WEBAPK_PACKAGE_NAME = "org.chromium.webapk.test_package";
private static final String WEBAPK_ID = private static final String UNBOUND_WEBAPK_PACKAGE_NAME = "com.webapk.test_package";
WebApkConstants.WEBAPK_ID_PREFIX + WebApkTestHelper.WEBAPK_PACKAGE_NAME;
/** Web Manifest URL */ /** Web Manifest URL */
private static final String WEB_MANIFEST_URL = "manifest.json"; private static final String WEB_MANIFEST_URL = "manifest.json";
...@@ -192,16 +192,22 @@ public class WebApkUpdateManagerTest { ...@@ -192,16 +192,22 @@ public class WebApkUpdateManagerTest {
private MockClock mClock; private MockClock mClock;
private WebappDataStorage getStorage() { private static String getWebApkId(String packageName) {
return WebappRegistry.getInstance().getWebappDataStorage(WEBAPK_ID); 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. * 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 manifestData <meta-data> values for WebAPK's Android Manifest.
* @param shellApkVersionCode WebAPK's version of the //chrome/android/webapk/shell_apk code. * @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(); Bundle metaData = new Bundle();
metaData.putInt( metaData.putInt(
WebApkMetaDataKeys.SHELL_APK_VERSION, shellApkVersionCode); WebApkMetaDataKeys.SHELL_APK_VERSION, shellApkVersionCode);
...@@ -225,7 +231,7 @@ public class WebApkUpdateManagerTest { ...@@ -225,7 +231,7 @@ public class WebApkUpdateManagerTest {
metaData.putString(WebApkMetaDataKeys.ICON_URLS_AND_ICON_MURMUR2_HASHES, metaData.putString(WebApkMetaDataKeys.ICON_URLS_AND_ICON_MURMUR2_HASHES,
iconUrlsAndIconMurmur2Hashes); iconUrlsAndIconMurmur2Hashes);
WebApkTestHelper.registerWebApkWithMetaData(metaData); WebApkTestHelper.registerWebApkWithMetaData(packageName, metaData);
} }
private static ManifestData defaultManifestData() { private static ManifestData defaultManifestData() {
...@@ -250,11 +256,12 @@ public class WebApkUpdateManagerTest { ...@@ -250,11 +256,12 @@ public class WebApkUpdateManagerTest {
private static WebApkInfo infoFromManifestData(ManifestData manifestData) { private static WebApkInfo infoFromManifestData(ManifestData manifestData) {
if (manifestData == null) return null; if (manifestData == null) return null;
return WebApkInfo.create(WEBAPK_ID, "", false /* forceNavigation */, manifestData.scopeUrl, final String kPackageName = "org.random.webapk";
new WebApkInfo.Icon(manifestData.bestIcon), manifestData.name, return WebApkInfo.create(getWebApkId(kPackageName), "", false /* forceNavigation */,
manifestData.shortName, manifestData.displayMode, manifestData.orientation, -1, manifestData.scopeUrl, new WebApkInfo.Icon(manifestData.bestIcon),
manifestData.themeColor, manifestData.backgroundColor, manifestData.name, manifestData.shortName, manifestData.displayMode,
WebApkTestHelper.WEBAPK_PACKAGE_NAME, -1, WEB_MANIFEST_URL, manifestData.startUrl, manifestData.orientation, -1, manifestData.themeColor, manifestData.backgroundColor,
kPackageName, -1, WEB_MANIFEST_URL, manifestData.startUrl,
manifestData.iconUrlToMurmur2HashMap); manifestData.iconUrlToMurmur2HashMap);
} }
...@@ -268,12 +275,15 @@ public class WebApkUpdateManagerTest { ...@@ -268,12 +275,15 @@ public class WebApkUpdateManagerTest {
} }
private static void updateIfNeeded(WebApkUpdateManager updateManager) { 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 // Use the intent version of {@link WebApkInfo#create()} in order to test default values
// set by the intent version of {@link WebApkInfo#create()}. // set by the intent version of {@link WebApkInfo#create()}.
Intent intent = new Intent(); Intent intent = new Intent();
intent.putExtra(ShortcutHelper.EXTRA_URL, ""); intent.putExtra(ShortcutHelper.EXTRA_URL, "");
intent.putExtra( intent.putExtra(WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, packageName);
WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WebApkTestHelper.WEBAPK_PACKAGE_NAME);
WebApkInfo info = WebApkInfo.create(intent); WebApkInfo info = WebApkInfo.create(intent);
updateManager.updateIfNeeded(null, info); updateManager.updateIfNeeded(null, info);
...@@ -296,26 +306,17 @@ public class WebApkUpdateManagerTest { ...@@ -296,26 +306,17 @@ public class WebApkUpdateManagerTest {
return fetchedManifestData.iconUrlToMurmur2HashMap.keySet().iterator().next(); return fetchedManifestData.iconUrlToMurmur2HashMap.keySet().iterator().next();
} }
/**
* 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 * Checks whether the WebAPK is updated given data from the WebAPK's Android Manifest and data
* from the fetched Web Manifest. * from the fetched Web Manifest.
*/ */
private boolean checkUpdateNeededForFetchedManifest( private boolean checkUpdateNeededForFetchedManifest(
ManifestData androidManifestData, ManifestData fetchedManifestData) { 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); mClock.advance(WebappDataStorage.UPDATE_INTERVAL);
TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); TestWebApkUpdateManager updateManager =
new TestWebApkUpdateManager(getStorage(WEBAPK_PACKAGE_NAME));
updateIfNeeded(updateManager); updateIfNeeded(updateManager);
assertTrue(updateManager.updateCheckStarted()); assertTrue(updateManager.updateCheckStarted());
updateManager.onGotManifestData( updateManager.onGotManifestData(
...@@ -329,18 +330,18 @@ public class WebApkUpdateManagerTest { ...@@ -329,18 +330,18 @@ public class WebApkUpdateManagerTest {
CommandLine.init(null); CommandLine.init(null);
ChromeWebApkHost.initForTesting(true); ChromeWebApkHost.initForTesting(true);
registerWebApk(defaultManifestData(), WebApkVersion.CURRENT_SHELL_APK_VERSION); registerWebApk(WEBAPK_PACKAGE_NAME, defaultManifestData(), CURRENT_SHELL_APK_VERSION);
mClock = new MockClock(); mClock = new MockClock();
WebappDataStorage.setClockForTests(mClock); WebappDataStorage.setClockForTests(mClock);
WebappRegistry.getInstance().register( WebappRegistry.getInstance().register(getWebApkId(WEBAPK_PACKAGE_NAME),
WEBAPK_ID, new WebappRegistry.FetchWebappDataStorageCallback() { new WebappRegistry.FetchWebappDataStorageCallback() {
@Override @Override
public void onWebappDataStorageRetrieved(WebappDataStorage storage) {} public void onWebappDataStorageRetrieved(WebappDataStorage storage) {}
}); });
ShadowApplication.getInstance().runBackgroundTasks(); ShadowApplication.getInstance().runBackgroundTasks();
WebappDataStorage storage = getStorage(); WebappDataStorage storage = getStorage(WEBAPK_PACKAGE_NAME);
storage.updateTimeOfLastCheckForUpdatedWebManifest(); storage.updateTimeOfLastCheckForUpdatedWebManifest();
storage.updateTimeOfLastWebApkUpdateRequestCompletion(); storage.updateTimeOfLastWebApkUpdateRequestCompletion();
storage.updateDidLastWebApkUpdateRequestSucceed(true); storage.updateDidLastWebApkUpdateRequestSucceed(true);
...@@ -354,7 +355,8 @@ public class WebApkUpdateManagerTest { ...@@ -354,7 +355,8 @@ public class WebApkUpdateManagerTest {
public void testCheckOnNextLaunchIfClosePriorToFirstPageLoad() { public void testCheckOnNextLaunchIfClosePriorToFirstPageLoad() {
mClock.advance(WebappDataStorage.UPDATE_INTERVAL); mClock.advance(WebappDataStorage.UPDATE_INTERVAL);
{ {
TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); TestWebApkUpdateManager updateManager =
new TestWebApkUpdateManager(getStorage(WEBAPK_PACKAGE_NAME));
updateIfNeeded(updateManager); updateIfNeeded(updateManager);
assertTrue(updateManager.updateCheckStarted()); assertTrue(updateManager.updateCheckStarted());
} }
...@@ -365,7 +367,8 @@ public class WebApkUpdateManagerTest { ...@@ -365,7 +367,8 @@ public class WebApkUpdateManagerTest {
{ {
// Relaunching the WebAPK should do an is-update-needed check. // 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); updateIfNeeded(updateManager);
assertTrue(updateManager.updateCheckStarted()); assertTrue(updateManager.updateCheckStarted());
onGotUnchangedWebManifestData(updateManager); onGotUnchangedWebManifestData(updateManager);
...@@ -373,7 +376,8 @@ public class WebApkUpdateManagerTest { ...@@ -373,7 +376,8 @@ public class WebApkUpdateManagerTest {
{ {
// Relaunching the WebAPK should not do an is-update-needed-check. // 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); updateIfNeeded(updateManager);
assertFalse(updateManager.updateCheckStarted()); assertFalse(updateManager.updateCheckStarted());
} }
...@@ -390,13 +394,14 @@ public class WebApkUpdateManagerTest { ...@@ -390,13 +394,14 @@ public class WebApkUpdateManagerTest {
long initialTime = mClock.currentTimeMillis(); long initialTime = mClock.currentTimeMillis();
mClock.advance(WebappDataStorage.UPDATE_INTERVAL); mClock.advance(WebappDataStorage.UPDATE_INTERVAL);
TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); TestWebApkUpdateManager updateManager =
new TestWebApkUpdateManager(getStorage(WEBAPK_PACKAGE_NAME));
updateIfNeeded(updateManager); updateIfNeeded(updateManager);
assertTrue(updateManager.updateCheckStarted()); assertTrue(updateManager.updateCheckStarted());
onGotUnchangedWebManifestData(updateManager); onGotUnchangedWebManifestData(updateManager);
assertFalse(updateManager.updateRequested()); assertFalse(updateManager.updateRequested());
WebappDataStorage storage = getStorage(); WebappDataStorage storage = getStorage(WEBAPK_PACKAGE_NAME);
assertTrue(storage.getDidLastWebApkUpdateRequestSucceed()); assertTrue(storage.getDidLastWebApkUpdateRequestSucceed());
assertEquals(initialTime, storage.getLastWebApkUpdateRequestCompletionTime()); assertEquals(initialTime, storage.getLastWebApkUpdateRequestCompletionTime());
} }
...@@ -409,11 +414,12 @@ public class WebApkUpdateManagerTest { ...@@ -409,11 +414,12 @@ public class WebApkUpdateManagerTest {
*/ */
@Test @Test
public void testMarkUpdateAsSucceededIfUpdateNoLongerNeeded() { public void testMarkUpdateAsSucceededIfUpdateNoLongerNeeded() {
WebappDataStorage storage = getStorage(); WebappDataStorage storage = getStorage(WEBAPK_PACKAGE_NAME);
storage.updateDidLastWebApkUpdateRequestSucceed(false); storage.updateDidLastWebApkUpdateRequestSucceed(false);
mClock.advance(WebappDataStorage.RETRY_UPDATE_DURATION); mClock.advance(WebappDataStorage.RETRY_UPDATE_DURATION);
TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); TestWebApkUpdateManager updateManager =
new TestWebApkUpdateManager(getStorage(WEBAPK_PACKAGE_NAME));
updateIfNeeded(updateManager); updateIfNeeded(updateManager);
assertTrue(updateManager.updateCheckStarted()); assertTrue(updateManager.updateCheckStarted());
onGotUnchangedWebManifestData(updateManager); onGotUnchangedWebManifestData(updateManager);
...@@ -432,7 +438,8 @@ public class WebApkUpdateManagerTest { ...@@ -432,7 +438,8 @@ public class WebApkUpdateManagerTest {
public void testMarkUpdateAsFailedIfClosePriorToUpdateCompleting() { public void testMarkUpdateAsFailedIfClosePriorToUpdateCompleting() {
mClock.advance(WebappDataStorage.UPDATE_INTERVAL); mClock.advance(WebappDataStorage.UPDATE_INTERVAL);
TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); TestWebApkUpdateManager updateManager =
new TestWebApkUpdateManager(getStorage(WEBAPK_PACKAGE_NAME));
updateIfNeeded(updateManager); updateIfNeeded(updateManager);
assertTrue(updateManager.updateCheckStarted()); assertTrue(updateManager.updateCheckStarted());
ManifestData manifestData = defaultManifestData(); ManifestData manifestData = defaultManifestData();
...@@ -443,7 +450,7 @@ public class WebApkUpdateManagerTest { ...@@ -443,7 +450,7 @@ public class WebApkUpdateManagerTest {
// Chrome is killed. {@link WebApkUpdateManager#onBuiltWebApk} is never called. // Chrome is killed. {@link WebApkUpdateManager#onBuiltWebApk} is never called.
// Check {@link WebappDataStorage} state. // Check {@link WebappDataStorage} state.
WebappDataStorage storage = getStorage(); WebappDataStorage storage = getStorage(WEBAPK_PACKAGE_NAME);
assertFalse(storage.getDidLastWebApkUpdateRequestSucceed()); assertFalse(storage.getDidLastWebApkUpdateRequestSucceed());
assertEquals( assertEquals(
mClock.currentTimeMillis(), storage.getLastWebApkUpdateRequestCompletionTime()); mClock.currentTimeMillis(), storage.getLastWebApkUpdateRequestCompletionTime());
...@@ -460,10 +467,11 @@ public class WebApkUpdateManagerTest { ...@@ -460,10 +467,11 @@ public class WebApkUpdateManagerTest {
*/ */
@Test @Test
public void testShellApkOutOfDateNoWebManifest() { 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); mClock.advance(WebappDataStorage.UPDATE_INTERVAL);
TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); TestWebApkUpdateManager updateManager =
new TestWebApkUpdateManager(getStorage(WEBAPK_PACKAGE_NAME));
updateIfNeeded(updateManager); updateIfNeeded(updateManager);
assertTrue(updateManager.updateCheckStarted()); assertTrue(updateManager.updateCheckStarted());
...@@ -483,10 +491,11 @@ public class WebApkUpdateManagerTest { ...@@ -483,10 +491,11 @@ public class WebApkUpdateManagerTest {
*/ */
@Test @Test
public void testShellApkOutOfDateStillHasWebManifest() { 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); mClock.advance(WebappDataStorage.UPDATE_INTERVAL);
TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); TestWebApkUpdateManager updateManager =
new TestWebApkUpdateManager(getStorage(WEBAPK_PACKAGE_NAME));
updateIfNeeded(updateManager); updateIfNeeded(updateManager);
assertTrue(updateManager.updateCheckStarted()); assertTrue(updateManager.updateCheckStarted());
...@@ -511,7 +520,8 @@ public class WebApkUpdateManagerTest { ...@@ -511,7 +520,8 @@ public class WebApkUpdateManagerTest {
public void testStartUrlRedirectsToPageWithUpdatedWebManifest() { public void testStartUrlRedirectsToPageWithUpdatedWebManifest() {
mClock.advance(WebappDataStorage.UPDATE_INTERVAL); mClock.advance(WebappDataStorage.UPDATE_INTERVAL);
TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); TestWebApkUpdateManager updateManager =
new TestWebApkUpdateManager(getStorage(WEBAPK_PACKAGE_NAME));
updateIfNeeded(updateManager); updateIfNeeded(updateManager);
assertTrue(updateManager.updateCheckStarted()); assertTrue(updateManager.updateCheckStarted());
...@@ -545,7 +555,8 @@ public class WebApkUpdateManagerTest { ...@@ -545,7 +555,8 @@ public class WebApkUpdateManagerTest {
public void testStartUrlRedirectsToPageWithUnchangedWebManifest() { public void testStartUrlRedirectsToPageWithUnchangedWebManifest() {
mClock.advance(WebappDataStorage.UPDATE_INTERVAL); mClock.advance(WebappDataStorage.UPDATE_INTERVAL);
TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); TestWebApkUpdateManager updateManager =
new TestWebApkUpdateManager(getStorage(WEBAPK_PACKAGE_NAME));
updateIfNeeded(updateManager); updateIfNeeded(updateManager);
updateManager.onWebManifestForInitialUrlNotWebApkCompatible(); updateManager.onWebManifestForInitialUrlNotWebApkCompatible();
onGotManifestData(updateManager, defaultManifestData()); onGotManifestData(updateManager, defaultManifestData());
...@@ -562,6 +573,23 @@ public class WebApkUpdateManagerTest { ...@@ -562,6 +573,23 @@ public class WebApkUpdateManagerTest {
checkUpdateNeededForFetchedManifest(defaultManifestData(), defaultManifestData())); checkUpdateNeededForFetchedManifest(defaultManifestData(), defaultManifestData()));
} }
/**
* 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 * Test that an upgrade is not requested when the Web Manifest did not change and the Web
* Manifest scope is empty. * Manifest scope is empty.
...@@ -672,10 +700,10 @@ public class WebApkUpdateManagerTest { ...@@ -672,10 +700,10 @@ public class WebApkUpdateManagerTest {
mClock.advance(WebappDataStorage.UPDATE_INTERVAL); mClock.advance(WebappDataStorage.UPDATE_INTERVAL);
ManifestData differentManifestData = defaultManifestData(); ManifestData differentManifestData = defaultManifestData();
differentManifestData.name = DIFFERENT_NAME; differentManifestData.name = DIFFERENT_NAME;
WebappDataStorage storage = WebappRegistry.getInstance().getWebappDataStorage(WEBAPK_ID); WebappDataStorage storage = getStorage(WEBAPK_PACKAGE_NAME);
for (int i = 0; i < 3; ++i) { for (int i = 0; i < 3; ++i) {
TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(storage);
updateManager.setIsWebApkForeground(true); updateManager.setIsWebApkForeground(true);
updateIfNeeded(updateManager); updateIfNeeded(updateManager);
...@@ -685,7 +713,7 @@ public class WebApkUpdateManagerTest { ...@@ -685,7 +713,7 @@ public class WebApkUpdateManagerTest {
assertEquals(i + 1, storage.getUpdateRequests()); assertEquals(i + 1, storage.getUpdateRequests());
} }
TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(storage);
updateManager.setIsWebApkForeground(true); updateManager.setIsWebApkForeground(true);
updateIfNeeded(updateManager); updateIfNeeded(updateManager);
...@@ -699,10 +727,10 @@ public class WebApkUpdateManagerTest { ...@@ -699,10 +727,10 @@ public class WebApkUpdateManagerTest {
public void testRequestUpdateAfterWebApkOnStopIsCalled() { public void testRequestUpdateAfterWebApkOnStopIsCalled() {
ManifestData differentManifestData = defaultManifestData(); ManifestData differentManifestData = defaultManifestData();
differentManifestData.name = DIFFERENT_NAME; differentManifestData.name = DIFFERENT_NAME;
WebappDataStorage storage = WebappRegistry.getInstance().getWebappDataStorage(WEBAPK_ID); WebappDataStorage storage = getStorage(WEBAPK_PACKAGE_NAME);
mClock.advance(WebappDataStorage.UPDATE_INTERVAL); mClock.advance(WebappDataStorage.UPDATE_INTERVAL);
TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(storage);
updateManager.setIsWebApkForeground(true); updateManager.setIsWebApkForeground(true);
updateIfNeeded(updateManager); updateIfNeeded(updateManager);
assertTrue(updateManager.updateCheckStarted()); assertTrue(updateManager.updateCheckStarted());
...@@ -730,8 +758,9 @@ public class WebApkUpdateManagerTest { ...@@ -730,8 +758,9 @@ public class WebApkUpdateManagerTest {
*/ */
@Test @Test
public void testShellApkOutOfDate() { public void testShellApkOutOfDate() {
registerWebApk(defaultManifestData(), WebApkVersion.CURRENT_SHELL_APK_VERSION - 1); registerWebApk(WEBAPK_PACKAGE_NAME, defaultManifestData(), CURRENT_SHELL_APK_VERSION - 1);
TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(getStorage()); TestWebApkUpdateManager updateManager =
new TestWebApkUpdateManager(getStorage(WEBAPK_PACKAGE_NAME));
// There have not been any update requests for the current ShellAPK version. A WebAPK update // There have not been any update requests for the current ShellAPK version. A WebAPK update
// should be requested immediately. // should be requested immediately.
...@@ -740,9 +769,9 @@ public class WebApkUpdateManagerTest { ...@@ -740,9 +769,9 @@ public class WebApkUpdateManagerTest {
onGotManifestData(updateManager, defaultManifestData()); onGotManifestData(updateManager, defaultManifestData());
assertTrue(updateManager.updateRequested()); assertTrue(updateManager.updateRequested());
WebappDataStorage storage = getStorage(); WebappDataStorage storage = getStorage(WEBAPK_PACKAGE_NAME);
storage.updateTimeOfLastWebApkUpdateRequestCompletion(); storage.updateTimeOfLastWebApkUpdateRequestCompletion();
storage.updateLastRequestedShellApkVersion(WebApkVersion.CURRENT_SHELL_APK_VERSION); storage.updateLastRequestedShellApkVersion(CURRENT_SHELL_APK_VERSION);
mClock.advance(1); mClock.advance(1);
updateIfNeeded(updateManager); updateIfNeeded(updateManager);
......
...@@ -28,10 +28,11 @@ import org.chromium.webapk.test.WebApkTestHelper; ...@@ -28,10 +28,11 @@ import org.chromium.webapk.test.WebApkTestHelper;
* Tests MainActivity. * Tests MainActivity.
*/ */
@RunWith(LocalRobolectricTestRunner.class) @RunWith(LocalRobolectricTestRunner.class)
@Config(manifest = Config.NONE, packageName = WebApkTestHelper.WEBAPK_PACKAGE_NAME) @Config(manifest = Config.NONE, packageName = MainActivityTest.WEBAPK_PACKAGE_NAME)
public class MainActivityTest { public class MainActivityTest {
private static final String HOST_BROWSER_PACKAGE_NAME = "truly.random"; private static final String HOST_BROWSER_PACKAGE_NAME = "truly.random";
protected static final String WEBAPK_PACKAGE_NAME = "org.chromium.webapk.test_package";
private ShadowApplication mShadowApplication; private ShadowApplication mShadowApplication;
private RobolectricPackageManager mPackageManager; private RobolectricPackageManager mPackageManager;
...@@ -55,7 +56,7 @@ public class MainActivityTest { ...@@ -55,7 +56,7 @@ public class MainActivityTest {
Bundle metaData = new Bundle(); Bundle metaData = new Bundle();
metaData.putString(WebApkMetaDataKeys.RUNTIME_HOST, HOST_BROWSER_PACKAGE_NAME); metaData.putString(WebApkMetaDataKeys.RUNTIME_HOST, HOST_BROWSER_PACKAGE_NAME);
metaData.putString(WebApkMetaDataKeys.START_URL, "http://random.org"); metaData.putString(WebApkMetaDataKeys.START_URL, "http://random.org");
WebApkTestHelper.registerWebApkWithMetaData(metaData); WebApkTestHelper.registerWebApkWithMetaData(WEBAPK_PACKAGE_NAME, metaData);
// Make intents to Google Play not throw ActivityNotFoundException. // Make intents to Google Play not throw ActivityNotFoundException.
mPackageManager.addResolveInfoForIntent( mPackageManager.addResolveInfoForIntent(
...@@ -82,7 +83,7 @@ public class MainActivityTest { ...@@ -82,7 +83,7 @@ public class MainActivityTest {
Bundle metaData = new Bundle(); Bundle metaData = new Bundle();
metaData.putString(WebApkMetaDataKeys.RUNTIME_HOST, HOST_BROWSER_PACKAGE_NAME); metaData.putString(WebApkMetaDataKeys.RUNTIME_HOST, HOST_BROWSER_PACKAGE_NAME);
metaData.putString(WebApkMetaDataKeys.START_URL, "http://random.org"); metaData.putString(WebApkMetaDataKeys.START_URL, "http://random.org");
WebApkTestHelper.registerWebApkWithMetaData(metaData); WebApkTestHelper.registerWebApkWithMetaData(WEBAPK_PACKAGE_NAME, metaData);
Robolectric.buildActivity(MainActivity.class).create(); Robolectric.buildActivity(MainActivity.class).create();
......
...@@ -15,19 +15,15 @@ import org.robolectric.res.builder.RobolectricPackageManager; ...@@ -15,19 +15,15 @@ import org.robolectric.res.builder.RobolectricPackageManager;
* Helper class for WebAPK JUnit tests. * Helper class for WebAPK JUnit tests.
*/ */
public class WebApkTestHelper { public class WebApkTestHelper {
/**
* Package name of the WebAPK registered by {@link #registerWebApkWithMetaData}.
*/
public static final String WEBAPK_PACKAGE_NAME = "org.chromium.webapk.test_package";
/** /**
* Registers WebAPK. * Registers WebAPK.
* @param packageName The package to register
* @param metaData Bundle with meta data from WebAPK's Android Manifest. * @param metaData Bundle with meta data from WebAPK's Android Manifest.
*/ */
public static void registerWebApkWithMetaData(Bundle metaData) { public static void registerWebApkWithMetaData(String packageName, Bundle metaData) {
RobolectricPackageManager packageManager = RobolectricPackageManager packageManager =
(RobolectricPackageManager) RuntimeEnvironment.application.getPackageManager(); (RobolectricPackageManager) RuntimeEnvironment.application.getPackageManager();
packageManager.addPackage(newPackageInfo(WEBAPK_PACKAGE_NAME, metaData)); packageManager.addPackage(newPackageInfo(packageName, metaData));
} }
private static PackageInfo newPackageInfo(String packageName, Bundle metaData) { private static PackageInfo newPackageInfo(String packageName, Bundle metaData) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment