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

Unified Diff: chrome/android/javatests/src/org/chromium/chrome/browser/webapps/AddToHomescreenManagerTest.java

Issue 2342183002: Call AddToHomescreenDataFetcher::Observer callbacks when manifest fetch times out (Closed)
Patch Set: Merge branch 'master' into remove_unneeded_var Created 4 years, 3 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
« no previous file with comments | « no previous file | chrome/browser/android/webapps/add_to_homescreen_data_fetcher.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/javatests/src/org/chromium/chrome/browser/webapps/AddToHomescreenManagerTest.java
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/AddToHomescreenManagerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/AddToHomescreenManagerTest.java
index 4e67dcdc036c03d065b43caa3f5c66d8126cffe3..7c116539d6a0f7adf00e4147b066d2b59ac32f5d 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/AddToHomescreenManagerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/AddToHomescreenManagerTest.java
@@ -9,6 +9,7 @@ import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Environment;
+import android.test.suitebuilder.annotation.MediumTest;
import android.test.suitebuilder.annotation.SmallTest;
import org.chromium.base.ThreadUtils;
@@ -24,12 +25,14 @@ import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.test.ChromeActivityTestCaseBase;
import org.chromium.chrome.test.util.browser.TabLoadObserver;
+import org.chromium.content.browser.test.util.CallbackHelper;
import org.chromium.content.browser.test.util.Criteria;
import org.chromium.content.browser.test.util.CriteriaHelper;
import org.chromium.content.common.ContentSwitches;
import org.chromium.net.test.EmbeddedTestServer;
import java.util.concurrent.Callable;
+import java.util.concurrent.TimeUnit;
/**
* Tests org.chromium.chrome.browser.webapps.AddToHomescreenManager and its C++ counterpart.
@@ -71,6 +74,12 @@ public class AddToHomescreenManagerTest extends ChromeActivityTestCaseBase<Chrom
private static final String MANIFEST_PATH = "/chrome/test/data/webapps/manifest_test_page.html";
private static final String MANIFEST_TITLE = "Web app banner test page";
+ private static final String MANIFEST_TIMES_OUT_NO_SERVICE_WORKER_HTML =
+ UrlUtils.encodeHtmlDataUri("<html><head>"
+ + "<title>" + MANIFEST_TITLE + "</title>"
+ + "<link rel=\"manifest\" href=\"../../../../slow?10000\" />"
+ + "</head></html>");
+
private static class TestShortcutHelperDelegate extends ShortcutHelper.Delegate {
public Intent mBroadcastedIntent;
@@ -112,6 +121,48 @@ public class AddToHomescreenManagerTest extends ChromeActivityTestCaseBase<Chrom
}
/**
+ * Test AddToHomescreenManager subclass which tracks whether the native callbacks
+ * (a proxy for the AddToHomescreenDataFetcher::Observer callbacks) have been called.
+ */
+ private static class AddToHomescreenManagerCallbackTracker extends AddToHomescreenManager {
+ public CallbackHelper mCallbackHelper;
+ public boolean mDialogShown = false;
+ public boolean mGotUserTitle = false;
+ public boolean mReadyToAdd = false;
+
+ public AddToHomescreenManagerCallbackTracker(Activity activity, Tab tab) {
+ super(activity, tab);
+
+ mCallbackHelper = new CallbackHelper();
+
+ AddToHomescreenManager.Observer observer = new AddToHomescreenManager.Observer() {
+ @Override
+ public void onUserTitleAvailable(String title) {
+ mGotUserTitle = true;
+ mCallbackHelper.notifyCalled();
+ }
+
+ @Override
+ public void onReadyToAdd(Bitmap icon) {
+ mReadyToAdd = true;
+ mCallbackHelper.notifyCalled();
+ }
+ };
+ setObserver(observer);
+ }
+
+ public void waitForCallbacks(int numCallbacks, int numSecondsTimeout) throws Exception {
+ mCallbackHelper.waitForCallback(0, numCallbacks, numSecondsTimeout, TimeUnit.SECONDS);
+ }
+
+ @Override
+ public void showDialog() {
+ mDialogShown = true;
+ mCallbackHelper.notifyCalled();
+ }
+ }
+
+ /**
* Test AddToHomescreenManager subclass which mocks showing the add-to-homescreen dialog and
* adds the shortcut to the home screen once it is ready.
*/
@@ -143,6 +194,7 @@ public class AddToHomescreenManagerTest extends ChromeActivityTestCaseBase<Chrom
}
}
+ private EmbeddedTestServer mTestServer;
private ChromeActivity mActivity;
private Tab mTab;
private TestShortcutHelperDelegate mShortcutHelperDelegate;
@@ -159,6 +211,10 @@ public class AddToHomescreenManagerTest extends ChromeActivityTestCaseBase<Chrom
@Override
public void setUp() throws Exception {
super.setUp();
+ mTestServer = EmbeddedTestServer.createAndStartFileServer(
+ getInstrumentation().getContext(), Environment.getExternalStorageDirectory());
+ // Register handler for "slow?10000" URL.
+ mTestServer.addDefaultHandlers(mTestServer.getURL("/chrome/test/data"));
mShortcutHelperDelegate = new TestShortcutHelperDelegate();
ShortcutHelper.setDelegateForTests(mShortcutHelperDelegate);
mActivity = getActivity();
@@ -250,14 +306,12 @@ public class AddToHomescreenManagerTest extends ChromeActivityTestCaseBase<Chrom
@SmallTest
@Feature("{Webapp}")
public void testAddWebappShortcutSplashScreenIcon() throws Exception {
- EmbeddedTestServer testServer = EmbeddedTestServer.createAndStartFileServer(
- getInstrumentation().getContext(), Environment.getExternalStorageDirectory());
try {
// Sets the overriden factory to observer splash screen update.
final TestDataStorageFactory dataStorageFactory = new TestDataStorageFactory();
WebappDataStorage.setFactoryForTests(dataStorageFactory);
- loadUrl(testServer.getURL(MANIFEST_PATH), MANIFEST_TITLE);
+ loadUrl(mTestServer.getURL(MANIFEST_PATH), MANIFEST_TITLE);
addShortcutToTab(mTab, "");
// Make sure that the splash screen image was downloaded.
@@ -274,28 +328,66 @@ public class AddToHomescreenManagerTest extends ChromeActivityTestCaseBase<Chrom
assertEquals(idealSize, dataStorageFactory.mSplashImage.getWidth());
assertEquals(idealSize, dataStorageFactory.mSplashImage.getHeight());
} finally {
- testServer.stopAndDestroyServer();
+ mTestServer.stopAndDestroyServer();
}
}
+ @MediumTest
+ @Feature("{Webapp}")
+ public void testAddShortcutManifestFetchTimesOutWhenWebApkEnabled() throws Exception {
+ ChromeWebApkHost.initForTesting(true);
+ loadUrl(mTestServer.getURL("/chrome/test/data/banners/manifest_times_out_test_page.html"),
+ MANIFEST_TITLE);
+ checkCallbacksCalledWhenAddShortcutManifestFetchTimesOut();
+ }
+
+ @MediumTest
+ @Feature("{Webapp}")
+ public void testAddShortcutManifestFetchTimesOutWhenWebApkDisabled() throws Exception {
+ ChromeWebApkHost.initForTesting(false);
+ loadUrl(mTestServer.getURL("/chrome/test/data/banners/manifest_times_out_test_page.html"),
+ MANIFEST_TITLE);
+ checkCallbacksCalledWhenAddShortcutManifestFetchTimesOut();
+ }
+
+ @MediumTest
+ @Feature("{Webapp}")
+ public void testAddShortcutManifestFetchTimesOutWhenNotPwa() throws Exception {
+ ChromeWebApkHost.initForTesting(false);
+ loadUrl(MANIFEST_TIMES_OUT_NO_SERVICE_WORKER_HTML, MANIFEST_TITLE);
+ checkCallbacksCalledWhenAddShortcutManifestFetchTimesOut();
+ }
+
+ /**
+ * Checks that the add-to-homescreen native callbacks are called when the Web Manifest fetch
+ * times out.
+ */
+ public void checkCallbacksCalledWhenAddShortcutManifestFetchTimesOut() throws Exception {
+ AddToHomescreenManagerCallbackTracker manager =
+ new AddToHomescreenManagerCallbackTracker(mActivity, mTab);
+ startManagerOnUiThread(manager);
+
+ // The AddToHomescreenDataFetcher timeout fires after 4 seconds. Wait 10 seconds to ensure
+ // that we do not miss the AddToHomescreenDataFetcher timeout timer firing.
+ manager.waitForCallbacks(3, 10);
+
+ assertTrue(manager.mDialogShown);
+ // This callback enables the text field in the add-to-homescreen dialog.
+ assertTrue(manager.mGotUserTitle);
+ // This callback enables the "Add" button in the add-to-homescreen dialog.
+ assertTrue(manager.mReadyToAdd);
+
+ destroyManagerOnUiThread(manager);
+ }
+
private void loadUrl(String url, String expectedPageTitle) throws Exception {
new TabLoadObserver(mTab, expectedPageTitle, null).fullyLoadUrl(url);
}
- private void addShortcutToTab(final Tab tab, final String title) throws Exception {
+ private void addShortcutToTab(Tab tab, String title) throws Exception {
// Add the shortcut.
- Callable<AddToHomescreenManager> callable =
- new Callable<AddToHomescreenManager>() {
- @Override
- public AddToHomescreenManager call() {
- AddToHomescreenManager manager =
- new TestAddToHomescreenManager(mActivity, tab, title);
- manager.start();
- return manager;
- }
- };
- final AddToHomescreenManager manager =
- ThreadUtils.runOnUiThreadBlockingNoException(callable);
+ TestAddToHomescreenManager manager = new TestAddToHomescreenManager(mActivity, tab, title);
+ startManagerOnUiThread(manager);
// Make sure that the shortcut was added.
CriteriaHelper.pollUiThread(new Criteria() {
@@ -305,6 +397,19 @@ public class AddToHomescreenManagerTest extends ChromeActivityTestCaseBase<Chrom
}
});
+ destroyManagerOnUiThread(manager);
+ }
+
+ private void startManagerOnUiThread(final AddToHomescreenManager manager) {
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ manager.start();
+ }
+ });
+ }
+
+ private void destroyManagerOnUiThread(final AddToHomescreenManager manager) {
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
« no previous file with comments | « no previous file | chrome/browser/android/webapps/add_to_homescreen_data_fetcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698