Chromium Code Reviews| Index: chrome/android/junit/src/org/chromium/chrome/browser/webapps/ManifestUpgradeDetectorTest.java |
| diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/ManifestUpgradeDetectorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/ManifestUpgradeDetectorTest.java |
| index c953bb05423117af96098b6a7de3c0300229db20..60490c6b101ed7969b98a781c7e5dfaa6e7dfcdf 100644 |
| --- a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/ManifestUpgradeDetectorTest.java |
| +++ b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/ManifestUpgradeDetectorTest.java |
| @@ -7,10 +7,13 @@ package org.chromium.chrome.browser.webapps; |
| import android.content.Context; |
| import android.content.pm.ApplicationInfo; |
| import android.content.pm.PackageInfo; |
| +import android.graphics.Bitmap; |
| +import android.graphics.Color; |
| import android.os.Bundle; |
| import org.chromium.base.ContextUtils; |
| import org.chromium.blink_public.platform.WebDisplayMode; |
| +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; |
| @@ -25,6 +28,7 @@ import org.mockito.stubbing.Answer; |
| import org.robolectric.Robolectric; |
| import org.robolectric.annotation.Config; |
| import org.robolectric.res.builder.RobolectricPackageManager; |
| +import org.robolectric.shadows.ShadowBitmap; |
| /** |
| * Tests the ManifestUpgradeDetector. |
| @@ -37,6 +41,8 @@ public class ManifestUpgradeDetectorTest { |
| private static final String WEBAPK_SCOPE_URL = "/"; |
| private static final String WEBAPK_NAME = "Long Name"; |
| private static final String WEBAPK_SHORT_NAME = "Short Name"; |
| + private static final String WEBAPK_ICON_URL = "/icon.png"; |
| + private static final long WEBAPK_ICON_MURMUR2_HASH = 3L; |
| private static final int WEBAPK_DISPLAY_MODE = WebDisplayMode.Standalone; |
| private static final int WEBAPK_ORIENTATION = ScreenOrientationValues.LANDSCAPE; |
| private static final long WEBAPK_THEME_COLOR = 1L; |
| @@ -54,6 +60,9 @@ public class ManifestUpgradeDetectorTest { |
| public String scopeUrl = WEBAPK_SCOPE_URL; |
| public String name = WEBAPK_NAME; |
| public String shortName = WEBAPK_SHORT_NAME; |
| + public String iconUrl = WEBAPK_ICON_URL; |
| + public long iconMurmur2Hash = WEBAPK_ICON_MURMUR2_HASH; |
| + public Bitmap icon = createBitmap(Color.GREEN); |
| public int displayMode = WEBAPK_DISPLAY_MODE; |
| public int orientation = WEBAPK_ORIENTATION; |
| public long themeColor = WEBAPK_THEME_COLOR; |
| @@ -69,6 +78,7 @@ public class ManifestUpgradeDetectorTest { |
| */ |
| private static class TestManifestUpgradeDetector extends ManifestUpgradeDetector { |
| private FetchedData mFetchedData; |
| + public String mRequestedIconUrl; |
| public boolean mIsUpgraded; |
| public boolean mCompleted; |
| @@ -87,9 +97,9 @@ public class ManifestUpgradeDetectorTest { |
| ManifestUpgradeDetectorFetcher.Callback callback = |
| (ManifestUpgradeDetectorFetcher.Callback) invocation.getArguments()[0]; |
| callback.onGotManifestData(mFetchedData.startUrl, mFetchedData.scopeUrl, |
| - mFetchedData.name, mFetchedData.shortName, mFetchedData.displayMode, |
| - mFetchedData.orientation, mFetchedData.themeColor, |
| - mFetchedData.backgroundColor); |
| + mFetchedData.name, mFetchedData.shortName, mFetchedData.iconUrl, |
| + mFetchedData.displayMode, mFetchedData.orientation, |
| + mFetchedData.themeColor, mFetchedData.backgroundColor); |
| return null; |
| } |
| }; |
| @@ -99,6 +109,13 @@ public class ManifestUpgradeDetectorTest { |
| } |
| @Override |
| + protected void fetchHomescreenImage( |
| + String imageUrl, ShortcutHelper.FetchHomescreenImageCallback callback) { |
| + mRequestedIconUrl = imageUrl; |
| + callback.onFetchedHomescreenImage(mFetchedData.icon, mFetchedData.iconMurmur2Hash); |
| + } |
| + |
| + @Override |
| protected void upgrade() { |
| mIsUpgraded = true; |
| } |
| @@ -109,13 +126,22 @@ public class ManifestUpgradeDetectorTest { |
| } |
| } |
| + /** |
| + * Creates 1x1 bitmap. |
| + * @param color The bitmap color. |
| + */ |
| + private static Bitmap createBitmap(int color) { |
| + int colors[] = { color }; |
| + return ShadowBitmap.createBitmap(colors, 1, 1, Bitmap.Config.ALPHA_8); |
| + } |
| + |
| @Before |
| public void setUp() { |
| Context context = Robolectric.application; |
| ContextUtils.initApplicationContextForTests(context); |
| mPackageManager = (RobolectricPackageManager) context.getPackageManager(); |
| - setMetaData(WEBAPK_START_URL); |
| + setMetaData(WEBAPK_START_URL, WEBAPK_ICON_URL, WEBAPK_ICON_MURMUR2_HASH); |
| } |
| private TestManifestUpgradeDetector createDetector(FetchedData fetchedData) { |
| @@ -126,9 +152,12 @@ public class ManifestUpgradeDetectorTest { |
| return new TestManifestUpgradeDetector(null, webappInfo, fetchedData); |
| } |
| - private void setMetaData(String startUrl) { |
| + private void setMetaData(String startUrl, String iconUrl, long iconMurmur2Hash) { |
| Bundle bundle = new Bundle(); |
| bundle.putString(ManifestUpgradeDetector.META_DATA_START_URL, startUrl); |
| + bundle.putString(ManifestUpgradeDetector.META_DATA_ICON_URL, iconUrl); |
| + bundle.putString( |
| + ManifestUpgradeDetector.META_DATA_ICON_MURMUR2_HASH, iconMurmur2Hash + "L"); |
| ApplicationInfo appInfo = new ApplicationInfo(); |
| appInfo.metaData = bundle; |
| @@ -156,4 +185,138 @@ public class ManifestUpgradeDetectorTest { |
| Assert.assertTrue(detector.mCompleted); |
| Assert.assertTrue(detector.mIsUpgraded); |
| } |
| + |
| + /** |
| + * Test that an upgrade is requested when: |
| + * - WebAPK is generated using icon at {@link WEBAPK_ICON_URL} from Web Manifest. |
| + * - Bitmap at {@link WEBAPK_ICON_URL} has changed. |
| + */ |
| + @Test |
| + public void testHomescreenIconChangeShouldUpgrade() { |
| + FetchedData fetchedData = new FetchedData(); |
| + fetchedData.iconMurmur2Hash = WEBAPK_ICON_MURMUR2_HASH + 1; |
| + fetchedData.icon = createBitmap(Color.BLUE); |
| + TestManifestUpgradeDetector detector = createDetector(fetchedData); |
| + |
| + detector.start(); |
| + Assert.assertTrue(detector.mCompleted); |
| + Assert.assertEquals(WEBAPK_ICON_URL, detector.mRequestedIconUrl); |
| + Assert.assertTrue(detector.mIsUpgraded); |
| + } |
| + |
| + /** |
| + * Test that an upgrade is requested when: |
| + * - WebAPK is generated using icon at {@link WEBAPK_ICON_URL} from Web Manifest. |
| + * - Web Manifest is updated to refer to different icon. |
| + */ |
| + @Test |
| + public void testHomescreenIconUrlChangeShouldUpgrade() { |
| + FetchedData fetchedData = new FetchedData(); |
| + fetchedData.iconUrl = "/icon2.png"; |
| + fetchedData.iconMurmur2Hash = WEBAPK_ICON_MURMUR2_HASH + 1; |
|
Xi Han
2016/08/10 15:49:19
As long as the |iconUrl| changes, the changes of |
pkotwicz
2016/08/10 19:03:47
I know that the other changes are unnecessary. I p
Xi Han
2016/08/11 15:09:33
We should avoid to add unnecessary changes to the
pkotwicz
2016/08/11 20:02:01
Ok, removed the unnecessary changes
|
| + fetchedData.icon = createBitmap(Color.YELLOW); |
| + |
| + TestManifestUpgradeDetector detector = createDetector(fetchedData); |
| + detector.start(); |
| + Assert.assertTrue(detector.mCompleted); |
| + Assert.assertEquals("/icon2.png", detector.mRequestedIconUrl); |
| + Assert.assertTrue(detector.mIsUpgraded); |
| + } |
| + |
| + /** |
| + * Test that an upgrade is requested when: |
| + * - There are no icons in Web Manifest when WebAPK is generated. Page favicon at |
|
Xi Han
2016/08/10 15:49:19
If I understand correctly, the |WEBAPK_ICON_URL| w
pkotwicz
2016/08/10 19:03:47
I am actually trying to test the scenario of:
- We
Xi Han
2016/08/11 15:09:33
Hmmm, you still use the default data for the old W
pkotwicz
2016/08/11 20:02:02
I have made the old data "mutable"
I have made the
|
| + * {@link WEBAPK_ICON_URL} is used as the homescreen icon. |
| + * - Bitmap at {@link WEBAPK_ICON_URL} has changed. |
| + */ |
| + @Test |
| + public void testFaviconHomescreenIconChangeShouldUpgrade() { |
| + FetchedData fetchedData = new FetchedData(); |
| + // Still no icon specified in Web Manifest. |
| + fetchedData.iconUrl = ""; |
| + // Updated data at {@link WEBAPK_ICON_URL}. |
| + fetchedData.icon = createBitmap(Color.BLUE); |
| + fetchedData.iconMurmur2Hash = WEBAPK_ICON_MURMUR2_HASH + 1; |
| + |
| + TestManifestUpgradeDetector detector = createDetector(fetchedData); |
| + detector.start(); |
| + Assert.assertTrue(detector.mCompleted); |
| + Assert.assertEquals(WEBAPK_ICON_URL, detector.mRequestedIconUrl); |
| + Assert.assertTrue(detector.mIsUpgraded); |
| + } |
| + |
| + /** |
| + * Test that an upgrade is not requested when: |
| + * - There are no icons in Web Manifest when WebAPK is generated. Page favicon at |
|
Xi Han
2016/08/10 15:49:19
Same here.
|
| + * {@link WEBAPK_ICON_URL} is used as the homescreen icon. |
| + * - Bitmap at {@link WEBAPK_ICON_URL} has not changed. |
| + */ |
| + @Test |
| + public void testFaviconHomescreenIconShouldNotUpgrade() { |
| + FetchedData fetchedData = new FetchedData(); |
| + // Still no icon specified in Web Manifest. |
| + fetchedData.iconUrl = ""; |
| + |
| + TestManifestUpgradeDetector detector = createDetector(fetchedData); |
| + detector.start(); |
| + Assert.assertTrue(detector.mCompleted); |
| + Assert.assertEquals(WEBAPK_ICON_URL, detector.mRequestedIconUrl); |
| + Assert.assertFalse(detector.mIsUpgraded); |
| + } |
| + |
| + /** |
| + * Test that an upgrade is not requested when: |
| + * - WebAPK is generated using icon at {@link WEBAPK_ICON_URL} from Web Manifest. |
| + * - Request for {@link WEBAPK_ICON_URL} returns HTTP 404 error. |
| + */ |
| + @Test |
| + public void test404HomescreenIconShouldNotUpgrade() { |
| + FetchedData fetchedData = new FetchedData(); |
| + fetchedData.icon = null; |
| + fetchedData.iconMurmur2Hash = 0L; |
| + |
| + TestManifestUpgradeDetector detector = createDetector(fetchedData); |
| + detector.start(); |
| + Assert.assertTrue(detector.mCompleted); |
| + Assert.assertEquals(WEBAPK_ICON_URL, detector.mRequestedIconUrl); |
| + Assert.assertFalse(detector.mIsUpgraded); |
| + } |
| + |
| + /** |
| + * Test that an upgrade is requested when: |
| + * - There are no icons in Web Manifest when WebAPK is generated. Icon is generated for use as |
| + * the homescreen icon. |
| + * - Web Manifest is updated to refer to {@link WEBAPK_ICON_URL}. |
| + */ |
| + @Test |
| + public void testNoIconToCustomIconShouldUpgrade() { |
| + setMetaData(WEBAPK_START_URL, "", 0L); |
| + FetchedData fetchedData = new FetchedData(); |
| + |
| + TestManifestUpgradeDetector detector = createDetector(fetchedData); |
| + detector.start(); |
| + Assert.assertTrue(detector.mCompleted); |
| + Assert.assertEquals(WEBAPK_ICON_URL, detector.mRequestedIconUrl); |
| + Assert.assertTrue(detector.mIsUpgraded); |
| + } |
| + |
| + /** |
| + * Test that an upgrade is not requested when: |
| + * - There are no icons in Web Manifest when WebAPK is generated. Icon is generated for use as |
| + * the homescreen icon. |
| + * - Web Manifest remains unchanged. |
| + */ |
| + @Test |
| + public void testNoIconShouldNotUpgrade() { |
| + setMetaData(WEBAPK_START_URL, "", 0L); |
| + FetchedData fetchedData = new FetchedData(); |
| + fetchedData.iconUrl = ""; |
| + |
| + TestManifestUpgradeDetector detector = createDetector(fetchedData); |
| + detector.start(); |
| + Assert.assertTrue(detector.mCompleted); |
| + // No icon should have been requested. |
| + Assert.assertNull(detector.mRequestedIconUrl); |
| + Assert.assertFalse(detector.mIsUpgraded); |
| + } |
| } |