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 @@
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.PackageManager;
import android.graphics.Bitmap;
......@@ -285,6 +287,10 @@ public class WebApkUpdateManager implements WebApkUpdateDataFetcher.Observer {
return true;
}
if (!info.webApkPackageName().startsWith(WEBAPK_PACKAGE_PREFIX)) {
return false;
}
if (isShellApkVersionOutOfDate(info)
&& WebApkVersion.CURRENT_SHELL_APK_VERSION
> mStorage.getLastRequestedShellApkVersion()) {
......
......@@ -32,6 +32,7 @@ import java.util.Map;
@RunWith(LocalRobolectricTestRunner.class)
@Config(manifest = Config.NONE)
public class WebApkInfoTest {
private static final String WEBAPK_PACKAGE_NAME = "org.chromium.webapk.test_package";
// Android Manifest meta data for {@link PACKAGE_NAME}.
private static final String START_URL = "https://www.google.com/scope/a_is_for_apple";
......@@ -68,19 +69,17 @@ public class WebApkInfoTest {
bundle.putString(WebApkMetaDataKeys.START_URL, START_URL);
bundle.putString(WebApkMetaDataKeys.ICON_URL, ICON_URL);
bundle.putString(WebApkMetaDataKeys.ICON_MURMUR2_HASH, ICON_MURMUR2_HASH + "L");
WebApkTestHelper.registerWebApkWithMetaData(bundle);
WebApkTestHelper.registerWebApkWithMetaData(WEBAPK_PACKAGE_NAME, bundle);
Intent intent = new Intent();
intent.putExtra(
WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WebApkTestHelper.WEBAPK_PACKAGE_NAME);
intent.putExtra(WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WEBAPK_PACKAGE_NAME);
intent.putExtra(WebApkConstants.EXTRA_WEBAPK_FORCE_NAVIGATION, true);
intent.putExtra(ShortcutHelper.EXTRA_URL, START_URL);
intent.putExtra(ShortcutHelper.EXTRA_SOURCE, ShortcutSource.NOTIFICATION);
WebApkInfo info = WebApkInfo.create(intent);
Assert.assertEquals(WebApkConstants.WEBAPK_ID_PREFIX + WebApkTestHelper.WEBAPK_PACKAGE_NAME,
info.id());
Assert.assertEquals(WebApkConstants.WEBAPK_ID_PREFIX + WEBAPK_PACKAGE_NAME, info.id());
Assert.assertEquals(START_URL, info.uri().toString());
Assert.assertTrue(info.shouldForceNavigation());
Assert.assertEquals(SCOPE, info.scopeUri().toString());
......@@ -92,7 +91,7 @@ public class WebApkInfoTest {
Assert.assertEquals(1L, info.themeColor());
Assert.assertTrue(info.hasValidBackgroundColor());
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(MANIFEST_URL, info.manifestUrl());
Assert.assertEquals(START_URL, info.manifestStartUrl());
......@@ -116,11 +115,10 @@ public class WebApkInfoTest {
Bundle bundle = new Bundle();
bundle.putString(WebApkMetaDataKeys.START_URL, START_URL);
WebApkTestHelper.registerWebApkWithMetaData(bundle);
WebApkTestHelper.registerWebApkWithMetaData(WEBAPK_PACKAGE_NAME, bundle);
Intent intent = new Intent();
intent.putExtra(
WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WebApkTestHelper.WEBAPK_PACKAGE_NAME);
intent.putExtra(WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WEBAPK_PACKAGE_NAME);
intent.putExtra(ShortcutHelper.EXTRA_URL, intentStartUrl);
WebApkInfo info = WebApkInfo.create(intent);
......@@ -148,11 +146,10 @@ public class WebApkInfoTest {
Bundle bundle = new Bundle();
bundle.putString(WebApkMetaDataKeys.START_URL, manifestStartUrl);
bundle.putString(WebApkMetaDataKeys.SCOPE, "");
WebApkTestHelper.registerWebApkWithMetaData(bundle);
WebApkTestHelper.registerWebApkWithMetaData(WEBAPK_PACKAGE_NAME, bundle);
Intent intent = new Intent();
intent.putExtra(
WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WebApkTestHelper.WEBAPK_PACKAGE_NAME);
intent.putExtra(WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WEBAPK_PACKAGE_NAME);
intent.putExtra(ShortcutHelper.EXTRA_URL, intentStartUrl);
WebApkInfo info = WebApkInfo.create(intent);
......@@ -174,10 +171,9 @@ public class WebApkInfoTest {
bundle.putString(WebApkMetaDataKeys.START_URL, START_URL);
bundle.putString(WebApkMetaDataKeys.ICON_URLS_AND_ICON_MURMUR2_HASHES,
iconUrl1 + " " + murmur2Hash1 + " " + iconUrl2 + " " + murmur2Hash2);
WebApkTestHelper.registerWebApkWithMetaData(bundle);
WebApkTestHelper.registerWebApkWithMetaData(WEBAPK_PACKAGE_NAME, bundle);
Intent intent = new Intent();
intent.putExtra(
WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WebApkTestHelper.WEBAPK_PACKAGE_NAME);
intent.putExtra(WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WEBAPK_PACKAGE_NAME);
intent.putExtra(ShortcutHelper.EXTRA_URL, START_URL);
WebApkInfo info = WebApkInfo.create(intent);
......@@ -199,10 +195,9 @@ public class WebApkInfoTest {
Bundle bundle = new Bundle();
bundle.putString(WebApkMetaDataKeys.START_URL, START_URL);
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.putExtra(
WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WebApkTestHelper.WEBAPK_PACKAGE_NAME);
intent.putExtra(WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WEBAPK_PACKAGE_NAME);
intent.putExtra(ShortcutHelper.EXTRA_URL, START_URL);
WebApkInfo info = WebApkInfo.create(intent);
......@@ -221,11 +216,10 @@ public class WebApkInfoTest {
public void testForceNavigationNotSpecified() {
Bundle bundle = new Bundle();
bundle.putString(WebApkMetaDataKeys.START_URL, START_URL);
WebApkTestHelper.registerWebApkWithMetaData(bundle);
WebApkTestHelper.registerWebApkWithMetaData(WEBAPK_PACKAGE_NAME, bundle);
Intent intent = new Intent();
intent.putExtra(
WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WebApkTestHelper.WEBAPK_PACKAGE_NAME);
intent.putExtra(WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, WEBAPK_PACKAGE_NAME);
intent.putExtra(ShortcutHelper.EXTRA_URL, START_URL);
WebApkInfo info = WebApkInfo.create(intent);
......
......@@ -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);
......@@ -296,26 +306,17 @@ public class WebApkUpdateManagerTest {
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
* 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());
......@@ -562,6 +573,23 @@ public class WebApkUpdateManagerTest {
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
* 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);
......
......@@ -28,10 +28,11 @@ import org.chromium.webapk.test.WebApkTestHelper;
* Tests MainActivity.
*/
@RunWith(LocalRobolectricTestRunner.class)
@Config(manifest = Config.NONE, packageName = WebApkTestHelper.WEBAPK_PACKAGE_NAME)
@Config(manifest = Config.NONE, packageName = MainActivityTest.WEBAPK_PACKAGE_NAME)
public class MainActivityTest {
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 RobolectricPackageManager mPackageManager;
......@@ -55,7 +56,7 @@ public class MainActivityTest {
Bundle metaData = new Bundle();
metaData.putString(WebApkMetaDataKeys.RUNTIME_HOST, HOST_BROWSER_PACKAGE_NAME);
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.
mPackageManager.addResolveInfoForIntent(
......@@ -82,7 +83,7 @@ public class MainActivityTest {
Bundle metaData = new Bundle();
metaData.putString(WebApkMetaDataKeys.RUNTIME_HOST, HOST_BROWSER_PACKAGE_NAME);
metaData.putString(WebApkMetaDataKeys.START_URL, "http://random.org");
WebApkTestHelper.registerWebApkWithMetaData(metaData);
WebApkTestHelper.registerWebApkWithMetaData(WEBAPK_PACKAGE_NAME, metaData);
Robolectric.buildActivity(MainActivity.class).create();
......
......@@ -15,19 +15,15 @@ import org.robolectric.res.builder.RobolectricPackageManager;
* Helper class for WebAPK JUnit tests.
*/
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.
* @param packageName The package to register
* @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) RuntimeEnvironment.application.getPackageManager();
packageManager.addPackage(newPackageInfo(WEBAPK_PACKAGE_NAME, metaData));
packageManager.addPackage(newPackageInfo(packageName, 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