Index: chrome/android/javatests/src/org/chromium/chrome/browser/webapps/ManifestUpgradeDetectorFetcherTest.java |
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/ManifestUpgradeDetectorFetcherTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/ManifestUpgradeDetectorFetcherTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8430403be6760ca5c995dc78945a4484e2473093 |
--- /dev/null |
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/ManifestUpgradeDetectorFetcherTest.java |
@@ -0,0 +1,133 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.chrome.browser.webapps; |
+ |
+import android.content.Context; |
+import android.os.Environment; |
+import android.test.suitebuilder.annotation.MediumTest; |
+ |
+import org.chromium.base.ThreadUtils; |
+import org.chromium.base.test.util.Feature; |
+import org.chromium.chrome.browser.tab.Tab; |
+import org.chromium.chrome.test.ChromeTabbedActivityTestBase; |
+import org.chromium.chrome.test.util.browser.TabLoadObserver; |
+import org.chromium.content.browser.test.util.CallbackHelper; |
+import org.chromium.net.test.EmbeddedTestServer; |
+ |
+/** |
+ * Tests the ManifestUpgradeDetectorFetcher. |
+ */ |
+public class ManifestUpgradeDetectorFetcherTest extends ChromeTabbedActivityTestBase { |
+ |
+ private static final String PAGE_URL1 = "/chrome/test/data/webapps/manifest_test_page.html"; |
+ private static final String PAGE_URL2 = "/chrome/test/data/webapps/manifest_test_page2.html"; |
+ |
+ // Data for {@link PAGE_URL1}'s Web Manifest. |
+ private static final String WEB_MANIFEST_URL1 = "/chrome/test/data/webapps/manifest.json"; |
+ private static final String WEB_MANIFEST_NAME1 = "Manifest test app"; |
+ |
+ // Data for {@link PAGE_URL2}'s Web Manifest. |
+ private static final String WEB_MANIFEST_URL2 = "/chrome/test/data/webapps/manifest2.json"; |
+ private static final String WEB_MANIFEST_NAME2 = "Manifest test app2"; |
+ |
+ // Scope for {@link PAGE_URL1} and {@link PAGE_URL2}. |
+ private static final String WEB_MANIFEST_SCOPE = "/chrome/test/data"; |
+ |
+ private EmbeddedTestServer mTestServer; |
+ private Tab mTab; |
+ |
+ // CallbackHelper which blocks until the {@link ManifestUpgradeDetectorFetcher.Callback} |
+ // callback is called. |
+ private static class CallbackWaiter |
+ extends CallbackHelper implements ManifestUpgradeDetectorFetcher.Callback { |
+ private String mName; |
+ |
+ @Override |
+ public void onGotManifestData(String startUrl, String scopeUrl, String name, |
+ String shortName, int displayMode, int orientation, long themeColor, |
+ long backgroundColor) { |
+ assertNull(mName); |
+ mName = name; |
+ notifyCalled(); |
+ } |
+ |
+ public String name() { |
+ return mName; |
+ } |
+ } |
+ |
+ @Override |
+ protected void setUp() throws Exception { |
+ super.setUp(); |
+ Context context = getInstrumentation().getTargetContext(); |
+ mTestServer = EmbeddedTestServer.createAndStartFileServer( |
+ context, Environment.getExternalStorageDirectory()); |
+ mTab = getActivity().getActivityTab(); |
+ } |
+ |
+ @Override |
+ protected void tearDown() throws Exception { |
+ mTestServer.stopAndDestroyServer(); |
+ super.tearDown(); |
+ } |
+ |
+ @Override |
+ public void startMainActivity() throws InterruptedException { |
+ startMainActivityOnBlankPage(); |
+ } |
+ |
+ /** |
+ * Starts a ManifestUpgradeDetectorFetcher. Calls {@link callback} once the fetcher is done. |
+ */ |
+ private void startManifestUpgradeDetectorFetcher(String scopeUrl, String manifestUrl, |
+ final ManifestUpgradeDetectorFetcher.Callback callback) { |
+ final ManifestUpgradeDetectorFetcher fetcher = |
+ new ManifestUpgradeDetectorFetcher(mTab, scopeUrl, manifestUrl); |
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ fetcher.start(callback); |
+ } |
+ }); |
+ } |
+ |
+ /** |
+ * Test starting ManifestUpgradeDetectorFetcher while a page with the desired manifest URL is |
+ * loading. |
+ */ |
+ @MediumTest |
+ @Feature({"WebApk"}) |
+ public void testLaunchWithDesiredManifestUrl() throws Exception { |
+ CallbackWaiter waiter = new CallbackWaiter(); |
+ startManifestUpgradeDetectorFetcher(mTestServer.getURL(WEB_MANIFEST_SCOPE), |
+ mTestServer.getURL(WEB_MANIFEST_URL1), waiter); |
+ |
+ TabLoadObserver tabLoadObserver = new TabLoadObserver(mTab); |
+ tabLoadObserver.fullyLoadUrl(mTestServer.getURL(PAGE_URL1)); |
+ waiter.waitForCallback(0); |
+ |
+ assertEquals(WEB_MANIFEST_NAME1, waiter.name()); |
+ } |
+ |
+ /** |
+ * Test starting ManifestUpgradeDetectorFetcher on page which uses a different manifest URL than |
+ * the ManifestUpgradeDetectorFetcher is looking for. Check that the callback is only called |
+ * once the user navigates to a page which uses the desired manifest URL. |
+ */ |
+ @MediumTest |
+ @Feature({"Webapps"}) |
+ public void testLaunchWithDifferentManifestUrl() throws Exception { |
+ CallbackWaiter waiter = new CallbackWaiter(); |
+ startManifestUpgradeDetectorFetcher(mTestServer.getURL(WEB_MANIFEST_SCOPE), |
+ mTestServer.getURL(WEB_MANIFEST_URL2), waiter); |
+ |
+ TabLoadObserver tabLoadObserver = new TabLoadObserver(mTab); |
+ tabLoadObserver.fullyLoadUrl(mTestServer.getURL(PAGE_URL1)); |
+ tabLoadObserver.fullyLoadUrl(mTestServer.getURL(PAGE_URL2)); |
+ waiter.waitForCallback(0); |
+ |
+ assertEquals(WEB_MANIFEST_NAME2, waiter.name()); |
+ } |
+} |