Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Unified Diff: chrome/android/javatests/src/org/chromium/chrome/browser/banners/AppBannerManagerTest.java

Issue 1310223002: webapps: initial addition of splash screen icon downloading (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@webapps-database-exp
Patch Set: Add tests and address comment Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/javatests/src/org/chromium/chrome/browser/banners/AppBannerManagerTest.java
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/banners/AppBannerManagerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/banners/AppBannerManagerTest.java
index 80cef4a5d1bba99c3f779c8a4cec1a2ee316fa56..7827f85b9158c2eef1b143d456e878389e1f3ccf 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/banners/AppBannerManagerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/banners/AppBannerManagerTest.java
@@ -10,6 +10,7 @@ import android.app.Instrumentation.ActivityResult;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageInfo;
+import android.graphics.Bitmap;
import android.net.Uri;
import android.test.mock.MockPackageManager;
import android.test.suitebuilder.annotation.MediumTest;
@@ -29,6 +30,7 @@ import org.chromium.chrome.browser.infobar.AppBannerInfoBarAndroid;
import org.chromium.chrome.browser.infobar.AppBannerInfoBarDelegateAndroid;
import org.chromium.chrome.browser.infobar.InfoBar;
import org.chromium.chrome.browser.infobar.InfoBarContainer;
+import org.chromium.chrome.browser.webapps.WebappDataStorage;
import org.chromium.chrome.test.ChromeTabbedActivityTestBase;
import org.chromium.chrome.test.util.TestHttpServerClient;
import org.chromium.chrome.test.util.browser.TabLoadObserver;
@@ -118,6 +120,15 @@ public class AppBannerManagerTest extends ChromeTabbedActivityTestBase {
}
}
+ private static class TestDataStorageObserver extends WebappDataStorage.Observer {
+ public Bitmap mSplashImage;
+
+ @Override
+ public void onUpdateSplashScreenImage(Bitmap image) {
+ mSplashImage = image;
+ }
+ }
+
private static class InfobarListener implements InfoBarContainer.InfoBarAnimationListener {
private boolean mDoneAnimating;
@@ -129,6 +140,7 @@ public class AppBannerManagerTest extends ChromeTabbedActivityTestBase {
private MockAppDetailsDelegate mDetailsDelegate;
private TestPackageManager mPackageManager;
+ private TestDataStorageObserver mDataStorageObserver;
@Override
public void startMainActivity() throws InterruptedException {
@@ -138,8 +150,10 @@ public class AppBannerManagerTest extends ChromeTabbedActivityTestBase {
@Override
protected void setUp() throws Exception {
mPackageManager = new TestPackageManager();
+ mDataStorageObserver = new TestDataStorageObserver();
AppBannerManager.setIsEnabledForTesting(true);
AppBannerInfoBarDelegateAndroid.setPackageManagerForTesting(mPackageManager);
+ WebappDataStorage.setObserverForTests(mDataStorageObserver);
super.setUp();
@@ -399,6 +413,64 @@ public class AppBannerManagerTest extends ChromeTabbedActivityTestBase {
@SmallTest
@Feature({"AppBanners"})
public void testWebAppBannerAppears() throws Exception {
+ loadWebappPageForTesting();
+ assertTrue(waitUntilNoInfoBarsExist());
+
+ // Indicate a day has passed, then revisit the page to show the banner.
+ AppBannerManager.setTimeDeltaForTesting(1);
+ assertTrue(CriteriaHelper.pollForUIThreadCriteria(
+ new TabLoadObserver(getActivity().getActivityTab(), WEB_APP_URL)));
+ assertTrue(CriteriaHelper.pollForUIThreadCriteria(new Criteria() {
+ @Override
+ public boolean isSatisfied() {
+ AppBannerManager manager =
+ getActivity().getActivityTab().getAppBannerManagerForTesting();
+ return !manager.isFetcherActiveForTesting();
+ }
+ }));
+ assertTrue(waitUntilAppBannerInfoBarAppears(WEB_APP_TITLE));
+ }
+
+ @SmallTest
+ @Feature({"AppBanners"})
+ public void testWebAppSplashscreen() throws Exception {
gone 2015/09/01 18:33:51 testWebAppSplashImageIsDownloaded
Lalit Maganti 2015/09/01 19:45:52 Done. As well as this I've moved the observer from
+ // Set weights such that the banner is shown on the first try.
+ AppBannerManager.setEngagementWeights(2, 2);
+ loadWebappPageForTesting();
+
+ InfoBarContainer container = getActivity().getActivityTab().getInfoBarContainer();
gone 2015/09/01 18:33:51 This is broken. The InfoBarContainer listener nee
Lalit Maganti 2015/09/01 19:45:52 Theorized on chat that the reason this test was pa
+ final InfobarListener listener = new InfobarListener();
+ container.setAnimationListener(listener);
+ assertTrue(waitUntilAppBannerInfoBarAppears(WEB_APP_TITLE));
+ assertTrue(CriteriaHelper.pollForUIThreadCriteria(new Criteria() {
+ @Override
+ public boolean isSatisfied() {
+ return listener.mDoneAnimating;
+ }
+ }));
+
+ // Click the button to trigger the adding of the shortcut.
+ InfoBar infobar = container.getInfoBars().get(0);
+ final Button button =
+ (Button) infobar.getContentWrapper().findViewById(R.id.button_primary);
+ TouchCommon.singleClickView(button);
+
+ // Make sure that the splash screen icon was downloaded.
+ assertTrue(CriteriaHelper.pollForUIThreadCriteria(new Criteria() {
+ @Override
+ public boolean isSatisfied() {
+ return mDataStorageObserver.mSplashImage != null;
+ }
+ }));
+
+ // Test the bitmap sizes
gone 2015/09/01 18:33:51 nit: comments are sentences. add a period
Lalit Maganti 2015/09/01 19:45:52 Done.
+ int ideal = getActivity().getResources().getDimensionPixelSize(
gone 2015/09/01 18:33:51 nit: idealSize
Lalit Maganti 2015/09/01 19:45:52 Done.
+ R.dimen.webapp_splash_image_size);
+ assertEquals(ideal, mDataStorageObserver.mSplashImage.getWidth());
+ assertEquals(ideal, mDataStorageObserver.mSplashImage.getHeight());
+ }
+
+ private void loadWebappPageForTesting() throws Exception {
// Create a Tab that doesn't have the AppBannerManager enabled. This prevents race
// conditions between service worker activation and AppBannerManager getting triggered.
// This race condition is a known problem, which is why the specs include wiggle room for
@@ -432,20 +504,5 @@ public class AppBannerManagerTest extends ChromeTabbedActivityTestBase {
return !manager.isFetcherActiveForTesting();
}
}));
- assertTrue(waitUntilNoInfoBarsExist());
-
- // Indicate a day has passed, then revisit the page to show the banner.
- AppBannerManager.setTimeDeltaForTesting(1);
- assertTrue(CriteriaHelper.pollForUIThreadCriteria(
- new TabLoadObserver(getActivity().getActivityTab(), WEB_APP_URL)));
- assertTrue(CriteriaHelper.pollForUIThreadCriteria(new Criteria() {
- @Override
- public boolean isSatisfied() {
- AppBannerManager manager =
- getActivity().getActivityTab().getAppBannerManagerForTesting();
- return !manager.isFetcherActiveForTesting();
- }
- }));
- assertTrue(waitUntilAppBannerInfoBarAppears(WEB_APP_TITLE));
}
}

Powered by Google App Engine
This is Rietveld 408576698