Index: chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabExternalNavigationTest.java |
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabExternalNavigationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabExternalNavigationTest.java |
index ab7a16ae32f91fc6099ca51c06e2cda5a2abb1f2..b86be3d749f11634b11f65f9eb104b44439cccdc 100644 |
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabExternalNavigationTest.java |
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabExternalNavigationTest.java |
@@ -15,14 +15,16 @@ import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler.Overrid |
import org.chromium.chrome.browser.externalnav.ExternalNavigationParams; |
import org.chromium.chrome.browser.tab.Tab; |
import org.chromium.chrome.browser.tab.TabDelegateFactory; |
+import org.chromium.content.browser.test.util.Criteria; |
+import org.chromium.content.browser.test.util.CriteriaHelper; |
+import org.chromium.content.browser.test.util.DOMUtils; |
import org.chromium.net.test.EmbeddedTestServer; |
/** |
- * Instrumentation test for external navigation handling of a Custom Tab. |
+ * Instrumentation tests for external navigation handling of a Custom Tab. |
*/ |
@RetryOnFailure |
public class CustomTabExternalNavigationTest extends CustomTabActivityTestBase { |
- |
/** |
* A dummy activity that claims to handle "customtab://customtabtest". |
*/ |
@@ -62,30 +64,14 @@ public class CustomTabExternalNavigationTest extends CustomTabActivityTestBase { |
super.tearDown(); |
} |
- @Override |
- public void startMainActivity() throws InterruptedException { |
- super.startMainActivity(); |
- startCustomTabActivityWithIntent(CustomTabsTestUtils.createMinimalCustomTabIntent( |
- getInstrumentation().getTargetContext(), mTestServer.getURL(TEST_PATH))); |
- Tab tab = getActivity().getActivityTab(); |
- TabDelegateFactory delegateFactory = tab.getDelegateFactory(); |
- assertTrue(delegateFactory instanceof CustomTabDelegateFactory); |
- CustomTabDelegateFactory customTabDelegateFactory = |
- ((CustomTabDelegateFactory) delegateFactory); |
- mUrlHandler = customTabDelegateFactory.getExternalNavigationHandler(); |
- assertTrue(customTabDelegateFactory.getExternalNavigationDelegate() |
- instanceof CustomTabNavigationDelegate); |
- mNavigationDelegate = (CustomTabNavigationDelegate) customTabDelegateFactory |
- .getExternalNavigationDelegate(); |
- } |
- |
/** |
* For urls with special schemes and hosts, and there is exactly one activity having a matching |
* intent filter, the framework will make that activity the default handler of the special url. |
* This test tests whether chrome is able to start the default external handler. |
*/ |
@SmallTest |
- public void testExternalActivityStartedForDefaultUrl() { |
+ public void testExternalActivityStartedForDefaultUrl() throws Exception { |
+ startCustomTabActivity(mTestServer.getURL(TEST_PATH)); |
final String testUrl = "customtab://customtabtest/intent"; |
ExternalNavigationParams params = new ExternalNavigationParams.Builder(testUrl, false) |
.build(); |
@@ -100,7 +86,8 @@ public class CustomTabExternalNavigationTest extends CustomTabActivityTestBase { |
* be shown, even if other activities such as {@link DummyActivityForHttp} claim to handle it. |
*/ |
@SmallTest |
- public void testIntentPickerNotShownForNormalUrl() { |
+ public void testIntentPickerNotShownForNormalUrl() throws Exception { |
+ startCustomTabActivity(mTestServer.getURL(TEST_PATH)); |
final String testUrl = "http://customtabtest.com"; |
ExternalNavigationParams params = new ExternalNavigationParams.Builder(testUrl, false) |
.build(); |
@@ -109,4 +96,40 @@ public class CustomTabExternalNavigationTest extends CustomTabActivityTestBase { |
assertFalse("External activities should not be started to handle the url", |
mNavigationDelegate.hasExternalActivityStarted()); |
} |
+ |
+ /** |
+ * Launches a Custom Tab, clicks on an external app scheme link, and check that an external |
+ * activity has been launched. |
+ */ |
+ @SmallTest |
+ public void testExternalApplicationLink() throws Exception { |
+ warmUpAndWait(); |
+ startCustomTabActivity(mTestServer.getURL(TEST_PATH)); |
+ |
+ Tab tab = getActivity().getActivityTab(); |
+ assertTrue(DOMUtils.clickNode(tab.getContentViewCore(), "customtab-external-link")); |
+ |
+ CriteriaHelper.pollUiThread(new Criteria("External Activity not launched.") { |
+ @Override |
+ public boolean isSatisfied() { |
+ return mNavigationDelegate.hasExternalActivityStarted(); |
+ } |
+ }); |
+ } |
+ |
+ private void startCustomTabActivity(String url) throws InterruptedException { |
+ super.startMainActivity(); |
+ startCustomTabActivityWithIntent(CustomTabsTestUtils.createMinimalCustomTabIntent( |
+ getInstrumentation().getTargetContext(), url)); |
+ Tab tab = getActivity().getActivityTab(); |
+ TabDelegateFactory delegateFactory = tab.getDelegateFactory(); |
+ assertTrue(delegateFactory instanceof CustomTabDelegateFactory); |
+ CustomTabDelegateFactory customTabDelegateFactory = |
+ ((CustomTabDelegateFactory) delegateFactory); |
+ mUrlHandler = customTabDelegateFactory.getExternalNavigationHandler(); |
+ assertTrue(customTabDelegateFactory.getExternalNavigationDelegate() |
+ instanceof CustomTabNavigationDelegate); |
+ mNavigationDelegate = (CustomTabNavigationDelegate) |
+ customTabDelegateFactory.getExternalNavigationDelegate(); |
+ } |
} |