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

Unified Diff: chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandlerTest.java

Issue 2550413007: Instant Apps: Add instrumentation tests. (Closed)
Patch Set: Fix test expectation. Created 4 years 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/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 3b2f89ff53fea201de9bf1bd432e24efa3a57931..960451dff60197b7b6732c1b390e5b8307ce56cb 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
@@ -21,6 +21,7 @@ import org.chromium.base.metrics.RecordHistogram;
import org.chromium.chrome.browser.IntentHandler;
import org.chromium.chrome.browser.customtabs.CustomTabIntentDataProvider;
import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler.OverrideUrlLoadingResult;
+import org.chromium.chrome.browser.instantapps.InstantAppsHandler;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabRedirectHandler;
import org.chromium.chrome.browser.webapps.ChromeWebApkHost;
@@ -45,6 +46,7 @@ public class ExternalNavigationHandlerTest extends NativeLibraryTestBase {
private static final int START_FILE = 0x8;
private static final int START_OTHER_ACTIVITY = 0x10;
private static final int INTENT_SANITIZATION_EXCEPTION = 0x20;
+ private static final int PROXY_FOR_INSTANT_APPS = 0x40;
private static final String SEARCH_RESULT_URL_FOR_TOM_HANKS =
"https://www.google.com/search?q=tom+hanks";
@@ -540,6 +542,82 @@ public class ExternalNavigationHandlerTest extends NativeLibraryTestBase {
}
@SmallTest
+ public void testInstantAppsIntent_incomingIntentRedirect() throws Exception {
+ TestContext context = new TestContext();
+ int transTypeLinkFromIntent = PageTransition.LINK
+ | PageTransition.FROM_API;
+ TabRedirectHandler redirectHandler = new TabRedirectHandler(context);
+ Intent fooIntent = Intent.parseUri("http://instantappenabled.com",
+ Intent.URI_INTENT_SCHEME);
+ redirectHandler.updateIntent(fooIntent);
+ redirectHandler.updateNewUrlLoading(transTypeLinkFromIntent, false, false, 0, 0);
+ redirectHandler.updateNewUrlLoading(transTypeLinkFromIntent, true, false, 0, 0);
+
+ mDelegate.setCanHandleWithInstantApp(true);
+ checkUrl("http://goo.gl/1234")
+ .withPageTransition(transTypeLinkFromIntent)
+ .withIsRedirect(true)
+ .withRedirectHandler(redirectHandler)
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, IGNORE);
+
+ // URL that cannot be handled with instant apps should stay in Chrome.
+ mDelegate.setCanHandleWithInstantApp(false);
+ checkUrl("http://goo.gl/1234")
+ .withPageTransition(transTypeLinkFromIntent)
+ .withIsRedirect(true)
+ .withRedirectHandler(redirectHandler)
+ .expecting(OverrideUrlLoadingResult.NO_OVERRIDE, IGNORE);
+ }
+
+ @SmallTest
+ public void testInstantAppsIntent_handleNavigation() {
+ mDelegate.setCanHandleWithInstantApp(false);
+ checkUrl("http://maybeinstantapp.com")
+ .withPageTransition(PageTransition.LINK)
+ .expecting(OverrideUrlLoadingResult.NO_OVERRIDE, IGNORE);
+
+ mDelegate.setCanHandleWithInstantApp(true);
+ checkUrl("http://maybeinstantapp.com")
+ .withPageTransition(PageTransition.LINK)
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, IGNORE);
+ }
+
+ @SmallTest
+ public void testInstantAppsIntent_serpReferrer() {
+ String intentUrl = "intent://buzzfeed.com/tasty#Intent;scheme=http;"
+ + "package=com.google.android.instantapps.supervisor;"
+ + "action=com.google.android.instantapps.START;"
+ + "S.com.google.android.instantapps.FALLBACK_PACKAGE="
+ + "com.android.chrome;S.com.google.android.instantapps.INSTANT_APP_PACKAGE="
+ + "com.yelp.android;S.android.intent.extra.REFERRER_NAME="
+ + "https%3A%2F%2Fwww.google.com;end";
+ mDelegate.setIsSerpReferrer(true);
+ checkUrl(intentUrl)
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT,
+ START_OTHER_ACTIVITY | PROXY_FOR_INSTANT_APPS);
+ assertTrue(mDelegate.startActivityIntent.hasExtra(
+ InstantAppsHandler.IS_GOOGLE_SEARCH_REFERRER));
+
+ // Check that we block all instant app intent:// URLs not from SERP
+ mDelegate.setIsSerpReferrer(false);
+ checkUrl(intentUrl)
+ .expecting(OverrideUrlLoadingResult.NO_OVERRIDE, IGNORE);
+
+ // Check that IS_GOOGLE_SEARCH_REFERRER param is stripped on non-supervisor intents.
+ mDelegate.setIsSerpReferrer(true);
+ String nonSupervisor = "intent://buzzfeed.com/tasty#Intent;scheme=http;"
+ + "package=com.imdb;action=com.google.VIEW;"
+ + "S.com.google.android.gms.instantapps.IS_GOOGLE_SEARCH_REFERRER="
+ + "true;S.android.intent.extra.REFERRER_NAME="
+ + "https%3A%2F%2Fwww.google.com;end";
+ checkUrl(nonSupervisor)
+ .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT,
+ START_OTHER_ACTIVITY);
+ assertFalse(mDelegate.startActivityIntent.hasExtra(
+ InstantAppsHandler.IS_GOOGLE_SEARCH_REFERRER));
+ }
+
+ @SmallTest
public void testFallbackUrl_IntentResolutionSucceeds() {
// IMDB app is installed.
mDelegate.setCanResolveActivity(true);
@@ -1152,6 +1230,7 @@ public class ExternalNavigationHandlerTest extends NativeLibraryTestBase {
// For simplicity, don't distinguish between startActivityIfNeeded and startActivity
// until a test requires this distinction.
startActivityIntent = intent;
+ mCalledWithProxy = proxy;
return true;
}
@@ -1211,13 +1290,14 @@ public class ExternalNavigationHandlerTest extends NativeLibraryTestBase {
@Override
public boolean isSerpReferrer(Tab tab) {
- return false;
+ return mIsSerpReferrer;
}
public void reset() {
startActivityIntent = null;
startIncognitoIntentCalled = false;
startFileIntentCalled = false;
+ mCalledWithProxy = false;
}
public void setCanResolveActivity(boolean value) {
@@ -1244,6 +1324,10 @@ public class ExternalNavigationHandlerTest extends NativeLibraryTestBase {
mCanHandleWithInstantApp = value;
}
+ public void setIsSerpReferrer(boolean value) {
+ mIsSerpReferrer = value;
+ }
+
public Intent startActivityIntent;
public boolean startIncognitoIntentCalled;
@@ -1253,6 +1337,8 @@ public class ExternalNavigationHandlerTest extends NativeLibraryTestBase {
private String mNewUrlAfterClobbering;
private String mReferrerUrlForClobbering;
private boolean mCanHandleWithInstantApp;
+ private boolean mIsSerpReferrer;
+ public boolean mCalledWithProxy;
public boolean mIsChromeAppInForeground = true;
public boolean mIsWithinCurrentWebappScope;
@@ -1342,6 +1428,7 @@ public class ExternalNavigationHandlerTest extends NativeLibraryTestBase {
boolean expectStartFile = (otherExpectation & START_FILE) != 0;
boolean expectSaneIntent = expectStartOtherActivity
&& (otherExpectation & INTENT_SANITIZATION_EXCEPTION) == 0;
+ boolean expectProxyForIA = (otherExpectation & PROXY_FOR_INSTANT_APPS) != 0;
mDelegate.reset();
@@ -1375,6 +1462,7 @@ public class ExternalNavigationHandlerTest extends NativeLibraryTestBase {
assertEquals(expectStartChrome, startChromeCalled);
assertEquals(expectStartWebApk, startWebApkCalled);
assertEquals(expectStartFile, mDelegate.startFileIntentCalled);
+ assertEquals(expectProxyForIA, mDelegate.mCalledWithProxy);
if (startActivityCalled && expectSaneIntent) {
checkIntentSanity(mDelegate.startActivityIntent, "Intent");

Powered by Google App Engine
This is Rietveld 408576698