Index: chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandlerTest.java |
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandlerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandlerTest.java |
index 953164bd73ed8c68c6417718bef92ec85b54a8ea..87a615876182c2405fe386bd134046e63f16d0ab 100644 |
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandlerTest.java |
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandlerTest.java |
@@ -39,9 +39,10 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
// Expectations |
private static final int IGNORE = 0x0; |
private static final int START_INCOGNITO = 0x1; |
- private static final int START_ACTIVITY = 0x2; |
+ private static final int START_CHROME = 0x2; |
private static final int START_FILE = 0x4; |
- private static final int INTENT_SANITIZATION_EXCEPTION = 0x8; |
+ private static final int START_OTHER_ACTIVITY = 0x8; |
+ private static final int INTENT_SANITIZATION_EXCEPTION = 0x10; |
private static final String SEARCH_RESULT_URL_FOR_TOM_HANKS = |
"https://www.google.com/search?q=tom+hanks"; |
@@ -104,7 +105,8 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
.expecting(OverrideUrlLoadingResult.NO_OVERRIDE, IGNORE); |
checkUrl("tel:012345678") |
.withReferrer("chrome://about") |
- .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_ACTIVITY); |
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, |
+ START_OTHER_ACTIVITY); |
} |
@SmallTest |
@@ -123,11 +125,13 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
checkUrl("market://1234") |
.withPageTransition(PageTransition.FORM_SUBMIT) |
.withIsRedirect(true) |
- .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_ACTIVITY); |
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, |
+ START_OTHER_ACTIVITY); |
checkUrl("http://youtube.com://") |
.withPageTransition(PageTransition.FORM_SUBMIT) |
.withIsRedirect(true) |
- .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_ACTIVITY); |
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, |
+ START_OTHER_ACTIVITY); |
// If the page matches the referrer, then continue loading in Chrome. |
checkUrl("http://youtube.com://") |
@@ -141,7 +145,8 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
.withReferrer("http://google.com") |
.withPageTransition(PageTransition.FORM_SUBMIT) |
.withIsRedirect(true) |
- .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_ACTIVITY); |
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, |
+ START_OTHER_ACTIVITY); |
// It doesn't make sense to allow intent picker without redirect, since form data |
// is not encoded in the intent (although, in theory, it could be passed in as |
@@ -182,10 +187,12 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
public void testPageTransitionType() { |
// Non-link page transition type are ignored. |
checkUrl("http://youtube.com/") |
- .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_ACTIVITY); |
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, |
+ START_OTHER_ACTIVITY); |
checkUrl("http://youtube.com/") |
.withIsRedirect(true) |
- .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_ACTIVITY); |
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, |
+ START_OTHER_ACTIVITY); |
// http://crbug.com/143118 - Don't show the picker for directly typed URLs, unless |
// the URL results in a redirect. |
@@ -205,7 +212,7 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
checkUrl("wtai://wp/mc;0123456789") |
.withIsIncognito(true) |
.expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, |
- START_ACTIVITY | INTENT_SANITIZATION_EXCEPTION); |
+ START_OTHER_ACTIVITY | INTENT_SANITIZATION_EXCEPTION); |
// These two cases are currently unimplemented. |
checkUrl("wtai://wp/sd;0123456789") |
@@ -224,7 +231,8 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
@SmallTest |
public void testExternalUri() { |
checkUrl("tel:012345678") |
- .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_ACTIVITY); |
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, |
+ START_OTHER_ACTIVITY); |
} |
@SmallTest |
@@ -233,7 +241,8 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
checkUrl("market://1234") |
.withPageTransition(PageTransition.TYPED) |
.withIsRedirect(true) |
- .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_ACTIVITY); |
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, |
+ START_OTHER_ACTIVITY); |
// http://crbug.com/143118 |
checkUrl("market://1234") |
@@ -254,7 +263,8 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
checkUrl("http://youtube.com/") |
.withPageTransition(transitionTypeIncomingIntent) |
.withIsRedirect(true) |
- .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_ACTIVITY); |
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, |
+ START_OTHER_ACTIVITY); |
} |
@SmallTest |
@@ -264,12 +274,13 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
String urlWithSel = "intent:wtai://wp/#Intent;SEL;action=android.settings.SETTINGS;" |
+ "component=package/class;end"; |
- checkUrl(url) |
- .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_ACTIVITY); |
+ checkUrl(url).expecting( |
+ OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_OTHER_ACTIVITY); |
// http://crbug.com/370399 |
checkUrl(urlWithSel) |
- .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_ACTIVITY); |
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, |
+ START_OTHER_ACTIVITY); |
} |
@SmallTest |
@@ -316,7 +327,8 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
.withPageTransition(transTypeLinkFromIntent) |
.withIsRedirect(true) |
.withRedirectHandler(redirectHandler) |
- .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_ACTIVITY); |
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, |
+ START_OTHER_ACTIVITY); |
// Do not ignore if a new intent cannot be handled by Chrome. |
redirectHandler.updateIntent(fooIntent); |
@@ -326,7 +338,8 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
.withPageTransition(transTypeLinkFromIntent) |
.withIsRedirect(true) |
.withRedirectHandler(redirectHandler) |
- .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_ACTIVITY); |
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, |
+ START_OTHER_ACTIVITY); |
} |
@SmallTest |
@@ -356,7 +369,8 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
.withPageTransition(transTypeLinkFromIntent) |
.withIsRedirect(true) |
.withRedirectHandler(redirectHandler) |
- .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_ACTIVITY); |
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, |
+ START_OTHER_ACTIVITY); |
} |
@SmallTest |
@@ -366,7 +380,8 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
checkUrl(INTENT_URL_WITH_FALLBACK_URL) |
.withReferrer(SEARCH_RESULT_URL_FOR_TOM_HANKS) |
- .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_ACTIVITY); |
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, |
+ START_OTHER_ACTIVITY); |
Intent invokedIntent = mDelegate.startActivityIntent; |
assertEquals(IMDB_APP_INTENT_FOR_TOM_HANKS, invokedIntent.getData().toString()); |
@@ -431,7 +446,8 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
checkUrl(INTENT_URL_WITH_JAVASCRIPT_FALLBACK_URL) |
.withReferrer(SEARCH_RESULT_URL_FOR_TOM_HANKS) |
.withIsIncognito(true) |
- .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_ACTIVITY); |
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, |
+ START_OTHER_ACTIVITY); |
Intent invokedIntent = mDelegate.startActivityIntent; |
assertTrue(invokedIntent.getData().toString().startsWith("market://")); |
@@ -550,7 +566,8 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
mDelegate.setIsChromeAppInForeground(false); |
checkUrl("http://youtube.com/") |
.withChromeAppInForegroundRequired(false) |
- .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_ACTIVITY); |
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, |
+ START_OTHER_ACTIVITY); |
} |
@SmallTest |
@@ -590,7 +607,8 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
public void testSameDomainDifferentApps() { |
checkUrl(CALENDAR_URL) |
.withReferrer(KEEP_URL) |
- .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_ACTIVITY); |
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, |
+ START_OTHER_ACTIVITY); |
} |
@SmallTest |
@@ -615,7 +633,8 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
.withReferrer(referrer) |
.withPageTransition(PageTransition.FORM_SUBMIT) |
.withIsRedirect(true) |
- .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_ACTIVITY); |
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, |
+ START_OTHER_ACTIVITY); |
assertEquals(Uri.parse(referrer), |
mDelegate.startActivityIntent.getParcelableExtra(Intent.EXTRA_REFERRER)); |
assertEquals(1, mDelegate.startActivityIntent.getIntExtra( |
@@ -694,7 +713,8 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
checkUrl("sms:+012345678?body=hello%20there") |
.withReferrer(referer) |
- .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_ACTIVITY); |
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, |
+ START_OTHER_ACTIVITY); |
assertNotNull(mDelegate.startActivityIntent); |
assertEquals(TEXT_APP_2_PACKAGE_NAME, mDelegate.startActivityIntent.getPackage()); |
@@ -708,7 +728,8 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
checkUrl("sms:+012345678?body=hello%20there") |
.withReferrer(referer) |
- .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_ACTIVITY); |
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, |
+ START_OTHER_ACTIVITY); |
assertNotNull(mDelegate.startActivityIntent); |
assertNull(mDelegate.startActivityIntent.getPackage()); |
@@ -721,12 +742,23 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
checkUrl("intent://012345678?body=hello%20there/#Intent;scheme=sms;end") |
.withReferrer(referer) |
- .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_ACTIVITY); |
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, |
+ START_OTHER_ACTIVITY); |
assertNotNull(mDelegate.startActivityIntent); |
assertEquals(TEXT_APP_2_PACKAGE_NAME, mDelegate.startActivityIntent.getPackage()); |
} |
+ /** |
+ * Test that tapping on a link which is outside of the referrer Web APK's scope brings the |
+ * user back to Chrome. |
+ */ |
+ @SmallTest |
+ public void testLeaveWebApk_LinkOutOfScope() { |
+ checkUrl(SEARCH_RESULT_URL_FOR_TOM_HANKS) |
+ .withIsWebApk(true) |
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_CHROME); |
+ } |
private static ResolveInfo newResolveInfo(String packageName, String name) { |
ActivityInfo ai = new ActivityInfo(); |
@@ -918,6 +950,7 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
private boolean mIsRedirect; |
private boolean mChromeAppInForegroundRequired = true; |
private boolean mIsBackgroundTabNavigation; |
+ private boolean mIsWebApk; |
private boolean mHasUserGesture; |
private TabRedirectHandler mRedirectHandler; |
@@ -925,6 +958,11 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
mUrl = url; |
} |
+ public ExternalNavigationTestParams withIsWebApk(boolean isWebApk) { |
+ mIsWebApk = isWebApk; |
+ return this; |
+ } |
+ |
public ExternalNavigationTestParams withReferrer(String referrerUrl) { |
mReferrerUrl = referrerUrl; |
return this; |
@@ -970,9 +1008,13 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
public void expecting(OverrideUrlLoadingResult expectedOverrideResult, |
int otherExpectation) { |
boolean expectStartIncognito = (otherExpectation & START_INCOGNITO) != 0; |
- boolean expectStartActivity = (otherExpectation & START_ACTIVITY) != 0; |
+ boolean expectStartActivity = |
+ (otherExpectation & (START_CHROME | START_OTHER_ACTIVITY)) != 0; |
+ boolean expectStartChrome = (otherExpectation & START_CHROME) != 0; |
+ boolean expectStartOtherActivity = (otherExpectation & START_OTHER_ACTIVITY) != 0; |
boolean expectStartFile = (otherExpectation & START_FILE) != 0; |
- boolean expectSaneIntent = (otherExpectation & INTENT_SANITIZATION_EXCEPTION) == 0; |
+ boolean expectSaneIntent = expectStartOtherActivity |
+ && (otherExpectation & INTENT_SANITIZATION_EXCEPTION) == 0; |
mDelegate.reset(); |
@@ -983,14 +1025,23 @@ public class ExternalNavigationHandlerTest extends InstrumentationTestCase { |
.setRedirectHandler(mRedirectHandler) |
.setIsBackgroundTabNavigation(mIsBackgroundTabNavigation) |
.setIsMainFrame(true) |
+ .setIsWebApk(mIsWebApk) |
.setHasUserGesture(mHasUserGesture) |
.build(); |
OverrideUrlLoadingResult result = mUrlHandler.shouldOverrideUrlLoading(params); |
- boolean startActivityCalled = mDelegate.startActivityIntent != null; |
+ boolean startActivityCalled = false; |
+ boolean startChromeCalled = false; |
+ if (mDelegate.startActivityIntent != null) { |
+ startActivityCalled = true; |
+ String packageName = mDelegate.startActivityIntent.getPackage(); |
+ startChromeCalled = |
+ packageName != null && packageName.equals(mDelegate.getPackageName()); |
+ } |
assertEquals(expectedOverrideResult, result); |
assertEquals(expectStartIncognito, mDelegate.startIncognitoIntentCalled); |
assertEquals(expectStartActivity, startActivityCalled); |
+ assertEquals(expectStartChrome, startChromeCalled); |
assertEquals(expectStartFile, mDelegate.startFileIntentCalled); |
if (startActivityCalled && expectSaneIntent) { |