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

Side by Side Diff: chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java

Issue 2748013004: CustomTabs: Base version for prerender switch (Closed)
Patch Set: Small fixes Created 3 years, 9 months 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser.customtabs; 5 package org.chromium.chrome.browser.customtabs;
6 6
7 import static org.chromium.base.test.util.Restriction.RESTRICTION_TYPE_NON_LOW_E ND_DEVICE; 7 import static org.chromium.base.test.util.Restriction.RESTRICTION_TYPE_NON_LOW_E ND_DEVICE;
8 8
9 import android.app.Activity; 9 import android.app.Activity;
10 import android.app.Application; 10 import android.app.Application;
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 import org.chromium.content.browser.test.util.Criteria; 81 import org.chromium.content.browser.test.util.Criteria;
82 import org.chromium.content.browser.test.util.CriteriaHelper; 82 import org.chromium.content.browser.test.util.CriteriaHelper;
83 import org.chromium.content.browser.test.util.DOMUtils; 83 import org.chromium.content.browser.test.util.DOMUtils;
84 import org.chromium.content.browser.test.util.JavaScriptUtils; 84 import org.chromium.content.browser.test.util.JavaScriptUtils;
85 import org.chromium.content_public.browser.LoadUrlParams; 85 import org.chromium.content_public.browser.LoadUrlParams;
86 import org.chromium.content_public.browser.WebContentsObserver; 86 import org.chromium.content_public.browser.WebContentsObserver;
87 import org.chromium.net.test.EmbeddedTestServer; 87 import org.chromium.net.test.EmbeddedTestServer;
88 import org.chromium.net.test.util.TestWebServer; 88 import org.chromium.net.test.util.TestWebServer;
89 89
90 import java.util.ArrayList; 90 import java.util.ArrayList;
91 import java.util.List;
91 import java.util.concurrent.Callable; 92 import java.util.concurrent.Callable;
92 import java.util.concurrent.TimeoutException; 93 import java.util.concurrent.TimeoutException;
93 import java.util.concurrent.atomic.AtomicBoolean; 94 import java.util.concurrent.atomic.AtomicBoolean;
94 import java.util.concurrent.atomic.AtomicReference; 95 import java.util.concurrent.atomic.AtomicReference;
95 96
96 /** 97 /**
97 * Instrumentation tests for app menu, context menu, and toolbar of a {@link Cus tomTabActivity}. 98 * Instrumentation tests for app menu, context menu, and toolbar of a {@link Cus tomTabActivity}.
98 */ 99 */
99 public class CustomTabActivityTest extends CustomTabActivityTestBase { 100 public class CustomTabActivityTest extends CustomTabActivityTestBase {
100 private static final int MAX_MENU_CUSTOM_ITEMS = 5; 101 private static final int MAX_MENU_CUSTOM_ITEMS = 5;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 + " </script>" 134 + " </script>"
134 + "</body></html>"; 135 + "</body></html>";
135 136
136 private static int sIdToIncrement = 1; 137 private static int sIdToIncrement = 1;
137 138
138 private CustomTabActivity mActivity; 139 private CustomTabActivity mActivity;
139 private String mTestPage; 140 private String mTestPage;
140 private String mTestPage2; 141 private String mTestPage2;
141 private EmbeddedTestServer mTestServer; 142 private EmbeddedTestServer mTestServer;
142 private TestWebServer mWebServer; 143 private TestWebServer mWebServer;
144 private int mDefaultDebugOverrideValue;
145 private int mLatestDebugOverrideValue;
ahemery1 2017/03/21 15:15:58 This is some sort of state that we use here only.
143 146
144 @Override 147 @Override
145 protected void setUp() throws Exception { 148 protected void setUp() throws Exception {
146 super.setUp(); 149 super.setUp();
147 150
148 ThreadUtils.runOnUiThreadBlocking(new Runnable() { 151 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
149 @Override 152 @Override
150 public void run() { 153 public void run() {
151 FirstRunStatus.setFirstRunFlowComplete(true); 154 FirstRunStatus.setFirstRunFlowComplete(true);
152 } 155 }
153 }); 156 });
154 157
155 Context appContext = getInstrumentation().getTargetContext().getApplicat ionContext(); 158 Context appContext = getInstrumentation().getTargetContext().getApplicat ionContext();
156 mTestServer = EmbeddedTestServer.createAndStartServer(appContext); 159 mTestServer = EmbeddedTestServer.createAndStartServer(appContext);
157 mTestPage = mTestServer.getURL(TEST_PAGE); 160 mTestPage = mTestServer.getURL(TEST_PAGE);
158 mTestPage2 = mTestServer.getURL(TEST_PAGE_2); 161 mTestPage2 = mTestServer.getURL(TEST_PAGE_2);
159 PathUtils.setPrivateDataDirectorySuffix(PRIVATE_DATA_DIRECTORY_SUFFIX); 162 PathUtils.setPrivateDataDirectorySuffix(PRIVATE_DATA_DIRECTORY_SUFFIX);
160 LibraryLoader.get(LibraryProcessType.PROCESS_BROWSER).ensureInitialized( ); 163 LibraryLoader.get(LibraryProcessType.PROCESS_BROWSER).ensureInitialized( );
161 mWebServer = TestWebServer.start(); 164 mWebServer = TestWebServer.start();
162 165
163 CustomTabsConnection connection = 166 CustomTabsConnection connection =
164 CustomTabsConnection.getInstance((Application) appContext); 167 CustomTabsConnection.getInstance((Application) appContext);
165 connection.setForcePrerender(true); 168 connection.setForcePrerender(true);
169 mDefaultDebugOverrideValue = CustomTabsConnection.NO_OVERRIDE;
ahemery1 2017/03/21 15:15:58 The switch that can be acted upon to modify the en
166 } 170 }
167 171
168 @Override 172 @Override
169 protected void tearDown() throws Exception { 173 protected void tearDown() throws Exception {
170 Context appContext = getInstrumentation().getTargetContext().getApplicat ionContext(); 174 Context appContext = getInstrumentation().getTargetContext().getApplicat ionContext();
171 CustomTabsConnection connection = 175 CustomTabsConnection connection =
172 CustomTabsConnection.getInstance((Application) appContext); 176 CustomTabsConnection.getInstance((Application) appContext);
173 connection.setForcePrerender(false); 177 connection.setForcePrerender(false);
174 178
175 ThreadUtils.runOnUiThreadBlocking(new Runnable() { 179 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
(...skipping 1202 matching lines...) Expand 10 before | Expand all | Expand 10 after
1378 }); 1382 });
1379 boolean channelRequested = false; 1383 boolean channelRequested = false;
1380 String titleString = ""; 1384 String titleString = "";
1381 String currentMessage = ""; 1385 String currentMessage = "";
1382 1386
1383 if (requestTime == BEFORE_MAY_LAUNCH_URL) { 1387 if (requestTime == BEFORE_MAY_LAUNCH_URL) {
1384 channelRequested = session.requestPostMessageChannel(null); 1388 channelRequested = session.requestPostMessageChannel(null);
1385 assertTrue(channelRequested); 1389 assertTrue(channelRequested);
1386 } 1390 }
1387 1391
1388 session.mayLaunchUrl(Uri.parse(url), null, null); 1392 mayLaunchUrlForTesting(null, session, null, Uri.parse(url), null, null);
1389 try { 1393 try {
1390 ensureCompletedPrerenderForUrl( 1394 ensureCompletedPrerenderForUrl(
1391 CustomTabsConnection.getInstance((Application) 1395 CustomTabsConnection.getInstance((Application)
1392 getInstrumentation().getTargetContext().getApplicati onContext()), url); 1396 getInstrumentation().getTargetContext().getApplicati onContext()), url);
1393 } catch (Exception e) { 1397 } catch (Exception e) {
1394 fail(); 1398 fail();
1395 } 1399 }
1396 1400
1397 if (requestTime == BEFORE_INTENT) { 1401 if (requestTime == BEFORE_INTENT) {
1398 channelRequested = session.requestPostMessageChannel(null); 1402 channelRequested = session.requestPostMessageChannel(null);
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1477 */ 1481 */
1478 @SmallTest 1482 @SmallTest
1479 @RetryOnFailure 1483 @RetryOnFailure
1480 public void testPrecreatedRenderer() throws InterruptedException { 1484 public void testPrecreatedRenderer() throws InterruptedException {
1481 CustomTabsConnection connection = warmUpAndWait(); 1485 CustomTabsConnection connection = warmUpAndWait();
1482 Context context = getInstrumentation().getTargetContext(); 1486 Context context = getInstrumentation().getTargetContext();
1483 Intent intent = CustomTabsTestUtils.createMinimalCustomTabIntent(context , mTestPage); 1487 Intent intent = CustomTabsTestUtils.createMinimalCustomTabIntent(context , mTestPage);
1484 CustomTabsSessionToken token = CustomTabsSessionToken.getSessionTokenFro mIntent(intent); 1488 CustomTabsSessionToken token = CustomTabsSessionToken.getSessionTokenFro mIntent(intent);
1485 assertTrue(connection.newSession(token)); 1489 assertTrue(connection.newSession(token));
1486 Bundle extras = new Bundle(); 1490 Bundle extras = new Bundle();
1491 // Forcing no prerendering implies falling back to simply creating a spa re WebContent
1487 extras.putInt( 1492 extras.putInt(
1488 CustomTabsConnection.DEBUG_OVERRIDE_KEY, CustomTabsConnection.NO _PRERENDERING); 1493 CustomTabsConnection.DEBUG_OVERRIDE_KEY, CustomTabsConnection.NO _PRERENDERING);
1489 assertTrue(connection.mayLaunchUrl(token, Uri.parse(mTestPage), extras, null)); 1494 assertTrue(mayLaunchUrlForTesting(
1495 connection, null, token, Uri.parse(mTestPage), extras, null));
1490 try { 1496 try {
1491 startCustomTabActivityWithIntent(intent); 1497 startCustomTabActivityWithIntent(intent);
1492 } catch (InterruptedException e) { 1498 } catch (InterruptedException e) {
1493 fail(); 1499 fail();
1494 } 1500 }
1495 CriteriaHelper.pollInstrumentationThread(new Criteria() { 1501 CriteriaHelper.pollInstrumentationThread(new Criteria() {
1496 @Override 1502 @Override
1497 public boolean isSatisfied() { 1503 public boolean isSatisfied() {
1498 final Tab currentTab = getActivity().getActivityTab(); 1504 final Tab currentTab = getActivity().getActivityTab();
1499 return mTestPage.equals(currentTab.getUrl()); 1505 return mTestPage.equals(currentTab.getUrl());
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
1619 String initialUrl = testUrl + initialFragment; 1625 String initialUrl = testUrl + initialFragment;
1620 String fragment = "#yeah"; 1626 String fragment = "#yeah";
1621 String urlWithFragment = testUrl + fragment; 1627 String urlWithFragment = testUrl + fragment;
1622 1628
1623 Context context = getInstrumentation().getTargetContext().getApplication Context(); 1629 Context context = getInstrumentation().getTargetContext().getApplication Context();
1624 CustomTabsConnection connection = warmUpAndWait(); 1630 CustomTabsConnection connection = warmUpAndWait();
1625 Intent intent = CustomTabsTestUtils.createMinimalCustomTabIntent(context , urlWithFragment); 1631 Intent intent = CustomTabsTestUtils.createMinimalCustomTabIntent(context , urlWithFragment);
1626 CustomTabsSessionToken token = CustomTabsSessionToken.getSessionTokenFro mIntent(intent); 1632 CustomTabsSessionToken token = CustomTabsSessionToken.getSessionTokenFro mIntent(intent);
1627 connection.newSession(token); 1633 connection.newSession(token);
1628 connection.setIgnoreUrlFragmentsForSession(token, ignoreFragments); 1634 connection.setIgnoreUrlFragmentsForSession(token, ignoreFragments);
1629 assertTrue(connection.mayLaunchUrl(token, Uri.parse(initialUrl), null, n ull)); 1635 assertTrue(
1636 mayLaunchUrlForTesting(connection, null, token, Uri.parse(initia lUrl), null, null));
1630 1637
1631 if (wait) ensureCompletedPrerenderForUrl(connection, initialUrl); 1638 if (wait) ensureCompletedPrerenderForUrl(connection, initialUrl);
1632 1639
1633 try { 1640 try {
1634 startCustomTabActivityWithIntent(intent); 1641 startCustomTabActivityWithIntent(intent);
1635 } catch (InterruptedException e) { 1642 } catch (InterruptedException e) {
1636 fail(); 1643 fail();
1637 } 1644 }
1638 final Tab tab = mActivity.getActivityTab(); 1645 final Tab tab = mActivity.getActivityTab();
1639 ElementContentCriteria initialVisibilityCriteria = new ElementContentCri teria(
1640 tab, "visibility", ignoreFragments ? "prerender" : "visible");
1641 ElementContentCriteria initialFragmentCriteria = new ElementContentCrite ria(
1642 tab, "initial-fragment", ignoreFragments ? initialFragment : fra gment);
1643 ElementContentCriteria fragmentCriteria = new ElementContentCriteria(
1644 tab, "fragment", fragment);
1645 1646
1646 if (wait) { 1647 if (wait) {
1648 ElementContentCriteria initialVisibilityCriteria = new ElementConten tCriteria(tab,
ahemery1 2017/03/21 15:15:58 Unrelated change but used only inside the wait sco
1649 "visibility",
1650 ignoreFragments ? getExpectedVisibilityForOverride(mLatestDe bugOverrideValue)
1651 : "visible");
1652 ElementContentCriteria initialFragmentCriteria = new ElementContentC riteria(
1653 tab, "initial-fragment", ignoreFragments ? initialFragment : fragment);
1654 ElementContentCriteria fragmentCriteria =
1655 new ElementContentCriteria(tab, "fragment", fragment);
1647 // The tab hasn't been reloaded. 1656 // The tab hasn't been reloaded.
1648 CriteriaHelper.pollInstrumentationThread(initialVisibilityCriteria, 2000, 200); 1657 CriteriaHelper.pollInstrumentationThread(initialVisibilityCriteria, 2000, 200);
1649 // No reload (initial fragment is correct). 1658 // No reload (initial fragment is correct).
1650 CriteriaHelper.pollInstrumentationThread(initialFragmentCriteria, 20 00, 200); 1659 CriteriaHelper.pollInstrumentationThread(initialFragmentCriteria, 20 00, 200);
1651 if (ignoreFragments) { 1660 if (ignoreFragments) {
1652 CriteriaHelper.pollInstrumentationThread(fragmentCriteria, 2000, 200); 1661 CriteriaHelper.pollInstrumentationThread(fragmentCriteria, 2000, 200);
1653 } 1662 }
1654 } else { 1663 } else {
1655 CriteriaHelper.pollInstrumentationThread(new ElementContentCriteria( 1664 CriteriaHelper.pollInstrumentationThread(new ElementContentCriteria(
1656 tab, "initial-fragment", fragment), 2000, 200); 1665 tab, "initial-fragment", fragment), 2000, 200);
1657 } 1666 }
1658 assertFalse(tab.canGoForward()); 1667 assertFalse(tab.canGoForward());
1659 assertFalse(tab.canGoBack()); 1668 assertFalse(tab.canGoBack());
1660 } 1669 }
1661 1670
1662 /** 1671 /**
1663 * Test whether the url shown on prerender gets updated from about:blank whe n the prerender 1672 * Test whether the url shown on prerender gets updated from about:blank whe n the prerender
1664 * completes in the background. 1673 * completes in the background.
1665 * Non-regression test for crbug.com/554236. 1674 * Non-regression test for crbug.com/554236.
1666 */ 1675 */
1667 @SmallTest 1676 @SmallTest
1668 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) 1677 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE)
1669 @RetryOnFailure 1678 @RetryOnFailure
1670 public void testPrerenderingCorrectUrl() throws Exception { 1679 public void testPrerenderingCorrectUrl() throws Exception {
1671 Context context = getInstrumentation().getTargetContext().getApplication Context(); 1680 Context context = getInstrumentation().getTargetContext().getApplication Context();
1672 final CustomTabsConnection connection = warmUpAndWait(); 1681 final CustomTabsConnection connection = warmUpAndWait();
1673 CustomTabsSessionToken token = CustomTabsSessionToken.createDummySession TokenForTesting(); 1682 CustomTabsSessionToken token = CustomTabsSessionToken.createDummySession TokenForTesting();
1674 connection.newSession(token); 1683 connection.newSession(token);
1675 assertTrue(connection.mayLaunchUrl(token, Uri.parse(mTestPage), null, nu ll)); 1684 assertTrue(
1685 mayLaunchUrlForTesting(connection, null, token, Uri.parse(mTestP age), null, null));
1676 ensureCompletedPrerenderForUrl(connection, mTestPage); 1686 ensureCompletedPrerenderForUrl(connection, mTestPage);
1677 1687
1678 try { 1688 try {
1679 startCustomTabActivityWithIntent(CustomTabsTestUtils.createMinimalCu stomTabIntent( 1689 startCustomTabActivityWithIntent(CustomTabsTestUtils.createMinimalCu stomTabIntent(
1680 context, mTestPage)); 1690 context, mTestPage));
1681 } catch (InterruptedException e) { 1691 } catch (InterruptedException e) {
1682 fail(); 1692 fail();
1683 } 1693 }
1684 assertEquals(Uri.parse(mTestPage).getHost() + ":" + Uri.parse(mTestPage) .getPort(), 1694 assertEquals(Uri.parse(mTestPage).getHost() + ":" + Uri.parse(mTestPage) .getPort(),
1685 ((EditText) mActivity.findViewById(R.id.url_bar)).getText() 1695 ((EditText) mActivity.findViewById(R.id.url_bar)).getText()
1686 .toString()); 1696 .toString());
1687 } 1697 }
1688 1698
1689 /** 1699 /**
1690 * Test whether invalid urls are avoided for prerendering. 1700 * Test whether invalid urls are avoided for prerendering.
1691 */ 1701 */
1692 @SmallTest 1702 @SmallTest
1693 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) 1703 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE)
1694 @RetryOnFailure 1704 @RetryOnFailure
1695 public void testPrerenderingInvalidUrl() throws Exception { 1705 public void testPrerenderingInvalidUrl() throws Exception {
1696 final CustomTabsConnection connection = warmUpAndWait(); 1706 final CustomTabsConnection connection = warmUpAndWait();
1697 CustomTabsSessionToken token = CustomTabsSessionToken.createDummySession TokenForTesting(); 1707 CustomTabsSessionToken token = CustomTabsSessionToken.createDummySession TokenForTesting();
1698 connection.newSession(token); 1708 connection.newSession(token);
1699 assertFalse(connection.mayLaunchUrl(token, Uri.parse("chrome://version") , null, null)); 1709 assertFalse(mayLaunchUrlForTesting(
1710 connection, null, token, Uri.parse("chrome://version"), null, nu ll));
1700 } 1711 }
1701 1712
1702 /** 1713 /**
1703 * Tests that the activity knows there is already a child process when warmu p() has been called. 1714 * Tests that the activity knows there is already a child process when warmu p() has been called.
1704 */ 1715 */
1705 @SmallTest 1716 @SmallTest
1706 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) 1717 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE)
1707 @RetryOnFailure 1718 @RetryOnFailure
1708 public void testAllocateChildConnectionWithWarmup() throws Exception { 1719 public void testAllocateChildConnectionWithWarmup() throws Exception {
1709 Context context = getInstrumentation().getTargetContext().getApplication Context(); 1720 Context context = getInstrumentation().getTargetContext().getApplication Context();
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1757 * Tests that the activity knows there is already a child process when prere ndering. 1768 * Tests that the activity knows there is already a child process when prere ndering.
1758 */ 1769 */
1759 @SmallTest 1770 @SmallTest
1760 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) 1771 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE)
1761 @RetryOnFailure 1772 @RetryOnFailure
1762 public void testAllocateChildConnectionWithPrerender() throws Exception { 1773 public void testAllocateChildConnectionWithPrerender() throws Exception {
1763 Context context = getInstrumentation().getTargetContext().getApplication Context(); 1774 Context context = getInstrumentation().getTargetContext().getApplication Context();
1764 final CustomTabsConnection connection = warmUpAndWait(); 1775 final CustomTabsConnection connection = warmUpAndWait();
1765 CustomTabsSessionToken token = CustomTabsSessionToken.createDummySession TokenForTesting(); 1776 CustomTabsSessionToken token = CustomTabsSessionToken.createDummySession TokenForTesting();
1766 connection.newSession(token); 1777 connection.newSession(token);
1767 assertTrue(connection.mayLaunchUrl(token, Uri.parse(mTestPage), null, nu ll)); 1778 assertTrue(
1779 mayLaunchUrlForTesting(connection, null, token, Uri.parse(mTestP age), null, null));
1768 try { 1780 try {
1769 startCustomTabActivityWithIntent( 1781 startCustomTabActivityWithIntent(
1770 CustomTabsTestUtils.createMinimalCustomTabIntent(context, mT estPage)); 1782 CustomTabsTestUtils.createMinimalCustomTabIntent(context, mT estPage));
1771 } catch (InterruptedException e) { 1783 } catch (InterruptedException e) {
1772 fail(); 1784 fail();
1773 } 1785 }
1774 ThreadUtils.runOnUiThreadBlocking(new Runnable() { 1786 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
1775 @Override 1787 @Override
1776 public void run() { 1788 public void run() {
1777 assertFalse("Prerendering should have allocated a child connecti on", 1789 assertFalse("Prerendering should have allocated a child connecti on",
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1817 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) 1829 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE)
1818 @RetryOnFailure 1830 @RetryOnFailure
1819 public void testPrerenderingWithReferrer() throws Exception { 1831 public void testPrerenderingWithReferrer() throws Exception {
1820 String referrer = "android-app://com.foo.me/"; 1832 String referrer = "android-app://com.foo.me/";
1821 maybePrerenderAndLaunchWithReferrers( 1833 maybePrerenderAndLaunchWithReferrers(
1822 mTestServer.getURL(FRAGMENT_TEST_PAGE), true, referrer, referrer ); 1834 mTestServer.getURL(FRAGMENT_TEST_PAGE), true, referrer, referrer );
1823 1835
1824 Tab tab = mActivity.getActivityTab(); 1836 Tab tab = mActivity.getActivityTab();
1825 // The tab hasn't been reloaded. 1837 // The tab hasn't been reloaded.
1826 CriteriaHelper.pollInstrumentationThread( 1838 CriteriaHelper.pollInstrumentationThread(
1827 new ElementContentCriteria(tab, "visibility", "prerender"), 2000 , 200); 1839 new ElementContentCriteria(tab, "visibility",
1840 getExpectedVisibilityForOverride(mLatestDebugOverrideVal ue)),
1841 2000, 200);
1828 // The Referrer is correctly set. 1842 // The Referrer is correctly set.
1829 CriteriaHelper.pollInstrumentationThread( 1843 CriteriaHelper.pollInstrumentationThread(
1830 new TabsOpenedFromExternalAppTest.ReferrerCriteria(tab, referrer ), 2000, 200); 1844 new TabsOpenedFromExternalAppTest.ReferrerCriteria(tab, referrer ), 2000, 200);
1831 } 1845 }
1832 1846
1833 /** 1847 /**
1834 * Tests that prerendering accepts a referrer, and that the prerender is dro pped when the tab 1848 * Tests that prerendering accepts a referrer, and that the prerender is dro pped when the tab
1835 * is launched with a mismatched referrer. 1849 * is launched with a mismatched referrer.
1836 */ 1850 */
1837 @SmallTest 1851 @SmallTest
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
1969 Intent intent = CustomTabsTestUtils.createMinimalCustomTabIntent(context , url); 1983 Intent intent = CustomTabsTestUtils.createMinimalCustomTabIntent(context , url);
1970 if (prerender) { 1984 if (prerender) {
1971 connection = warmUpAndWait(); 1985 connection = warmUpAndWait();
1972 token = CustomTabsSessionToken.getSessionTokenFromIntent(intent); 1986 token = CustomTabsSessionToken.getSessionTokenFromIntent(intent);
1973 connection.newSession(token); 1987 connection.newSession(token);
1974 Bundle extras = null; 1988 Bundle extras = null;
1975 if (prerenderReferrer != null) { 1989 if (prerenderReferrer != null) {
1976 extras = new Bundle(); 1990 extras = new Bundle();
1977 extras.putParcelable(Intent.EXTRA_REFERRER, Uri.parse(prerenderR eferrer)); 1991 extras.putParcelable(Intent.EXTRA_REFERRER, Uri.parse(prerenderR eferrer));
1978 } 1992 }
1979 assertTrue(connection.mayLaunchUrl(token, Uri.parse(url), extras, nu ll)); 1993 assertTrue(
1994 mayLaunchUrlForTesting(connection, null, token, Uri.parse(ur l), extras, null));
1980 ensureCompletedPrerenderForUrl(connection, url); 1995 ensureCompletedPrerenderForUrl(connection, url);
1981 } 1996 }
1982 1997
1983 if (launchReferrer != null) { 1998 if (launchReferrer != null) {
1984 intent.putExtra(Intent.EXTRA_REFERRER, Uri.parse(launchReferrer)); 1999 intent.putExtra(Intent.EXTRA_REFERRER, Uri.parse(launchReferrer));
1985 } 2000 }
1986 try { 2001 try {
1987 startCustomTabActivityWithIntent(intent); 2002 startCustomTabActivityWithIntent(intent);
1988 } catch (InterruptedException e) { 2003 } catch (InterruptedException e) {
1989 fail(); 2004 fail();
1990 } 2005 }
1991 } 2006 }
1992 2007
1993 private void mayLaunchUrlWithoutWarmup(boolean noPrerendering) { 2008 private void mayLaunchUrlWithoutWarmup(boolean noPrerendering) {
1994 Context context = getInstrumentation().getTargetContext().getApplication Context(); 2009 Context context = getInstrumentation().getTargetContext().getApplication Context();
1995 CustomTabsConnection connection = 2010 CustomTabsConnection connection =
1996 CustomTabsTestUtils.setUpConnection((Application) context); 2011 CustomTabsTestUtils.setUpConnection((Application) context);
1997 CustomTabsSessionToken token = CustomTabsSessionToken.createDummySession TokenForTesting(); 2012 CustomTabsSessionToken token = CustomTabsSessionToken.createDummySession TokenForTesting();
1998 connection.newSession(token); 2013 connection.newSession(token);
1999 Bundle extras = null; 2014 Bundle extras = null;
2000 if (noPrerendering) { 2015 if (noPrerendering) {
2001 extras = new Bundle(); 2016 extras = new Bundle();
2002 extras.putInt( 2017 extras.putInt(
2003 CustomTabsConnection.DEBUG_OVERRIDE_KEY, CustomTabsConnectio n.NO_PRERENDERING); 2018 CustomTabsConnection.DEBUG_OVERRIDE_KEY, CustomTabsConnectio n.NO_PRERENDERING);
2004 } 2019 }
2005 assertTrue(connection.mayLaunchUrl(token, Uri.parse(mTestPage), extras, null)); 2020 assertTrue(mayLaunchUrlForTesting(
2021 connection, null, token, Uri.parse(mTestPage), extras, null));
2006 try { 2022 try {
2007 startCustomTabActivityWithIntent(CustomTabsTestUtils.createMinimalCu stomTabIntent( 2023 startCustomTabActivityWithIntent(CustomTabsTestUtils.createMinimalCu stomTabIntent(
2008 context, mTestPage)); 2024 context, mTestPage));
2009 } catch (InterruptedException e) { 2025 } catch (InterruptedException e) {
2010 fail(); 2026 fail();
2011 } 2027 }
2012 Tab tab = getActivity().getActivityTab(); 2028 Tab tab = getActivity().getActivityTab();
2013 assertEquals(mTestPage, tab.getUrl()); 2029 assertEquals(mTestPage, tab.getUrl());
2014 } 2030 }
2015 2031
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
2106 } 2122 }
2107 2123
2108 private CustomTabsSessionToken warmUpAndLaunchUrlWithSession() throws Interr uptedException { 2124 private CustomTabsSessionToken warmUpAndLaunchUrlWithSession() throws Interr uptedException {
2109 return warmUpAndLaunchUrlWithSession( 2125 return warmUpAndLaunchUrlWithSession(
2110 CustomTabsTestUtils.createMinimalCustomTabIntent( 2126 CustomTabsTestUtils.createMinimalCustomTabIntent(
2111 getInstrumentation().getTargetContext(), mTestPage)); 2127 getInstrumentation().getTargetContext(), mTestPage));
2112 } 2128 }
2113 2129
2114 private static void ensureCompletedPrerenderForUrl( 2130 private static void ensureCompletedPrerenderForUrl(
2115 final CustomTabsConnection connection, final String url) throws Exce ption { 2131 final CustomTabsConnection connection, final String url) throws Exce ption {
2116 CriteriaHelper.pollUiThread(new Criteria("No Prerender") { 2132 // We wait until we have a speculation to pull information from first.
2133 CriteriaHelper.pollInstrumentationThread(new Criteria("No Speculation") {
2117 @Override 2134 @Override
2118 public boolean isSatisfied() { 2135 public boolean isSatisfied() {
2119 return connection.mSpeculation != null 2136 return connection.mSpeculation != null;
2120 && connection.mSpeculation.webContents != null
2121 && ExternalPrerenderHandler.hasPrerenderedAndFinishedLoa dingUrl(
2122 Profile.getLastUsedProfile(), url,
2123 connection.mSpeculation.webContents);
2124 } 2137 }
2125 }, LONG_TIMEOUT_MS, CriteriaHelper.DEFAULT_POLLING_INTERVAL); 2138 }, LONG_TIMEOUT_MS, CriteriaHelper.DEFAULT_POLLING_INTERVAL);
2139
2140 // Then do the specific depending on debug override.
2141 if (connection.mSpeculation.debugOverrideValue == CustomTabsConnection.N O_OVERRIDE) {
ahemery1 2017/03/21 15:15:58 We are sure this exist so we can use this value he
2142 CriteriaHelper.pollUiThread(new Criteria("No Prerender") {
2143 @Override
2144 public boolean isSatisfied() {
2145 return connection.mSpeculation.webContents != null
2146 && ExternalPrerenderHandler.hasPrerenderedAndFinishe dLoadingUrl(
2147 Profile.getLastUsedProfile(), url,
2148 connection.mSpeculation.webContents);
2149 }
2150 }, LONG_TIMEOUT_MS, CriteriaHelper.DEFAULT_POLLING_INTERVAL);
2151 }
2126 } 2152 }
2127 2153
2128 private CustomTabsSession bindWithCallback(final CustomTabsCallback callback ) { 2154 private CustomTabsSession bindWithCallback(final CustomTabsCallback callback ) {
2129 final AtomicReference<CustomTabsSession> sessionReference = new AtomicRe ference<>(null); 2155 final AtomicReference<CustomTabsSession> sessionReference = new AtomicRe ference<>(null);
2130 CustomTabsClient.bindCustomTabsService(getInstrumentation().getContext() , 2156 CustomTabsClient.bindCustomTabsService(getInstrumentation().getContext() ,
2131 getInstrumentation().getTargetContext().getPackageName(), 2157 getInstrumentation().getTargetContext().getPackageName(),
2132 new CustomTabsServiceConnection() { 2158 new CustomTabsServiceConnection() {
2133 @Override 2159 @Override
2134 public void onServiceDisconnected(ComponentName name) {} 2160 public void onServiceDisconnected(ComponentName name) {}
2135 2161
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
2203 mTab.getWebContents(), mJsFunction); 2229 mTab.getWebContents(), mJsFunction);
2204 if (jsonText.equalsIgnoreCase("null")) jsonText = ""; 2230 if (jsonText.equalsIgnoreCase("null")) jsonText = "";
2205 value = jsonText; 2231 value = jsonText;
2206 } catch (InterruptedException | TimeoutException e) { 2232 } catch (InterruptedException | TimeoutException e) {
2207 e.printStackTrace(); 2233 e.printStackTrace();
2208 return false; 2234 return false;
2209 } 2235 }
2210 return TextUtils.equals(mExpected, value); 2236 return TextUtils.equals(mExpected, value);
2211 } 2237 }
2212 } 2238 }
2239
2240 private boolean mayLaunchUrlForTesting(CustomTabsConnection connection,
ahemery1 2017/03/21 15:15:58 A wrapper that allows us to do some additional ins
2241 CustomTabsSession session, CustomTabsSessionToken token, Uri url, Bu ndle extras,
2242 List<Bundle> otherLikelyBundles) {
2243 instrumentExtrasForTesting(extras);
2244 if (connection != null) {
2245 return connection.mayLaunchUrl(token, url, extras, otherLikelyBundle s);
2246 }
2247 if (session != null) {
2248 return session.mayLaunchUrl(url, extras, otherLikelyBundles);
2249 }
2250 return false;
2251 }
2252
2253 /*
2254 * Does the following modifications to the extras bundle :
2255 * - Uses the default debug override if none is specified.
2256 */
2257 private void instrumentExtrasForTesting(Bundle extras) {
2258 if (extras == null) extras = new Bundle();
2259 int debugOverrideValue =
2260 extras.getInt(CustomTabsConnection.DEBUG_OVERRIDE_KEY, mDefaultD ebugOverrideValue);
2261 extras.putInt(CustomTabsConnection.DEBUG_OVERRIDE_KEY, debugOverrideValu e);
2262 mLatestDebugOverrideValue = debugOverrideValue;
2263 }
2264
2265 private static String getExpectedVisibilityForOverride(int mode) {
2266 switch (mode) {
2267 case CustomTabsConnection.NO_OVERRIDE:
2268 return "prerender";
2269 default:
2270 return "visible";
2271 }
2272 }
2213 } 2273 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698