Chromium Code Reviews| Index: chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java |
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java |
| index fd2d93a561410358a5caeebce1b2e7c15f0386e6..5b9adf777c9a0e9a27d907717e081a7b1997747f 100644 |
| --- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java |
| +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java |
| @@ -88,6 +88,7 @@ import org.chromium.net.test.EmbeddedTestServer; |
| import org.chromium.net.test.util.TestWebServer; |
| import java.util.ArrayList; |
| +import java.util.List; |
| import java.util.concurrent.Callable; |
| import java.util.concurrent.TimeoutException; |
| import java.util.concurrent.atomic.AtomicBoolean; |
| @@ -140,6 +141,8 @@ public class CustomTabActivityTest extends CustomTabActivityTestBase { |
| private String mTestPage2; |
| private EmbeddedTestServer mTestServer; |
| private TestWebServer mWebServer; |
| + private int mDefaultDebugOverrideValue; |
| + private int mLatestDebugOverrideValue; |
|
ahemery1
2017/03/21 15:15:58
This is some sort of state that we use here only.
|
| @Override |
| protected void setUp() throws Exception { |
| @@ -163,6 +166,7 @@ public class CustomTabActivityTest extends CustomTabActivityTestBase { |
| CustomTabsConnection connection = |
| CustomTabsConnection.getInstance((Application) appContext); |
| connection.setForcePrerender(true); |
| + mDefaultDebugOverrideValue = CustomTabsConnection.NO_OVERRIDE; |
|
ahemery1
2017/03/21 15:15:58
The switch that can be acted upon to modify the en
|
| } |
| @Override |
| @@ -1385,7 +1389,7 @@ public class CustomTabActivityTest extends CustomTabActivityTestBase { |
| assertTrue(channelRequested); |
| } |
| - session.mayLaunchUrl(Uri.parse(url), null, null); |
| + mayLaunchUrlForTesting(null, session, null, Uri.parse(url), null, null); |
| try { |
| ensureCompletedPrerenderForUrl( |
| CustomTabsConnection.getInstance((Application) |
| @@ -1484,9 +1488,11 @@ public class CustomTabActivityTest extends CustomTabActivityTestBase { |
| CustomTabsSessionToken token = CustomTabsSessionToken.getSessionTokenFromIntent(intent); |
| assertTrue(connection.newSession(token)); |
| Bundle extras = new Bundle(); |
| + // Forcing no prerendering implies falling back to simply creating a spare WebContent |
| extras.putInt( |
| CustomTabsConnection.DEBUG_OVERRIDE_KEY, CustomTabsConnection.NO_PRERENDERING); |
| - assertTrue(connection.mayLaunchUrl(token, Uri.parse(mTestPage), extras, null)); |
| + assertTrue(mayLaunchUrlForTesting( |
| + connection, null, token, Uri.parse(mTestPage), extras, null)); |
| try { |
| startCustomTabActivityWithIntent(intent); |
| } catch (InterruptedException e) { |
| @@ -1626,7 +1632,8 @@ public class CustomTabActivityTest extends CustomTabActivityTestBase { |
| CustomTabsSessionToken token = CustomTabsSessionToken.getSessionTokenFromIntent(intent); |
| connection.newSession(token); |
| connection.setIgnoreUrlFragmentsForSession(token, ignoreFragments); |
| - assertTrue(connection.mayLaunchUrl(token, Uri.parse(initialUrl), null, null)); |
| + assertTrue( |
| + mayLaunchUrlForTesting(connection, null, token, Uri.parse(initialUrl), null, null)); |
| if (wait) ensureCompletedPrerenderForUrl(connection, initialUrl); |
| @@ -1636,14 +1643,16 @@ public class CustomTabActivityTest extends CustomTabActivityTestBase { |
| fail(); |
| } |
| final Tab tab = mActivity.getActivityTab(); |
| - ElementContentCriteria initialVisibilityCriteria = new ElementContentCriteria( |
| - tab, "visibility", ignoreFragments ? "prerender" : "visible"); |
| - ElementContentCriteria initialFragmentCriteria = new ElementContentCriteria( |
| - tab, "initial-fragment", ignoreFragments ? initialFragment : fragment); |
| - ElementContentCriteria fragmentCriteria = new ElementContentCriteria( |
| - tab, "fragment", fragment); |
| if (wait) { |
| + ElementContentCriteria initialVisibilityCriteria = new ElementContentCriteria(tab, |
|
ahemery1
2017/03/21 15:15:58
Unrelated change but used only inside the wait sco
|
| + "visibility", |
| + ignoreFragments ? getExpectedVisibilityForOverride(mLatestDebugOverrideValue) |
| + : "visible"); |
| + ElementContentCriteria initialFragmentCriteria = new ElementContentCriteria( |
| + tab, "initial-fragment", ignoreFragments ? initialFragment : fragment); |
| + ElementContentCriteria fragmentCriteria = |
| + new ElementContentCriteria(tab, "fragment", fragment); |
| // The tab hasn't been reloaded. |
| CriteriaHelper.pollInstrumentationThread(initialVisibilityCriteria, 2000, 200); |
| // No reload (initial fragment is correct). |
| @@ -1672,7 +1681,8 @@ public class CustomTabActivityTest extends CustomTabActivityTestBase { |
| final CustomTabsConnection connection = warmUpAndWait(); |
| CustomTabsSessionToken token = CustomTabsSessionToken.createDummySessionTokenForTesting(); |
| connection.newSession(token); |
| - assertTrue(connection.mayLaunchUrl(token, Uri.parse(mTestPage), null, null)); |
| + assertTrue( |
| + mayLaunchUrlForTesting(connection, null, token, Uri.parse(mTestPage), null, null)); |
| ensureCompletedPrerenderForUrl(connection, mTestPage); |
| try { |
| @@ -1696,7 +1706,8 @@ public class CustomTabActivityTest extends CustomTabActivityTestBase { |
| final CustomTabsConnection connection = warmUpAndWait(); |
| CustomTabsSessionToken token = CustomTabsSessionToken.createDummySessionTokenForTesting(); |
| connection.newSession(token); |
| - assertFalse(connection.mayLaunchUrl(token, Uri.parse("chrome://version"), null, null)); |
| + assertFalse(mayLaunchUrlForTesting( |
| + connection, null, token, Uri.parse("chrome://version"), null, null)); |
| } |
| /** |
| @@ -1764,7 +1775,8 @@ public class CustomTabActivityTest extends CustomTabActivityTestBase { |
| final CustomTabsConnection connection = warmUpAndWait(); |
| CustomTabsSessionToken token = CustomTabsSessionToken.createDummySessionTokenForTesting(); |
| connection.newSession(token); |
| - assertTrue(connection.mayLaunchUrl(token, Uri.parse(mTestPage), null, null)); |
| + assertTrue( |
| + mayLaunchUrlForTesting(connection, null, token, Uri.parse(mTestPage), null, null)); |
| try { |
| startCustomTabActivityWithIntent( |
| CustomTabsTestUtils.createMinimalCustomTabIntent(context, mTestPage)); |
| @@ -1824,7 +1836,9 @@ public class CustomTabActivityTest extends CustomTabActivityTestBase { |
| Tab tab = mActivity.getActivityTab(); |
| // The tab hasn't been reloaded. |
| CriteriaHelper.pollInstrumentationThread( |
| - new ElementContentCriteria(tab, "visibility", "prerender"), 2000, 200); |
| + new ElementContentCriteria(tab, "visibility", |
| + getExpectedVisibilityForOverride(mLatestDebugOverrideValue)), |
| + 2000, 200); |
| // The Referrer is correctly set. |
| CriteriaHelper.pollInstrumentationThread( |
| new TabsOpenedFromExternalAppTest.ReferrerCriteria(tab, referrer), 2000, 200); |
| @@ -1976,7 +1990,8 @@ public class CustomTabActivityTest extends CustomTabActivityTestBase { |
| extras = new Bundle(); |
| extras.putParcelable(Intent.EXTRA_REFERRER, Uri.parse(prerenderReferrer)); |
| } |
| - assertTrue(connection.mayLaunchUrl(token, Uri.parse(url), extras, null)); |
| + assertTrue( |
| + mayLaunchUrlForTesting(connection, null, token, Uri.parse(url), extras, null)); |
| ensureCompletedPrerenderForUrl(connection, url); |
| } |
| @@ -2002,7 +2017,8 @@ public class CustomTabActivityTest extends CustomTabActivityTestBase { |
| extras.putInt( |
| CustomTabsConnection.DEBUG_OVERRIDE_KEY, CustomTabsConnection.NO_PRERENDERING); |
| } |
| - assertTrue(connection.mayLaunchUrl(token, Uri.parse(mTestPage), extras, null)); |
| + assertTrue(mayLaunchUrlForTesting( |
| + connection, null, token, Uri.parse(mTestPage), extras, null)); |
| try { |
| startCustomTabActivityWithIntent(CustomTabsTestUtils.createMinimalCustomTabIntent( |
| context, mTestPage)); |
| @@ -2113,16 +2129,26 @@ public class CustomTabActivityTest extends CustomTabActivityTestBase { |
| private static void ensureCompletedPrerenderForUrl( |
| final CustomTabsConnection connection, final String url) throws Exception { |
| - CriteriaHelper.pollUiThread(new Criteria("No Prerender") { |
| + // We wait until we have a speculation to pull information from first. |
| + CriteriaHelper.pollInstrumentationThread(new Criteria("No Speculation") { |
| @Override |
| public boolean isSatisfied() { |
| - return connection.mSpeculation != null |
| - && connection.mSpeculation.webContents != null |
| - && ExternalPrerenderHandler.hasPrerenderedAndFinishedLoadingUrl( |
| - Profile.getLastUsedProfile(), url, |
| - connection.mSpeculation.webContents); |
| + return connection.mSpeculation != null; |
| } |
| }, LONG_TIMEOUT_MS, CriteriaHelper.DEFAULT_POLLING_INTERVAL); |
| + |
| + // Then do the specific depending on debug override. |
| + if (connection.mSpeculation.debugOverrideValue == CustomTabsConnection.NO_OVERRIDE) { |
|
ahemery1
2017/03/21 15:15:58
We are sure this exist so we can use this value he
|
| + CriteriaHelper.pollUiThread(new Criteria("No Prerender") { |
| + @Override |
| + public boolean isSatisfied() { |
| + return connection.mSpeculation.webContents != null |
| + && ExternalPrerenderHandler.hasPrerenderedAndFinishedLoadingUrl( |
| + Profile.getLastUsedProfile(), url, |
| + connection.mSpeculation.webContents); |
| + } |
| + }, LONG_TIMEOUT_MS, CriteriaHelper.DEFAULT_POLLING_INTERVAL); |
| + } |
| } |
| private CustomTabsSession bindWithCallback(final CustomTabsCallback callback) { |
| @@ -2210,4 +2236,38 @@ public class CustomTabActivityTest extends CustomTabActivityTestBase { |
| return TextUtils.equals(mExpected, value); |
| } |
| } |
| + |
| + private boolean mayLaunchUrlForTesting(CustomTabsConnection connection, |
|
ahemery1
2017/03/21 15:15:58
A wrapper that allows us to do some additional ins
|
| + CustomTabsSession session, CustomTabsSessionToken token, Uri url, Bundle extras, |
| + List<Bundle> otherLikelyBundles) { |
| + instrumentExtrasForTesting(extras); |
| + if (connection != null) { |
| + return connection.mayLaunchUrl(token, url, extras, otherLikelyBundles); |
| + } |
| + if (session != null) { |
| + return session.mayLaunchUrl(url, extras, otherLikelyBundles); |
| + } |
| + return false; |
| + } |
| + |
| + /* |
| + * Does the following modifications to the extras bundle : |
| + * - Uses the default debug override if none is specified. |
| + */ |
| + private void instrumentExtrasForTesting(Bundle extras) { |
| + if (extras == null) extras = new Bundle(); |
| + int debugOverrideValue = |
| + extras.getInt(CustomTabsConnection.DEBUG_OVERRIDE_KEY, mDefaultDebugOverrideValue); |
| + extras.putInt(CustomTabsConnection.DEBUG_OVERRIDE_KEY, debugOverrideValue); |
| + mLatestDebugOverrideValue = debugOverrideValue; |
| + } |
| + |
| + private static String getExpectedVisibilityForOverride(int mode) { |
| + switch (mode) { |
| + case CustomTabsConnection.NO_OVERRIDE: |
| + return "prerender"; |
| + default: |
| + return "visible"; |
| + } |
| + } |
| } |