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

Side by Side Diff: chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManagerTest.java

Issue 2831823003: Convert ChromeActivityTestCaseBase direct children to JUnit4 (Closed)
Patch Set: fix findbug issues Created 3 years, 7 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.contextualsearch; 5 package org.chromium.chrome.browser.contextualsearch;
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 import static org.chromium.content.browser.test.util.CriteriaHelper.DEFAULT_POLL ING_INTERVAL; 8 import static org.chromium.content.browser.test.util.CriteriaHelper.DEFAULT_POLL ING_INTERVAL;
9 9
10 import android.app.Activity; 10 import android.app.Activity;
11 import android.app.Instrumentation; 11 import android.app.Instrumentation;
12 import android.app.Instrumentation.ActivityMonitor; 12 import android.app.Instrumentation.ActivityMonitor;
13 import android.content.Context; 13 import android.content.Context;
14 import android.content.Intent; 14 import android.content.Intent;
15 import android.content.IntentFilter; 15 import android.content.IntentFilter;
16 import android.content.SharedPreferences; 16 import android.content.SharedPreferences;
17 import android.graphics.Point; 17 import android.graphics.Point;
18 import android.os.SystemClock; 18 import android.os.SystemClock;
19 import android.support.test.InstrumentationRegistry;
19 import android.support.test.filters.SmallTest; 20 import android.support.test.filters.SmallTest;
20 import android.text.TextUtils; 21 import android.text.TextUtils;
21 import android.view.KeyEvent; 22 import android.view.KeyEvent;
22 import android.view.View; 23 import android.view.View;
23 import android.view.ViewConfiguration; 24 import android.view.ViewConfiguration;
24 25
26 import org.junit.After;
27 import org.junit.Assert;
28 import org.junit.Before;
29 import org.junit.Rule;
30 import org.junit.Test;
31 import org.junit.runner.RunWith;
32
25 import org.chromium.base.ContextUtils; 33 import org.chromium.base.ContextUtils;
26 import org.chromium.base.ThreadUtils; 34 import org.chromium.base.ThreadUtils;
27 import org.chromium.base.test.util.CallbackHelper; 35 import org.chromium.base.test.util.CallbackHelper;
28 import org.chromium.base.test.util.CommandLineFlags; 36 import org.chromium.base.test.util.CommandLineFlags;
29 import org.chromium.base.test.util.DisableIf; 37 import org.chromium.base.test.util.DisableIf;
30 import org.chromium.base.test.util.DisabledTest; 38 import org.chromium.base.test.util.DisabledTest;
31 import org.chromium.base.test.util.Feature; 39 import org.chromium.base.test.util.Feature;
32 import org.chromium.base.test.util.FlakyTest; 40 import org.chromium.base.test.util.FlakyTest;
33 import org.chromium.base.test.util.Restriction; 41 import org.chromium.base.test.util.Restriction;
34 import org.chromium.base.test.util.RetryOnFailure; 42 import org.chromium.base.test.util.RetryOnFailure;
35 import org.chromium.chrome.R; 43 import org.chromium.chrome.R;
36 import org.chromium.chrome.browser.ChromeActivity; 44 import org.chromium.chrome.browser.ChromeActivity;
45 import org.chromium.chrome.browser.ChromeSwitches;
37 import org.chromium.chrome.browser.ChromeTabbedActivity; 46 import org.chromium.chrome.browser.ChromeTabbedActivity;
38 import org.chromium.chrome.browser.compositor.bottombar.OverlayContentDelegate; 47 import org.chromium.chrome.browser.compositor.bottombar.OverlayContentDelegate;
39 import org.chromium.chrome.browser.compositor.bottombar.OverlayContentProgressOb server; 48 import org.chromium.chrome.browser.compositor.bottombar.OverlayContentProgressOb server;
40 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel.PanelState; 49 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel.PanelState;
41 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel.StateChange Reason; 50 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel.StateChange Reason;
42 import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.Context ualSearchBarControl; 51 import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.Context ualSearchBarControl;
43 import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.Context ualSearchCaptionControl; 52 import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.Context ualSearchCaptionControl;
44 import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.Context ualSearchImageControl; 53 import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.Context ualSearchImageControl;
45 import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.Context ualSearchPanel; 54 import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.Context ualSearchPanel;
46 import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.Context ualSearchQuickActionControl; 55 import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.Context ualSearchQuickActionControl;
47 import org.chromium.chrome.browser.contextualsearch.ContextualSearchFakeServer.F akeSlowResolveSearch; 56 import org.chromium.chrome.browser.contextualsearch.ContextualSearchFakeServer.F akeSlowResolveSearch;
48 import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler; 57 import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler;
49 import org.chromium.chrome.browser.firstrun.FirstRunStatus; 58 import org.chromium.chrome.browser.firstrun.FirstRunStatus;
50 import org.chromium.chrome.browser.gsa.GSAContextDisplaySelection; 59 import org.chromium.chrome.browser.gsa.GSAContextDisplaySelection;
51 import org.chromium.chrome.browser.omnibox.UrlBar; 60 import org.chromium.chrome.browser.omnibox.UrlBar;
52 import org.chromium.chrome.browser.tab.Tab; 61 import org.chromium.chrome.browser.tab.Tab;
53 import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver; 62 import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver;
54 import org.chromium.chrome.browser.tabmodel.TabModelSelectorObserver; 63 import org.chromium.chrome.browser.tabmodel.TabModelSelectorObserver;
55 import org.chromium.chrome.browser.tabmodel.TabModelUtils; 64 import org.chromium.chrome.browser.tabmodel.TabModelUtils;
56 import org.chromium.chrome.test.ChromeActivityTestCaseBase; 65 import org.chromium.chrome.test.ChromeActivityTestRule;
66 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
57 import org.chromium.chrome.test.util.ChromeRestriction; 67 import org.chromium.chrome.test.util.ChromeRestriction;
58 import org.chromium.chrome.test.util.ChromeTabUtils; 68 import org.chromium.chrome.test.util.ChromeTabUtils;
59 import org.chromium.chrome.test.util.FullscreenTestUtils; 69 import org.chromium.chrome.test.util.FullscreenTestUtils;
60 import org.chromium.chrome.test.util.OmniboxTestUtils; 70 import org.chromium.chrome.test.util.OmniboxTestUtils;
61 import org.chromium.components.navigation_interception.NavigationParams; 71 import org.chromium.components.navigation_interception.NavigationParams;
62 import org.chromium.content.browser.ContentViewCore; 72 import org.chromium.content.browser.ContentViewCore;
63 import org.chromium.content.browser.test.util.Criteria; 73 import org.chromium.content.browser.test.util.Criteria;
64 import org.chromium.content.browser.test.util.CriteriaHelper; 74 import org.chromium.content.browser.test.util.CriteriaHelper;
65 import org.chromium.content.browser.test.util.DOMUtils; 75 import org.chromium.content.browser.test.util.DOMUtils;
66 import org.chromium.content.browser.test.util.KeyUtils; 76 import org.chromium.content.browser.test.util.KeyUtils;
67 import org.chromium.content.browser.test.util.TouchCommon; 77 import org.chromium.content.browser.test.util.TouchCommon;
68 import org.chromium.net.test.EmbeddedTestServer; 78 import org.chromium.net.test.EmbeddedTestServer;
69 import org.chromium.ui.base.PageTransition; 79 import org.chromium.ui.base.PageTransition;
70 import org.chromium.ui.touch_selection.SelectionEventType; 80 import org.chromium.ui.touch_selection.SelectionEventType;
71 81
72 import java.util.concurrent.Callable; 82 import java.util.concurrent.Callable;
73 import java.util.concurrent.TimeoutException; 83 import java.util.concurrent.TimeoutException;
74 84
75 // TODO(pedrosimonetti): Create class with limited API to encapsulate the intern als of simulations. 85 // TODO(pedrosimonetti): Create class with limited API to encapsulate the intern als of simulations.
76 // TODO(pedrosimonetti): Separate tests into different classes grouped by type o f tests. Examples: 86 // TODO(pedrosimonetti): Separate tests into different classes grouped by type o f tests. Examples:
77 // Gestures (Tap, LongPress), Search Term Resolution (resolves, expand selection , prevent preload, 87 // Gestures (Tap, LongPress), Search Term Resolution (resolves, expand selection , prevent preload,
78 // translation), Panel interaction (tap, fling up/down, close), Content (creatio n, loading, 88 // translation), Panel interaction (tap, fling up/down, close), Content (creatio n, loading,
79 // visibility, history, delayed load), Tab Promotion, Policy (add tests to check if policies 89 // visibility, history, delayed load), Tab Promotion, Policy (add tests to check if policies
80 // affect the behavior correctly), General (remaining tests), etc. 90 // affect the behavior correctly), General (remaining tests), etc.
81 91
82 /** 92 /**
83 * Tests the Contextual Search Manager using instrumentation tests. 93 * Tests the Contextual Search Manager using instrumentation tests.
84 */ 94 */
85 // NOTE: Disable online detection so we we'll default to online on test bots wit h no network. 95 // NOTE: Disable online detection so we we'll default to online on test bots wit h no network.
96 @RunWith(ChromeJUnit4ClassRunner.class)
86 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) 97 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE)
87 @CommandLineFlags.Add(ContextualSearchFieldTrial.ONLINE_DETECTION_DISABLED) 98 @CommandLineFlags.Add({ContextualSearchFieldTrial.ONLINE_DETECTION_DISABLED,
99 ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE,
100 ChromeActivityTestRule.DISABLE_NETWORK_PREDICTION_FLAG})
88 @RetryOnFailure 101 @RetryOnFailure
89 public class ContextualSearchManagerTest extends ChromeActivityTestCaseBase<Chro meActivity> { 102 public class ContextualSearchManagerTest {
103 @Rule
104 public ChromeActivityTestRule<ChromeActivity> mActivityTestRule =
105 new ChromeActivityTestRule<>(ChromeActivity.class);
106
90 private static final String TEST_PAGE = 107 private static final String TEST_PAGE =
91 "/chrome/test/data/android/contextualsearch/tap_test.html"; 108 "/chrome/test/data/android/contextualsearch/tap_test.html";
92 private static final int TEST_TIMEOUT = 15000; 109 private static final int TEST_TIMEOUT = 15000;
93 private static final int TEST_EXPECTED_FAILURE_TIMEOUT = 1000; 110 private static final int TEST_EXPECTED_FAILURE_TIMEOUT = 1000;
94 private static final int PLENTY_OF_TAPS = 1000; 111 private static final int PLENTY_OF_TAPS = 1000;
95 112
96 // TODO(donnd): get these from TemplateURL once the low-priority or Contextu al Search API 113 // TODO(donnd): get these from TemplateURL once the low-priority or Contextu al Search API
97 // is fully supported. 114 // is fully supported.
98 private static final String NORMAL_PRIORITY_SEARCH_ENDPOINT = "/search?"; 115 private static final String NORMAL_PRIORITY_SEARCH_ENDPOINT = "/search?";
99 private static final String LOW_PRIORITY_SEARCH_ENDPOINT = "/s?"; 116 private static final String LOW_PRIORITY_SEARCH_ENDPOINT = "/s?";
100 private static final String LOW_PRIORITY_INVALID_SEARCH_ENDPOINT = "/s/inval id"; 117 private static final String LOW_PRIORITY_INVALID_SEARCH_ENDPOINT = "/s/inval id";
101 private static final String CONTEXTUAL_SEARCH_PREFETCH_PARAM = "&pf=c"; 118 private static final String CONTEXTUAL_SEARCH_PREFETCH_PARAM = "&pf=c";
102 // The number of ms to delay startup for all tests. 119 // The number of ms to delay startup for all tests.
103 private static final int ACTIVITY_STARTUP_DELAY_MS = 1000; 120 private static final int ACTIVITY_STARTUP_DELAY_MS = 1000;
104 121
105 private ActivityMonitor mActivityMonitor; 122 private ActivityMonitor mActivityMonitor;
106 private ContextualSearchFakeServer mFakeServer; 123 private ContextualSearchFakeServer mFakeServer;
107 private ContextualSearchManager mManager; 124 private ContextualSearchManager mManager;
108 private ContextualSearchPanel mPanel; 125 private ContextualSearchPanel mPanel;
109 private ContextualSearchPolicy mPolicy; 126 private ContextualSearchPolicy mPolicy;
110 private ContextualSearchSelectionController mSelectionController; 127 private ContextualSearchSelectionController mSelectionController;
111 private EmbeddedTestServer mTestServer; 128 private EmbeddedTestServer mTestServer;
112 129
113 private float mDpToPx; 130 private float mDpToPx;
114 131
115 // State for an individual test. 132 // State for an individual test.
116 FakeSlowResolveSearch mLatestSlowResolveSearch; 133 FakeSlowResolveSearch mLatestSlowResolveSearch;
117 134
118 public ContextualSearchManagerTest() { 135 @Before
119 super(ChromeActivity.class); 136 public void setUp() throws Exception {
120 }
121
122 @Override
123 protected void setUp() throws Exception {
124 // We have to set up the test server before starting the activity. 137 // We have to set up the test server before starting the activity.
125 mTestServer = EmbeddedTestServer.createAndStartServer(getInstrumentation ().getContext()); 138 mTestServer = EmbeddedTestServer.createAndStartServer(
139 InstrumentationRegistry.getInstrumentation().getContext());
126 140
127 ThreadUtils.runOnUiThreadBlocking(new Runnable() { 141 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
128 @Override 142 @Override
129 public void run() { 143 public void run() {
130 FirstRunStatus.setFirstRunFlowComplete(true); 144 FirstRunStatus.setFirstRunFlowComplete(true);
131 } 145 }
132 }); 146 });
133 super.setUp(); 147 mActivityTestRule.startMainActivityWithURL(mTestServer.getURL(TEST_PAGE) );
148 // There's a problem with immediate startup that causes flakes due to th e page not being
149 // ready, so specify a startup-delay of 1000 for legacy behavior. See c rbug.com/635661.
150 // TODO(donnd): find a better way to wait for page-ready, or at least re duce the delay!
151 Thread.sleep(ACTIVITY_STARTUP_DELAY_MS);
134 152
135 mManager = getActivity().getContextualSearchManager(); 153 mManager = mActivityTestRule.getActivity().getContextualSearchManager();
136 154
137 assertNotNull(mManager); 155 Assert.assertNotNull(mManager);
138 mPanel = mManager.getContextualSearchPanel(); 156 mPanel = mManager.getContextualSearchPanel();
139 157
140 mSelectionController = mManager.getSelectionController(); 158 mSelectionController = mManager.getSelectionController();
141 mPolicy = mManager.getContextualSearchPolicy(); 159 mPolicy = mManager.getContextualSearchPolicy();
142 mPolicy.overrideDecidedStateForTesting(true); 160 mPolicy.overrideDecidedStateForTesting(true);
143 resetCounters(); 161 resetCounters();
144 162
145 mFakeServer = new ContextualSearchFakeServer(mPolicy, this, mManager, 163 mFakeServer = new ContextualSearchFakeServer(mPolicy, this, mManager,
146 mManager.getOverlayContentDelegate(), new OverlayContentProgress Observer(), 164 mManager.getOverlayContentDelegate(), new OverlayContentProgress Observer(),
147 getActivity()); 165 mActivityTestRule.getActivity());
148 166
149 mPanel.setOverlayPanelContentFactory(mFakeServer); 167 mPanel.setOverlayPanelContentFactory(mFakeServer);
150 mManager.setNetworkCommunicator(mFakeServer); 168 mManager.setNetworkCommunicator(mFakeServer);
151 169
152 registerFakeSearches(); 170 registerFakeSearches();
153 171
154 IntentFilter filter = new IntentFilter(Intent.ACTION_VIEW); 172 IntentFilter filter = new IntentFilter(Intent.ACTION_VIEW);
155 filter.addCategory(Intent.CATEGORY_BROWSABLE); 173 filter.addCategory(Intent.CATEGORY_BROWSABLE);
156 filter.addDataScheme("market"); 174 filter.addDataScheme("market");
157 mActivityMonitor = getInstrumentation().addMonitor( 175 mActivityMonitor = InstrumentationRegistry.getInstrumentation().addMonit or(
158 filter, new Instrumentation.ActivityResult(Activity.RESULT_OK, n ull), true); 176 filter, new Instrumentation.ActivityResult(Activity.RESULT_OK, n ull), true);
159 177
160 mDpToPx = getActivity().getResources().getDisplayMetrics().density; 178 mDpToPx = mActivityTestRule.getActivity().getResources().getDisplayMetri cs().density;
161 } 179 }
162 180
163 @Override 181 @After
164 protected void tearDown() throws Exception { 182 public void tearDown() throws Exception {
165 mTestServer.stopAndDestroyServer(); 183 mTestServer.stopAndDestroyServer();
166 ThreadUtils.runOnUiThreadBlocking(new Runnable() { 184 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
167 @Override 185 @Override
168 public void run() { 186 public void run() {
169 FirstRunStatus.setFirstRunFlowComplete(false); 187 FirstRunStatus.setFirstRunFlowComplete(false);
170 } 188 }
171 }); 189 });
172 super.tearDown();
173 } 190 }
174 191
175 /** 192 /**
176 * Sets the online status and reloads the current Tab with our test URL. 193 * Sets the online status and reloads the current Tab with our test URL.
177 * @param isOnline Whether to go online. 194 * @param isOnline Whether to go online.
178 * @throws InterruptedException 195 * @throws InterruptedException
179 * @throws TimeoutException 196 * @throws TimeoutException
180 */ 197 */
181 private void setOnlineStatusAndReload(boolean isOnline) 198 private void setOnlineStatusAndReload(boolean isOnline)
182 throws InterruptedException, TimeoutException { 199 throws InterruptedException, TimeoutException {
183 mFakeServer.setIsOnline(isOnline); 200 mFakeServer.setIsOnline(isOnline);
184 final String testUrl = mTestServer.getURL(TEST_PAGE); 201 final String testUrl = mTestServer.getURL(TEST_PAGE);
185 final Tab tab = getActivity().getActivityTab(); 202 final Tab tab = mActivityTestRule.getActivity().getActivityTab();
186 ThreadUtils.runOnUiThreadBlocking(new Runnable() { 203 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
187 @Override 204 @Override
188 public void run() { 205 public void run() {
189 tab.reload(); 206 tab.reload();
190 } 207 }
191 }); 208 });
192 // Make sure the page is fully loaded. 209 // Make sure the page is fully loaded.
193 ChromeTabUtils.waitForTabPageLoaded(tab, testUrl); 210 ChromeTabUtils.waitForTabPageLoaded(tab, testUrl);
194 } 211 }
195 212
196 //========================================================================== ================== 213 //========================================================================== ==================
197 // Public API 214 // Public API
198 //========================================================================== ================== 215 //========================================================================== ==================
199 216
200 /** 217 /**
201 * Simulates a long-press on the given node without waiting for the panel to respond. 218 * Simulates a long-press on the given node without waiting for the panel to respond.
202 * @param nodeId A string containing the node ID. 219 * @param nodeId A string containing the node ID.
203 */ 220 */
204 public void longPressNodeWithoutWaiting(String nodeId) 221 public void longPressNodeWithoutWaiting(String nodeId)
205 throws InterruptedException, TimeoutException { 222 throws InterruptedException, TimeoutException {
206 Tab tab = getActivity().getActivityTab(); 223 Tab tab = mActivityTestRule.getActivity().getActivityTab();
207 DOMUtils.longPressNode(tab.getContentViewCore(), nodeId); 224 DOMUtils.longPressNode(tab.getContentViewCore(), nodeId);
208 } 225 }
209 226
210 /** 227 /**
211 * Simulates a long-press on the given node and waits for the panel to peek. 228 * Simulates a long-press on the given node and waits for the panel to peek.
212 * @param nodeId A string containing the node ID. 229 * @param nodeId A string containing the node ID.
213 */ 230 */
214 public void longPressNode(String nodeId) throws InterruptedException, Timeou tException { 231 public void longPressNode(String nodeId) throws InterruptedException, Timeou tException {
215 longPressNodeWithoutWaiting(nodeId); 232 longPressNodeWithoutWaiting(nodeId);
216 waitForPanelToPeek(); 233 waitForPanelToPeek();
217 } 234 }
218 235
219 /** 236 /**
220 * Simulates a click on the given node. 237 * Simulates a click on the given node.
221 * @param nodeId A string containing the node ID. 238 * @param nodeId A string containing the node ID.
222 */ 239 */
223 public void clickNode(String nodeId) throws InterruptedException, TimeoutExc eption { 240 public void clickNode(String nodeId) throws InterruptedException, TimeoutExc eption {
224 Tab tab = getActivity().getActivityTab(); 241 Tab tab = mActivityTestRule.getActivity().getActivityTab();
225 DOMUtils.clickNode(tab.getContentViewCore(), nodeId); 242 DOMUtils.clickNode(tab.getContentViewCore(), nodeId);
226 } 243 }
227 244
228 /** 245 /**
229 * Waits for the selected text string to be the given string, and asserts. 246 * Waits for the selected text string to be the given string, and asserts.
230 * @param text The string to wait for the selection to become. 247 * @param text The string to wait for the selection to become.
231 */ 248 */
232 public void waitForSelectionToBe(final String text) { 249 public void waitForSelectionToBe(final String text) {
233 CriteriaHelper.pollInstrumentationThread(Criteria.equals(text, new Calla ble<String>() { 250 CriteriaHelper.pollInstrumentationThread(Criteria.equals(text, new Calla ble<String>() {
234 @Override 251 @Override
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 } 301 }
285 }, 302 },
286 TEST_TIMEOUT, DEFAULT_POLLING_INTERVAL); 303 TEST_TIMEOUT, DEFAULT_POLLING_INTERVAL);
287 } 304 }
288 305
289 /** 306 /**
290 * Runs the given Runnable in the main thread. 307 * Runs the given Runnable in the main thread.
291 * @param runnable The Runnable. 308 * @param runnable The Runnable.
292 */ 309 */
293 public void runOnMainSync(Runnable runnable) { 310 public void runOnMainSync(Runnable runnable) {
294 getInstrumentation().runOnMainSync(runnable); 311 InstrumentationRegistry.getInstrumentation().runOnMainSync(runnable);
295 }
296
297 @Override
298 public void startMainActivity() throws InterruptedException {
299 startMainActivityWithURL(mTestServer.getURL(TEST_PAGE));
300 // There's a problem with immediate startup that causes flakes due to th e page not being
301 // ready, so specify a startup-delay of 1000 for legacy behavior. See c rbug.com/635661.
302 // TODO(donnd): find a better way to wait for page-ready, or at least re duce the delay!
303 Thread.sleep(ACTIVITY_STARTUP_DELAY_MS);
304 } 312 }
305 313
306 //========================================================================== ================== 314 //========================================================================== ==================
307 // Fake Searches Helpers 315 // Fake Searches Helpers
308 //========================================================================== ================== 316 //========================================================================== ==================
309 317
310 /** 318 /**
311 * Simulates a long-press triggered search. 319 * Simulates a long-press triggered search.
312 * 320 *
313 * @param nodeId The id of the node to be long-pressed. 321 * @param nodeId The id of the node to be long-pressed.
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 460
453 /** 461 /**
454 * Fakes a server response with the parameters given. 462 * Fakes a server response with the parameters given.
455 * {@See ContextualSearchManager#handleSearchTermResolutionResponse}. 463 * {@See ContextualSearchManager#handleSearchTermResolutionResponse}.
456 */ 464 */
457 private void fakeResponse(boolean isNetworkUnavailable, int responseCode, St ring searchTerm, 465 private void fakeResponse(boolean isNetworkUnavailable, int responseCode, St ring searchTerm,
458 String displayText, String alternateTerm, String mid, boolean doPrev entPreload, 466 String displayText, String alternateTerm, String mid, boolean doPrev entPreload,
459 int startAdjust, int endAdjust, String contextLanguage, String thumb nailUrl, 467 int startAdjust, int endAdjust, String contextLanguage, String thumb nailUrl,
460 String caption, String quickActionUri, int quickActionCategory) { 468 String caption, String quickActionUri, int quickActionCategory) {
461 if (mFakeServer.getSearchTermRequested() != null) { 469 if (mFakeServer.getSearchTermRequested() != null) {
462 getInstrumentation().runOnMainSync(new FakeResponseOnMainThread(isNe tworkUnavailable, 470 InstrumentationRegistry.getInstrumentation().runOnMainSync(new FakeR esponseOnMainThread(
463 responseCode, searchTerm, displayText, alternateTerm, mid, d oPreventPreload, 471 isNetworkUnavailable, responseCode, searchTerm, displayText, alternateTerm, mid,
464 startAdjust, endAdjust, contextLanguage, thumbnailUrl, capti on, 472 doPreventPreload, startAdjust, endAdjust, contextLanguage, t humbnailUrl,
465 quickActionUri, quickActionCategory)); 473 caption, quickActionUri, quickActionCategory));
466 } 474 }
467 } 475 }
468 476
469 //========================================================================== ================== 477 //========================================================================== ==================
470 // Content Helpers 478 // Content Helpers
471 //========================================================================== ================== 479 //========================================================================== ==================
472 480
473 /** 481 /**
474 * @return The Panel's ContentViewCore. 482 * @return The Panel's ContentViewCore.
475 */ 483 */
476 private ContentViewCore getPanelContentViewCore() { 484 private ContentViewCore getPanelContentViewCore() {
477 return mPanel.getContentViewCore(); 485 return mPanel.getContentViewCore();
478 } 486 }
479 487
480 /** 488 /**
481 * @return Whether the Panel's ContentViewCore is visible. 489 * @return Whether the Panel's ContentViewCore is visible.
482 */ 490 */
483 private boolean isContentViewCoreVisible() { 491 private boolean isContentViewCoreVisible() {
484 ContextualSearchFakeServer.ContentViewCoreWrapper contentViewCore = 492 ContextualSearchFakeServer.ContentViewCoreWrapper contentViewCore =
485 (ContextualSearchFakeServer.ContentViewCoreWrapper) getPanelCont entViewCore(); 493 (ContextualSearchFakeServer.ContentViewCoreWrapper) getPanelCont entViewCore();
486 return contentViewCore != null ? contentViewCore.isVisible() : false; 494 return contentViewCore != null ? contentViewCore.isVisible() : false;
487 } 495 }
488 496
489 /** 497 /**
490 * Asserts that the Panel's ContentViewCore is created. 498 * Asserts that the Panel's ContentViewCore is created.
491 */ 499 */
492 private void assertContentViewCoreCreated() { 500 private void assertContentViewCoreCreated() {
493 assertNotNull(getPanelContentViewCore()); 501 Assert.assertNotNull(getPanelContentViewCore());
494 } 502 }
495 503
496 /** 504 /**
497 * Asserts that the Panel's ContentViewCore is not created. 505 * Asserts that the Panel's ContentViewCore is not created.
498 */ 506 */
499 private void assertNoContentViewCore() { 507 private void assertNoContentViewCore() {
500 assertNull(getPanelContentViewCore()); 508 Assert.assertNull(getPanelContentViewCore());
501 } 509 }
502 510
503 /** 511 /**
504 * Asserts that the Panel's ContentViewCore is visible. 512 * Asserts that the Panel's ContentViewCore is visible.
505 */ 513 */
506 private void assertContentViewCoreVisible() { 514 private void assertContentViewCoreVisible() {
507 assertTrue(isContentViewCoreVisible()); 515 Assert.assertTrue(isContentViewCoreVisible());
508 } 516 }
509 517
510 /** 518 /**
511 * Asserts that the Panel's ContentViewCore onShow() method was never called . 519 * Asserts that the Panel's ContentViewCore onShow() method was never called .
512 */ 520 */
513 private void assertNeverCalledContentViewCoreOnShow() { 521 private void assertNeverCalledContentViewCoreOnShow() {
514 assertFalse(mFakeServer.didEverCallContentViewCoreOnShow()); 522 Assert.assertFalse(mFakeServer.didEverCallContentViewCoreOnShow());
515 } 523 }
516 524
517 /** 525 /**
518 * Asserts that the Panel's ContentViewCore is created 526 * Asserts that the Panel's ContentViewCore is created
519 */ 527 */
520 private void assertContentViewCoreCreatedButNeverMadeVisible() { 528 private void assertContentViewCoreCreatedButNeverMadeVisible() {
521 assertContentViewCoreCreated(); 529 assertContentViewCoreCreated();
522 assertFalse(isContentViewCoreVisible()); 530 Assert.assertFalse(isContentViewCoreVisible());
523 assertNeverCalledContentViewCoreOnShow(); 531 assertNeverCalledContentViewCoreOnShow();
524 } 532 }
525 533
526 /** 534 /**
527 * Fakes navigation of the Content View to the URL that was previously reque sted. 535 * Fakes navigation of the Content View to the URL that was previously reque sted.
528 * @param isFailure whether the request resulted in a failure. 536 * @param isFailure whether the request resulted in a failure.
529 */ 537 */
530 private void fakeContentViewDidNavigate(boolean isFailure) { 538 private void fakeContentViewDidNavigate(boolean isFailure) {
531 String url = mFakeServer.getLoadedUrl(); 539 String url = mFakeServer.getLoadedUrl();
532 mManager.getOverlayContentDelegate().onMainFrameNavigation(url, false, i sFailure); 540 mManager.getOverlayContentDelegate().onMainFrameNavigation(url, false, i sFailure);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 private void clickWordNode(String nodeId) throws InterruptedException, Timeo utException { 578 private void clickWordNode(String nodeId) throws InterruptedException, Timeo utException {
571 clickNode(nodeId); 579 clickNode(nodeId);
572 waitForPanelToPeek(); 580 waitForPanelToPeek();
573 } 581 }
574 582
575 /** 583 /**
576 * Simulates a key press. 584 * Simulates a key press.
577 * @param keycode The key's code. 585 * @param keycode The key's code.
578 */ 586 */
579 private void pressKey(int keycode) { 587 private void pressKey(int keycode) {
580 KeyUtils.singleKeyEventActivity(getInstrumentation(), getActivity(), key code); 588 KeyUtils.singleKeyEventActivity(InstrumentationRegistry.getInstrumentati on(),
589 mActivityTestRule.getActivity(), keycode);
581 } 590 }
582 591
583 /** 592 /**
584 * Simulates pressing back button. 593 * Simulates pressing back button.
585 */ 594 */
586 private void pressBackButton() { 595 private void pressBackButton() {
587 pressKey(KeyEvent.KEYCODE_BACK); 596 pressKey(KeyEvent.KEYCODE_BACK);
588 } 597 }
589 598
590 /** 599 /**
591 * @return The selected text. 600 * @return The selected text.
592 */ 601 */
593 private String getSelectedText() { 602 private String getSelectedText() {
594 return mSelectionController.getSelectedText(); 603 return mSelectionController.getSelectedText();
595 } 604 }
596 605
597 /** 606 /**
598 * Asserts that the loaded search term matches the provided value. 607 * Asserts that the loaded search term matches the provided value.
599 * @param searchTerm The provided search term. 608 * @param searchTerm The provided search term.
600 */ 609 */
601 private void assertLoadedSearchTermMatches(String searchTerm) { 610 private void assertLoadedSearchTermMatches(String searchTerm) {
602 boolean doesMatch = false; 611 boolean doesMatch = false;
603 String loadedUrl = mFakeServer.getLoadedUrl(); 612 String loadedUrl = mFakeServer.getLoadedUrl();
604 doesMatch = loadedUrl != null && loadedUrl.contains("q=" + searchTerm); 613 doesMatch = loadedUrl != null && loadedUrl.contains("q=" + searchTerm);
605 String message = loadedUrl == null ? "but there was no loaded URL!" 614 String message = loadedUrl == null ? "but there was no loaded URL!"
606 : "in URL: " + loadedUrl; 615 : "in URL: " + loadedUrl;
607 assertTrue("Expected to find searchTerm '" + searchTerm + "', " + messag e, doesMatch); 616 Assert.assertTrue(
617 "Expected to find searchTerm '" + searchTerm + "', " + message, doesMatch);
608 } 618 }
609 619
610 /** 620 /**
611 * Asserts that the given parameters are present in the most recently loaded URL. 621 * Asserts that the given parameters are present in the most recently loaded URL.
612 */ 622 */
613 private void assertContainsParameters(String searchTerm, String alternateTer m) { 623 private void assertContainsParameters(String searchTerm, String alternateTer m) {
614 assertTrue(mFakeServer.getSearchTermRequested() == null 624 Assert.assertTrue(mFakeServer.getSearchTermRequested() == null
615 || mFakeServer.getLoadedUrl().contains(searchTerm) 625 || mFakeServer.getLoadedUrl().contains(searchTerm)
616 && mFakeServer.getLoadedUrl().contains(alternateTerm)); 626 && mFakeServer.getLoadedUrl().contains(alternateTerm));
617 } 627 }
618 628
619 /** 629 /**
620 * Asserts that a Search Term has been requested. 630 * Asserts that a Search Term has been requested.
621 */ 631 */
622 private void assertSearchTermRequested() { 632 private void assertSearchTermRequested() {
623 assertNotNull(mFakeServer.getSearchTermRequested()); 633 Assert.assertNotNull(mFakeServer.getSearchTermRequested());
624 } 634 }
625 635
626 /** 636 /**
627 * Asserts that there has not been any Search Term requested. 637 * Asserts that there has not been any Search Term requested.
628 */ 638 */
629 private void assertSearchTermNotRequested() { 639 private void assertSearchTermNotRequested() {
630 assertNull(mFakeServer.getSearchTermRequested()); 640 Assert.assertNull(mFakeServer.getSearchTermRequested());
631 } 641 }
632 642
633 /** 643 /**
634 * Asserts that the panel is currently closed or in an undefined state. 644 * Asserts that the panel is currently closed or in an undefined state.
635 */ 645 */
636 private void assertPanelClosedOrUndefined() { 646 private void assertPanelClosedOrUndefined() {
637 boolean success = false; 647 boolean success = false;
638 if (mPanel == null) { 648 if (mPanel == null) {
639 success = true; 649 success = true;
640 } else { 650 } else {
641 PanelState panelState = mPanel.getPanelState(); 651 PanelState panelState = mPanel.getPanelState();
642 success = panelState == PanelState.CLOSED || panelState == PanelStat e.UNDEFINED; 652 success = panelState == PanelState.CLOSED || panelState == PanelStat e.UNDEFINED;
643 } 653 }
644 assertTrue(success); 654 Assert.assertTrue(success);
645 } 655 }
646 656
647 /** 657 /**
648 * Asserts that the panel is currently in the "peeking" state (just showing the Bar). 658 * Asserts that the panel is currently in the "peeking" state (just showing the Bar).
649 */ 659 */
650 private void assertPanelPeeked() { 660 private void assertPanelPeeked() {
651 assertTrue(mPanel.getPanelState() == PanelState.PEEKED); 661 Assert.assertTrue(mPanel.getPanelState() == PanelState.PEEKED);
652 } 662 }
653 663
654 /** 664 /**
655 * Asserts that no URL has been loaded in the Overlay Panel. 665 * Asserts that no URL has been loaded in the Overlay Panel.
656 */ 666 */
657 private void assertLoadedNoUrl() { 667 private void assertLoadedNoUrl() {
658 assertTrue("Requested a search or preload when none was expected!", 668 Assert.assertTrue("Requested a search or preload when none was expected! ",
659 mFakeServer.getLoadedUrl() == null); 669 mFakeServer.getLoadedUrl() == null);
660 } 670 }
661 671
662 /** 672 /**
663 * Asserts that a low-priority URL has been loaded in the Overlay Panel. 673 * Asserts that a low-priority URL has been loaded in the Overlay Panel.
664 */ 674 */
665 private void assertLoadedLowPriorityUrl() { 675 private void assertLoadedLowPriorityUrl() {
666 String message = "Expected a low priority search request URL, but got " 676 String message = "Expected a low priority search request URL, but got "
667 + (mFakeServer.getLoadedUrl() != null ? mFakeServer.getLoadedUrl () : "null"); 677 + (mFakeServer.getLoadedUrl() != null ? mFakeServer.getLoadedUrl () : "null");
668 assertTrue(message, mFakeServer.getLoadedUrl() != null 678 Assert.assertTrue(message,
669 && mFakeServer.getLoadedUrl().contains(LOW_PRIORITY_SEARCH_ENDPO INT)); 679 mFakeServer.getLoadedUrl() != null
670 assertTrue("Low priority request does not have the required prefetch par ameter!", 680 && mFakeServer.getLoadedUrl().contains(LOW_PRIORITY_SEAR CH_ENDPOINT));
681 Assert.assertTrue("Low priority request does not have the required prefe tch parameter!",
671 mFakeServer.getLoadedUrl() != null 682 mFakeServer.getLoadedUrl() != null
672 && mFakeServer.getLoadedUrl().contains(CONTEXTUAL_SEARCH _PREFETCH_PARAM)); 683 && mFakeServer.getLoadedUrl().contains(CONTEXTUAL_SEARCH _PREFETCH_PARAM));
673 } 684 }
674 685
675 /** 686 /**
676 * Asserts that a low-priority URL that is intentionally invalid has been lo aded in the Overlay 687 * Asserts that a low-priority URL that is intentionally invalid has been lo aded in the Overlay
677 * Panel (in order to produce an error). 688 * Panel (in order to produce an error).
678 */ 689 */
679 private void assertLoadedLowPriorityInvalidUrl() { 690 private void assertLoadedLowPriorityInvalidUrl() {
680 String message = "Expected a low priority invalid search request URL, bu t got " 691 String message = "Expected a low priority invalid search request URL, bu t got "
681 + (String.valueOf(mFakeServer.getLoadedUrl())); 692 + (String.valueOf(mFakeServer.getLoadedUrl()));
682 assertTrue(message, mFakeServer.getLoadedUrl() != null 693 Assert.assertTrue(message,
694 mFakeServer.getLoadedUrl() != null
683 && mFakeServer.getLoadedUrl().contains( 695 && mFakeServer.getLoadedUrl().contains(
684 LOW_PRIORITY_INVALID_SEARCH_ENDPOINT)); 696 LOW_PRIORITY_INVALID_SEARCH_ENDPOINT));
685 assertTrue("Low priority request does not have the required prefetch par ameter!", 697 Assert.assertTrue("Low priority request does not have the required prefe tch parameter!",
686 mFakeServer.getLoadedUrl() != null 698 mFakeServer.getLoadedUrl() != null
687 && mFakeServer.getLoadedUrl().contains(CONTEXTUAL_SEARCH _PREFETCH_PARAM)); 699 && mFakeServer.getLoadedUrl().contains(CONTEXTUAL_SEARCH _PREFETCH_PARAM));
688 } 700 }
689 701
690 /** 702 /**
691 * Asserts that a normal priority URL has been loaded in the Overlay Panel. 703 * Asserts that a normal priority URL has been loaded in the Overlay Panel.
692 */ 704 */
693 private void assertLoadedNormalPriorityUrl() { 705 private void assertLoadedNormalPriorityUrl() {
694 String message = "Expected a normal priority search request URL, but got " 706 String message = "Expected a normal priority search request URL, but got "
695 + (mFakeServer.getLoadedUrl() != null ? mFakeServer.getLoadedUrl () : "null"); 707 + (mFakeServer.getLoadedUrl() != null ? mFakeServer.getLoadedUrl () : "null");
696 assertTrue(message, mFakeServer.getLoadedUrl() != null 708 Assert.assertTrue(message,
697 && mFakeServer.getLoadedUrl().contains(NORMAL_PRIORITY_SEARCH_EN DPOINT)); 709 mFakeServer.getLoadedUrl() != null
698 assertTrue("Normal priority request should not have the prefetch paramet er, but did!", 710 && mFakeServer.getLoadedUrl().contains(NORMAL_PRIORITY_S EARCH_ENDPOINT));
711 Assert.assertTrue(
712 "Normal priority request should not have the prefetch parameter, but did!",
699 mFakeServer.getLoadedUrl() != null 713 mFakeServer.getLoadedUrl() != null
700 && !mFakeServer.getLoadedUrl().contains(CONTEXTUAL_SEARC H_PREFETCH_PARAM)); 714 && !mFakeServer.getLoadedUrl().contains(CONTEXTUAL_SEARC H_PREFETCH_PARAM));
701 } 715 }
702 716
703 /** 717 /**
704 * Asserts that no URLs have been loaded in the Overlay Panel since the last {@link reset}. 718 * Asserts that no URLs have been loaded in the Overlay Panel since the last {@link reset}.
705 */ 719 */
706 private void assertNoSearchesLoaded() { 720 private void assertNoSearchesLoaded() {
707 assertEquals(0, mFakeServer.getLoadedUrlCount()); 721 Assert.assertEquals(0, mFakeServer.getLoadedUrlCount());
708 assertLoadedNoUrl(); 722 assertLoadedNoUrl();
709 } 723 }
710 724
711 /** 725 /**
712 * Asserts that the tap triggered promo counter is enabled and at the specif ied count. 726 * Asserts that the tap triggered promo counter is enabled and at the specif ied count.
713 */ 727 */
714 private void assertTapPromoCounterEnabledAt(int expectedCount) { 728 private void assertTapPromoCounterEnabledAt(int expectedCount) {
715 assertTrue(mPolicy.getPromoTapCounter().isEnabled()); 729 Assert.assertTrue(mPolicy.getPromoTapCounter().isEnabled());
716 assertEquals(expectedCount, mPolicy.getPromoTapCounter().getCount()); 730 Assert.assertEquals(expectedCount, mPolicy.getPromoTapCounter().getCount ());
717 } 731 }
718 732
719 /** 733 /**
720 * Asserts that the tap triggered promo counter is disabled and at the speci fied count. 734 * Asserts that the tap triggered promo counter is disabled and at the speci fied count.
721 */ 735 */
722 private void assertTapPromoCounterDisabledAt(int expectedCount) { 736 private void assertTapPromoCounterDisabledAt(int expectedCount) {
723 assertFalse(mPolicy.getPromoTapCounter().isEnabled()); 737 Assert.assertFalse(mPolicy.getPromoTapCounter().isEnabled());
724 assertEquals(expectedCount, mPolicy.getPromoTapCounter().getCount()); 738 Assert.assertEquals(expectedCount, mPolicy.getPromoTapCounter().getCount ());
725 } 739 }
726 740
727 /** 741 /**
728 * Waits for the Search Panel (the Search Bar) to peek up from the bottom, a nd asserts that it 742 * Waits for the Search Panel (the Search Bar) to peek up from the bottom, a nd asserts that it
729 * did peek. 743 * did peek.
730 * @throws InterruptedException 744 * @throws InterruptedException
731 */ 745 */
732 private void waitForPanelToPeek() throws InterruptedException { 746 private void waitForPanelToPeek() throws InterruptedException {
733 waitForPanelToEnterState(PanelState.PEEKED); 747 waitForPanelToEnterState(PanelState.PEEKED);
734 } 748 }
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
788 */ 802 */
789 private void assertPanelStillInState(final PanelState initialState) 803 private void assertPanelStillInState(final PanelState initialState)
790 throws InterruptedException { 804 throws InterruptedException {
791 boolean didChangeState = false; 805 boolean didChangeState = false;
792 long startTime = SystemClock.uptimeMillis(); 806 long startTime = SystemClock.uptimeMillis();
793 while (!didChangeState 807 while (!didChangeState
794 && SystemClock.uptimeMillis() - startTime < TEST_EXPECTED_FAILUR E_TIMEOUT) { 808 && SystemClock.uptimeMillis() - startTime < TEST_EXPECTED_FAILUR E_TIMEOUT) {
795 Thread.sleep(DEFAULT_POLLING_INTERVAL); 809 Thread.sleep(DEFAULT_POLLING_INTERVAL);
796 didChangeState = mPanel.getPanelState() != initialState; 810 didChangeState = mPanel.getPanelState() != initialState;
797 } 811 }
798 assertFalse(didChangeState); 812 Assert.assertFalse(didChangeState);
799 } 813 }
800 814
801 /** 815 /**
802 * Waits for the manager to finish processing a gesture. 816 * Waits for the manager to finish processing a gesture.
803 * Tells the manager that a gesture has started, and then waits for it to co mplete. 817 * Tells the manager that a gesture has started, and then waits for it to co mplete.
804 * @throws InterruptedException 818 * @throws InterruptedException
805 */ 819 */
806 private void waitForGestureProcessing() { 820 private void waitForGestureProcessing() {
807 CriteriaHelper.pollInstrumentationThread( 821 CriteriaHelper.pollInstrumentationThread(
808 new Criteria("Gesture processing did not complete.") { 822 new Criteria("Gesture processing did not complete.") {
809 @Override 823 @Override
810 public boolean isSatisfied() { 824 public boolean isSatisfied() {
811 return !mSelectionController.wasAnyTapGestureDetected(); 825 return !mSelectionController.wasAnyTapGestureDetected();
812 } 826 }
813 }, TEST_TIMEOUT, DEFAULT_POLLING_INTERVAL); 827 }, TEST_TIMEOUT, DEFAULT_POLLING_INTERVAL);
814 } 828 }
815 829
816 /** 830 /**
817 * Shorthand for a common sequence: 831 * Shorthand for a common sequence:
818 * 1) Waits for gesture processing, 832 * 1) Waits for gesture processing,
819 * 2) Waits for the panel to close, 833 * 2) Waits for the panel to close,
820 * 3) Asserts that there is no selection and that the panel closed. 834 * 3) Asserts that there is no selection and that the panel closed.
821 * @throws InterruptedException 835 * @throws InterruptedException
822 */ 836 */
823 private void waitForGestureToClosePanelAndAssertNoSelection() throws Interru ptedException { 837 private void waitForGestureToClosePanelAndAssertNoSelection() throws Interru ptedException {
824 waitForGestureProcessing(); 838 waitForGestureProcessing();
825 waitForPanelToClose(); 839 waitForPanelToClose();
826 assertPanelClosedOrUndefined(); 840 assertPanelClosedOrUndefined();
827 assertNull(getSelectedText()); 841 Assert.assertNull(getSelectedText());
828 } 842 }
829 843
830 /** 844 /**
831 * Waits for the selection to be empty. 845 * Waits for the selection to be empty.
832 * Use this method any time a test repeatedly establishes and dissolves a se lection to ensure 846 * Use this method any time a test repeatedly establishes and dissolves a se lection to ensure
833 * that the selection has been completely dissolved before simulating the ne xt selection event. 847 * that the selection has been completely dissolved before simulating the ne xt selection event.
834 * This is needed because the renderer's notification of a selection going a way is async, 848 * This is needed because the renderer's notification of a selection going a way is async,
835 * and a subsequent tap may think there's a current selection until it has b een dissolved. 849 * and a subsequent tap may think there's a current selection until it has b een dissolved.
836 */ 850 */
837 private void waitForSelectionEmpty() { 851 private void waitForSelectionEmpty() {
(...skipping 20 matching lines...) Expand all
858 // short that this shouldn't conflict with tap refinement by the user. 872 // short that this shouldn't conflict with tap refinement by the user.
859 Thread.sleep(ViewConfiguration.getDoubleTapTimeout()); 873 Thread.sleep(ViewConfiguration.getDoubleTapTimeout());
860 } 874 }
861 875
862 /** 876 /**
863 * Generate a fling sequence from the given start/end X,Y percentages, for t he given steps. 877 * Generate a fling sequence from the given start/end X,Y percentages, for t he given steps.
864 * Works in either landscape or portrait orientation. 878 * Works in either landscape or portrait orientation.
865 */ 879 */
866 private void fling(float startX, float startY, float endX, float endY, int s tepCount) { 880 private void fling(float startX, float startY, float endX, float endY, int s tepCount) {
867 Point size = new Point(); 881 Point size = new Point();
868 getActivity().getWindowManager().getDefaultDisplay().getSize(size); 882 mActivityTestRule.getActivity().getWindowManager().getDefaultDisplay().g etSize(size);
869 float dragStartX = size.x * startX; 883 float dragStartX = size.x * startX;
870 float dragEndX = size.x * endX; 884 float dragEndX = size.x * endX;
871 float dragStartY = size.y * startY; 885 float dragStartY = size.y * startY;
872 float dragEndY = size.y * endY; 886 float dragEndY = size.y * endY;
873 long downTime = SystemClock.uptimeMillis(); 887 long downTime = SystemClock.uptimeMillis();
874 dragStart(dragStartX, dragStartY, downTime); 888 TouchCommon.dragStart(mActivityTestRule.getActivity(), dragStartX, dragS tartY, downTime);
875 dragTo(dragStartX, dragEndX, dragStartY, dragEndY, stepCount, downTime); 889 TouchCommon.dragTo(mActivityTestRule.getActivity(), dragStartX, dragEndX , dragStartY,
876 dragEnd(dragEndX, dragEndY, downTime); 890 dragEndY, stepCount, downTime);
891 TouchCommon.dragEnd(mActivityTestRule.getActivity(), dragEndX, dragEndY, downTime);
877 } 892 }
878 893
879 /** 894 /**
880 * Generate a swipe sequence from the given start/end X,Y percentages, for t he given steps. 895 * Generate a swipe sequence from the given start/end X,Y percentages, for t he given steps.
881 * Works in either landscape or portrait orientation. 896 * Works in either landscape or portrait orientation.
882 */ 897 */
883 private void swipe(float startX, float startY, float endX, float endY, int s tepCount) { 898 private void swipe(float startX, float startY, float endX, float endY, int s tepCount) {
884 Point size = new Point(); 899 Point size = new Point();
885 getActivity().getWindowManager().getDefaultDisplay().getSize(size); 900 mActivityTestRule.getActivity().getWindowManager().getDefaultDisplay().g etSize(size);
886 float dragStartX = size.x * startX; 901 float dragStartX = size.x * startX;
887 float dragEndX = size.x * endX; 902 float dragEndX = size.x * endX;
888 float dragStartY = size.y * startY; 903 float dragStartY = size.y * startY;
889 float dragEndY = size.y * endY; 904 float dragEndY = size.y * endY;
890 int halfCount = stepCount / 2; 905 int halfCount = stepCount / 2;
891 long downTime = SystemClock.uptimeMillis(); 906 long downTime = SystemClock.uptimeMillis();
892 dragStart(dragStartX, dragStartY, downTime); 907 TouchCommon.dragStart(mActivityTestRule.getActivity(), dragStartX, dragS tartY, downTime);
893 dragTo(dragStartX, dragEndX, dragStartY, dragEndY, halfCount, downTime); 908 TouchCommon.dragTo(mActivityTestRule.getActivity(), dragStartX, dragEndX , dragStartY,
909 dragEndY, halfCount, downTime);
894 // Generate events in the stationary end position in order to simulate a "pause" in 910 // Generate events in the stationary end position in order to simulate a "pause" in
895 // the movement, therefore preventing this gesture from being interprete d as a fling. 911 // the movement, therefore preventing this gesture from being interprete d as a fling.
896 dragTo(dragEndX, dragEndX, dragEndY, dragEndY, halfCount, downTime); 912 TouchCommon.dragTo(mActivityTestRule.getActivity(), dragEndX, dragEndX, dragEndY, dragEndY,
897 dragEnd(dragEndX, dragEndY, downTime); 913 halfCount, downTime);
914 TouchCommon.dragEnd(mActivityTestRule.getActivity(), dragEndX, dragEndY, downTime);
898 } 915 }
899 916
900 /** 917 /**
901 * Flings the panel up to its expanded state. 918 * Flings the panel up to its expanded state.
902 */ 919 */
903 private void flingPanelUp() { 920 private void flingPanelUp() {
904 // TODO(pedrosimonetti): Consider using a swipe method instead. 921 // TODO(pedrosimonetti): Consider using a swipe method instead.
905 fling(0.5f, 0.95f, 0.5f, 0.55f, 1000); 922 fling(0.5f, 0.95f, 0.5f, 0.55f, 1000);
906 } 923 }
907 924
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
941 // long press and trying to close with the bar peeking, with a long pres s selection 958 // long press and trying to close with the bar peeking, with a long pres s selection
942 // established). 959 // established).
943 tapBasePage(0.9f, 0.35f); 960 tapBasePage(0.9f, 0.35f);
944 waitForPanelToClose(); 961 waitForPanelToClose();
945 } 962 }
946 963
947 /** 964 /**
948 * Taps the base page at the given x, y position. 965 * Taps the base page at the given x, y position.
949 */ 966 */
950 private void tapBasePage(float x, float y) { 967 private void tapBasePage(float x, float y) {
951 View root = getActivity().getWindow().getDecorView().getRootView(); 968 View root = mActivityTestRule.getActivity().getWindow().getDecorView().g etRootView();
952 x *= root.getWidth(); 969 x *= root.getWidth();
953 y *= root.getHeight(); 970 y *= root.getHeight();
954 TouchCommon.singleClickView(root, (int) x, (int) y); 971 TouchCommon.singleClickView(root, (int) x, (int) y);
955 } 972 }
956 973
957 /** 974 /**
958 * Click various places to cause the panel to show, expand, then close. 975 * Click various places to cause the panel to show, expand, then close.
959 */ 976 */
960 private void clickToExpandAndClosePanel() throws InterruptedException, Timeo utException { 977 private void clickToExpandAndClosePanel() throws InterruptedException, Timeo utException {
961 clickWordNode("states"); 978 clickWordNode("states");
962 tapBarToExpandAndClosePanel(); 979 tapBarToExpandAndClosePanel();
963 waitForSelectionEmpty(); 980 waitForSelectionEmpty();
964 } 981 }
965 982
966 /** 983 /**
967 * Tap on the peeking Bar to expand the panel, then taps on the base page to close it. 984 * Tap on the peeking Bar to expand the panel, then taps on the base page to close it.
968 */ 985 */
969 private void tapBarToExpandAndClosePanel() throws InterruptedException { 986 private void tapBarToExpandAndClosePanel() throws InterruptedException {
970 tapPeekingBarToExpandAndAssert(); 987 tapPeekingBarToExpandAndAssert();
971 tapBasePageToClosePanel(); 988 tapBasePageToClosePanel();
972 } 989 }
973 990
974 /** 991 /**
975 * Generate a click in the middle of panel's bar. 992 * Generate a click in the middle of panel's bar.
976 * TODO(donnd): Replace this method with panelBarClick since this appears to be unreliable. 993 * TODO(donnd): Replace this method with panelBarClick since this appears to be unreliable.
977 */ 994 */
978 private void clickPanelBar() { 995 private void clickPanelBar() {
979 View root = getActivity().getWindow().getDecorView().getRootView(); 996 View root = mActivityTestRule.getActivity().getWindow().getDecorView().g etRootView();
980 float tapX = ((mPanel.getOffsetX() + mPanel.getWidth()) / 2f) * mDpToPx; 997 float tapX = ((mPanel.getOffsetX() + mPanel.getWidth()) / 2f) * mDpToPx;
981 float tapY = (mPanel.getOffsetY() + (mPanel.getBarContainerHeight() / 2f )) * mDpToPx; 998 float tapY = (mPanel.getOffsetY() + (mPanel.getBarContainerHeight() / 2f )) * mDpToPx;
982 999
983 TouchCommon.singleClickView(root, (int) tapX, (int) tapY); 1000 TouchCommon.singleClickView(root, (int) tapX, (int) tapY);
984 } 1001 }
985 1002
986 /** 1003 /**
987 * Taps the peeking bar to expand the panel 1004 * Taps the peeking bar to expand the panel
988 */ 1005 */
989 private void tapPeekingBarToExpandAndAssert() throws InterruptedException { 1006 private void tapPeekingBarToExpandAndAssert() throws InterruptedException {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1049 .apply(); 1066 .apply();
1050 } 1067 }
1051 }); 1068 });
1052 } 1069 }
1053 1070
1054 /** 1071 /**
1055 * Force the Panel to handle a click in the Bar. 1072 * Force the Panel to handle a click in the Bar.
1056 * @throws InterruptedException 1073 * @throws InterruptedException
1057 */ 1074 */
1058 private void forcePanelToHandleBarClick() throws InterruptedException { 1075 private void forcePanelToHandleBarClick() throws InterruptedException {
1059 getInstrumentation().runOnMainSync(new Runnable() { 1076 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable( ) {
1060 @Override 1077 @Override
1061 public void run() { 1078 public void run() {
1062 // TODO(donnd): provide better time and x,y data to make this mo re broadly useful. 1079 // TODO(donnd): provide better time and x,y data to make this mo re broadly useful.
1063 mPanel.handleBarClick(0, 0, 0); 1080 mPanel.handleBarClick(0, 0, 0);
1064 } 1081 }
1065 }); 1082 });
1066 } 1083 }
1067 1084
1068 /** 1085 /**
1069 * Force the Panel to close. 1086 * Force the Panel to close.
1070 * @throws InterruptedException 1087 * @throws InterruptedException
1071 */ 1088 */
1072 private void closePanel() throws InterruptedException { 1089 private void closePanel() throws InterruptedException {
1073 getInstrumentation().runOnMainSync(new Runnable() { 1090 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable( ) {
1074 @Override 1091 @Override
1075 public void run() { 1092 public void run() {
1076 mPanel.closePanel(StateChangeReason.UNKNOWN, false); 1093 mPanel.closePanel(StateChangeReason.UNKNOWN, false);
1077 } 1094 }
1078 }); 1095 });
1079 } 1096 }
1080 1097
1081 /** 1098 /**
1082 * Waits for the Action Bar to be visible in response to a selection. 1099 * Waits for the Action Bar to be visible in response to a selection.
1083 */ 1100 */
1084 private void waitForSelectActionBarVisible() throws InterruptedException { 1101 private void waitForSelectActionBarVisible() throws InterruptedException {
1085 assertWaitForSelectActionBarVisible(true); 1102 assertWaitForSelectActionBarVisible(true);
1086 } 1103 }
1087 1104
1088 //========================================================================== ================== 1105 //========================================================================== ==================
1089 // Test Cases 1106 // Test Cases
1090 //========================================================================== ================== 1107 //========================================================================== ==================
1091 1108
1092 /** 1109 /**
1093 * Tests whether the contextual search panel hides when omnibox is clicked. 1110 * Tests whether the contextual search panel hides when omnibox is clicked.
1094 */ 1111 */
1095 //@SmallTest 1112 //@SmallTest
1096 //@Feature({"ContextualSearch"}) 1113 //@Feature({"ContextualSearch"})
1114 @Test
1097 @DisabledTest 1115 @DisabledTest
1098 public void testHidesWhenOmniboxFocused() throws InterruptedException, Timeo utException { 1116 public void testHidesWhenOmniboxFocused() throws InterruptedException, Timeo utException {
1099 clickWordNode("intelligence"); 1117 clickWordNode("intelligence");
1100 1118
1101 assertEquals("Intelligence", mFakeServer.getSearchTermRequested()); 1119 Assert.assertEquals("Intelligence", mFakeServer.getSearchTermRequested() );
1102 fakeResponse(false, 200, "Intelligence", "display-text", "alternate-term ", false); 1120 fakeResponse(false, 200, "Intelligence", "display-text", "alternate-term ", false);
1103 assertContainsParameters("Intelligence", "alternate-term"); 1121 assertContainsParameters("Intelligence", "alternate-term");
1104 waitForPanelToPeek(); 1122 waitForPanelToPeek();
1105 1123
1106 OmniboxTestUtils.toggleUrlBarFocus((UrlBar) getActivity().findViewById(R .id.url_bar), true); 1124 OmniboxTestUtils.toggleUrlBarFocus(
1125 (UrlBar) mActivityTestRule.getActivity().findViewById(R.id.url_b ar), true);
1107 1126
1108 assertPanelClosedOrUndefined(); 1127 assertPanelClosedOrUndefined();
1109 } 1128 }
1110 1129
1111 /** 1130 /**
1112 * Tests the doesContainAWord method. 1131 * Tests the doesContainAWord method.
1113 */ 1132 */
1133 @Test
1114 @SmallTest 1134 @SmallTest
1115 @Feature({"ContextualSearch"}) 1135 @Feature({"ContextualSearch"})
1116 public void testDoesContainAWord() { 1136 public void testDoesContainAWord() {
1117 assertTrue(mSelectionController.doesContainAWord("word")); 1137 Assert.assertTrue(mSelectionController.doesContainAWord("word"));
1118 assertTrue(mSelectionController.doesContainAWord("word ")); 1138 Assert.assertTrue(mSelectionController.doesContainAWord("word "));
1119 assertFalse("Emtpy string should not be considered a word!", 1139 Assert.assertFalse("Emtpy string should not be considered a word!",
1120 mSelectionController.doesContainAWord("")); 1140 mSelectionController.doesContainAWord(""));
1121 assertFalse("Special symbols should not be considered a word!", 1141 Assert.assertFalse("Special symbols should not be considered a word!",
1122 mSelectionController.doesContainAWord("@")); 1142 mSelectionController.doesContainAWord("@"));
1123 assertFalse("White space should not be considered a word", 1143 Assert.assertFalse("White space should not be considered a word",
1124 mSelectionController.doesContainAWord(" ")); 1144 mSelectionController.doesContainAWord(" "));
1125 assertTrue(mSelectionController.doesContainAWord("Q2")); 1145 Assert.assertTrue(mSelectionController.doesContainAWord("Q2"));
1126 assertTrue(mSelectionController.doesContainAWord("123")); 1146 Assert.assertTrue(mSelectionController.doesContainAWord("123"));
1127 } 1147 }
1128 1148
1129 /** 1149 /**
1130 * Tests the isValidSelection method. 1150 * Tests the isValidSelection method.
1131 */ 1151 */
1152 @Test
1132 @SmallTest 1153 @SmallTest
1133 @Feature({"ContextualSearch"}) 1154 @Feature({"ContextualSearch"})
1134 public void testIsValidSelection() { 1155 public void testIsValidSelection() {
1135 StubbedContentViewCore stubbedCvc = new StubbedContentViewCore( 1156 StubbedContentViewCore stubbedCvc =
1136 getActivity().getBaseContext()); 1157 new StubbedContentViewCore(mActivityTestRule.getActivity().getBa seContext());
1137 assertTrue(mSelectionController.isValidSelection("valid", stubbedCvc)); 1158 Assert.assertTrue(mSelectionController.isValidSelection("valid", stubbed Cvc));
1138 assertFalse(mSelectionController.isValidSelection(" ", stubbedCvc)); 1159 Assert.assertFalse(mSelectionController.isValidSelection(" ", stubbedCvc ));
1139 stubbedCvc.setIsFocusedNodeEditableForTest(true); 1160 stubbedCvc.setIsFocusedNodeEditableForTest(true);
1140 assertFalse(mSelectionController.isValidSelection("editable", stubbedCvc )); 1161 Assert.assertFalse(mSelectionController.isValidSelection("editable", stu bbedCvc));
1141 stubbedCvc.setIsFocusedNodeEditableForTest(false); 1162 stubbedCvc.setIsFocusedNodeEditableForTest(false);
1142 String numberString = "0123456789"; 1163 String numberString = "0123456789";
1143 StringBuilder longStringBuilder = new StringBuilder(); 1164 StringBuilder longStringBuilder = new StringBuilder();
1144 for (int i = 0; i < 11; i++) { 1165 for (int i = 0; i < 11; i++) {
1145 longStringBuilder.append(numberString); 1166 longStringBuilder.append(numberString);
1146 } 1167 }
1147 assertTrue(mSelectionController.isValidSelection(numberString, stubbedCv c)); 1168 Assert.assertTrue(mSelectionController.isValidSelection(numberString, st ubbedCvc));
1148 assertFalse(mSelectionController.isValidSelection(longStringBuilder.toSt ring(), 1169 Assert.assertFalse(
1149 stubbedCvc)); 1170 mSelectionController.isValidSelection(longStringBuilder.toString (), stubbedCvc));
1150 } 1171 }
1151 1172
1152 /** 1173 /**
1153 * Tests a simple Tap. 1174 * Tests a simple Tap.
1154 */ 1175 */
1176 @Test
1155 @SmallTest 1177 @SmallTest
1156 @Feature({"ContextualSearch"}) 1178 @Feature({"ContextualSearch"})
1157 public void testTap() throws InterruptedException, TimeoutException { 1179 public void testTap() throws InterruptedException, TimeoutException {
1158 clickWordNode("intelligence"); 1180 clickWordNode("intelligence");
1159 1181
1160 assertEquals("Intelligence", mFakeServer.getSearchTermRequested()); 1182 Assert.assertEquals("Intelligence", mFakeServer.getSearchTermRequested() );
1161 fakeResponse(false, 200, "Intelligence", "display-text", "alternate-term ", false); 1183 fakeResponse(false, 200, "Intelligence", "display-text", "alternate-term ", false);
1162 assertContainsParameters("Intelligence", "alternate-term"); 1184 assertContainsParameters("Intelligence", "alternate-term");
1163 waitForPanelToPeek(); 1185 waitForPanelToPeek();
1164 assertLoadedLowPriorityUrl(); 1186 assertLoadedLowPriorityUrl();
1165 } 1187 }
1166 1188
1167 /** 1189 /**
1168 * Tests a simple Long-Press gesture, without opening the panel. 1190 * Tests a simple Long-Press gesture, without opening the panel.
1169 */ 1191 */
1192 @Test
1170 @SmallTest 1193 @SmallTest
1171 @Feature({"ContextualSearch"}) 1194 @Feature({"ContextualSearch"})
1172 public void testLongPress() throws InterruptedException, TimeoutException { 1195 public void testLongPress() throws InterruptedException, TimeoutException {
1173 longPressNode("states"); 1196 longPressNode("states");
1174 1197
1175 assertNull(mFakeServer.getSearchTermRequested()); 1198 Assert.assertNull(mFakeServer.getSearchTermRequested());
1176 waitForPanelToPeek(); 1199 waitForPanelToPeek();
1177 assertLoadedNoUrl(); 1200 assertLoadedNoUrl();
1178 assertNoContentViewCore(); 1201 assertNoContentViewCore();
1179 } 1202 }
1180 1203
1181 /** 1204 /**
1182 * Tests swiping the overlay open, after an initial tap that activates the p eeking card. 1205 * Tests swiping the overlay open, after an initial tap that activates the p eeking card.
1183 */ 1206 */
1207 @Test
1184 @SmallTest 1208 @SmallTest
1185 @Feature({"ContextualSearch"}) 1209 @Feature({"ContextualSearch"})
1186 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) 1210 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE)
1187 public void testSwipeExpand() throws InterruptedException, TimeoutException { 1211 public void testSwipeExpand() throws InterruptedException, TimeoutException {
1188 assertNoSearchesLoaded(); 1212 assertNoSearchesLoaded();
1189 clickWordNode("intelligence"); 1213 clickWordNode("intelligence");
1190 assertNoSearchesLoaded(); 1214 assertNoSearchesLoaded();
1191 1215
1192 // Fake a search term resolution response. 1216 // Fake a search term resolution response.
1193 fakeResponse(false, 200, "Intelligence", "United States Intelligence", " alternate-term", 1217 fakeResponse(false, 200, "Intelligence", "United States Intelligence", " alternate-term",
1194 false); 1218 false);
1195 assertContainsParameters("Intelligence", "alternate-term"); 1219 assertContainsParameters("Intelligence", "alternate-term");
1196 assertEquals(1, mFakeServer.getLoadedUrlCount()); 1220 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
1197 assertLoadedLowPriorityUrl(); 1221 assertLoadedLowPriorityUrl();
1198 1222
1199 waitForPanelToPeek(); 1223 waitForPanelToPeek();
1200 flingPanelUp(); 1224 flingPanelUp();
1201 waitForPanelToExpand(); 1225 waitForPanelToExpand();
1202 assertEquals(1, mFakeServer.getLoadedUrlCount()); 1226 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
1203 assertLoadedLowPriorityUrl(); 1227 assertLoadedLowPriorityUrl();
1204 } 1228 }
1205 1229
1206 /** 1230 /**
1207 * Tests swiping the overlay open, after an initial long-press that activate s the peeking card, 1231 * Tests swiping the overlay open, after an initial long-press that activate s the peeking card,
1208 * followed by closing the panel. 1232 * followed by closing the panel.
1209 * This test also verifies that we don't create any {@link ContentViewCore} or load any URL 1233 * This test also verifies that we don't create any {@link ContentViewCore} or load any URL
1210 * until the panel is opened. 1234 * until the panel is opened.
1211 */ 1235 */
1236 @Test
1212 @SmallTest 1237 @SmallTest
1213 @Feature({"ContextualSearch"}) 1238 @Feature({"ContextualSearch"})
1214 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) 1239 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE)
1215 public void testLongPressSwipeExpand() throws InterruptedException, TimeoutE xception { 1240 public void testLongPressSwipeExpand() throws InterruptedException, TimeoutE xception {
1216 simulateLongPressSearch("search"); 1241 simulateLongPressSearch("search");
1217 assertNoContentViewCore(); 1242 assertNoContentViewCore();
1218 assertLoadedNoUrl(); 1243 assertLoadedNoUrl();
1219 1244
1220 tapPeekingBarToExpandAndAssert(); 1245 tapPeekingBarToExpandAndAssert();
1221 assertContentViewCoreCreated(); 1246 assertContentViewCoreCreated();
1222 assertLoadedNormalPriorityUrl(); 1247 assertLoadedNormalPriorityUrl();
1223 assertEquals(1, mFakeServer.getLoadedUrlCount()); 1248 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
1224 1249
1225 // tap the base page to close. 1250 // tap the base page to close.
1226 closePanel(); 1251 closePanel();
1227 assertEquals(1, mFakeServer.getLoadedUrlCount()); 1252 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
1228 assertNoContentViewCore(); 1253 assertNoContentViewCore();
1229 } 1254 }
1230 1255
1231 /** 1256 /**
1232 * Tests that only a single low-priority request is issued for a Tap/Open se quence. 1257 * Tests that only a single low-priority request is issued for a Tap/Open se quence.
1233 */ 1258 */
1259 @Test
1234 @SmallTest 1260 @SmallTest
1235 @Feature({"ContextualSearch"}) 1261 @Feature({"ContextualSearch"})
1236 public void testTapCausesOneLowPriorityRequest() throws InterruptedException , TimeoutException { 1262 public void testTapCausesOneLowPriorityRequest() throws InterruptedException , TimeoutException {
1237 mFakeServer.reset(); 1263 mFakeServer.reset();
1238 clickWordNode("states"); 1264 clickWordNode("states");
1239 1265
1240 // We should not make a second-request until we get a good response from the first-request. 1266 // We should not make a second-request until we get a good response from the first-request.
1241 assertLoadedNoUrl(); 1267 assertLoadedNoUrl();
1242 assertEquals(0, mFakeServer.getLoadedUrlCount()); 1268 Assert.assertEquals(0, mFakeServer.getLoadedUrlCount());
1243 fakeResponse(false, 200, "states", "United States Intelligence", "altern ate-term", false); 1269 fakeResponse(false, 200, "states", "United States Intelligence", "altern ate-term", false);
1244 assertLoadedLowPriorityUrl(); 1270 assertLoadedLowPriorityUrl();
1245 assertEquals(1, mFakeServer.getLoadedUrlCount()); 1271 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
1246 1272
1247 // When the second request succeeds, we should not issue a new request. 1273 // When the second request succeeds, we should not issue a new request.
1248 fakeContentViewDidNavigate(false); 1274 fakeContentViewDidNavigate(false);
1249 assertLoadedLowPriorityUrl(); 1275 assertLoadedLowPriorityUrl();
1250 assertEquals(1, mFakeServer.getLoadedUrlCount()); 1276 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
1251 1277
1252 // When the bar opens, we should not make any additional request. 1278 // When the bar opens, we should not make any additional request.
1253 tapPeekingBarToExpandAndAssert(); 1279 tapPeekingBarToExpandAndAssert();
1254 assertLoadedLowPriorityUrl(); 1280 assertLoadedLowPriorityUrl();
1255 assertEquals(1, mFakeServer.getLoadedUrlCount()); 1281 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
1256 assertLoadedLowPriorityUrl(); 1282 assertLoadedLowPriorityUrl();
1257 } 1283 }
1258 1284
1259 /** 1285 /**
1260 * Tests that a failover for a prefetch request is issued after the panel is opened. 1286 * Tests that a failover for a prefetch request is issued after the panel is opened.
1261 */ 1287 */
1288 @Test
1262 @SmallTest 1289 @SmallTest
1263 @Feature({"ContextualSearch"}) 1290 @Feature({"ContextualSearch"})
1264 public void testPrefetchFailoverRequestMadeAfterOpen() 1291 public void testPrefetchFailoverRequestMadeAfterOpen()
1265 throws InterruptedException, TimeoutException { 1292 throws InterruptedException, TimeoutException {
1266 mFakeServer.reset(); 1293 mFakeServer.reset();
1267 clickWordNode("states"); 1294 clickWordNode("states");
1268 1295
1269 // We should not make a SERP request until we get a good response from t he resolve request. 1296 // We should not make a SERP request until we get a good response from t he resolve request.
1270 assertLoadedNoUrl(); 1297 assertLoadedNoUrl();
1271 assertEquals(0, mFakeServer.getLoadedUrlCount()); 1298 Assert.assertEquals(0, mFakeServer.getLoadedUrlCount());
1272 fakeResponse(false, 200, "states", "United States Intelligence", "altern ate-term", false); 1299 fakeResponse(false, 200, "states", "United States Intelligence", "altern ate-term", false);
1273 assertLoadedLowPriorityUrl(); 1300 assertLoadedLowPriorityUrl();
1274 assertEquals(1, mFakeServer.getLoadedUrlCount()); 1301 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
1275 1302
1276 // When the second request fails, we should not automatically issue a ne w request. 1303 // When the second request fails, we should not automatically issue a ne w request.
1277 fakeContentViewDidNavigate(true); 1304 fakeContentViewDidNavigate(true);
1278 assertLoadedLowPriorityUrl(); 1305 assertLoadedLowPriorityUrl();
1279 assertEquals(1, mFakeServer.getLoadedUrlCount()); 1306 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
1280 1307
1281 // Once the bar opens, we make a new request at normal priority. 1308 // Once the bar opens, we make a new request at normal priority.
1282 tapPeekingBarToExpandAndAssert(); 1309 tapPeekingBarToExpandAndAssert();
1283 assertLoadedNormalPriorityUrl(); 1310 assertLoadedNormalPriorityUrl();
1284 assertEquals(2, mFakeServer.getLoadedUrlCount()); 1311 Assert.assertEquals(2, mFakeServer.getLoadedUrlCount());
1285 } 1312 }
1286 1313
1287 /** 1314 /**
1288 * Tests that a live request that fails (for an invalid URL) does a failover to a 1315 * Tests that a live request that fails (for an invalid URL) does a failover to a
1289 * normal priority request once the user triggers the failover by opening th e panel. 1316 * normal priority request once the user triggers the failover by opening th e panel.
1290 */ 1317 */
1318 @Test
1291 @SmallTest 1319 @SmallTest
1292 @Feature({"ContextualSearch"}) 1320 @Feature({"ContextualSearch"})
1293 public void testLivePrefetchFailoverRequestMadeAfterOpen() 1321 public void testLivePrefetchFailoverRequestMadeAfterOpen()
1294 throws InterruptedException, TimeoutException { 1322 throws InterruptedException, TimeoutException {
1295 mFakeServer.reset(); 1323 mFakeServer.reset();
1296 mFakeServer.setLowPriorityPathInvalid(); 1324 mFakeServer.setLowPriorityPathInvalid();
1297 simulateTapSearch("search"); 1325 simulateTapSearch("search");
1298 assertLoadedLowPriorityInvalidUrl(); 1326 assertLoadedLowPriorityInvalidUrl();
1299 assertTrue(mFakeServer.didAttemptLoadInvalidUrl()); 1327 Assert.assertTrue(mFakeServer.didAttemptLoadInvalidUrl());
1300 1328
1301 // we should not automatically issue a new request. 1329 // we should not automatically issue a new request.
1302 assertEquals(1, mFakeServer.getLoadedUrlCount()); 1330 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
1303 1331
1304 // Fake a navigation error if offline. 1332 // Fake a navigation error if offline.
1305 // When connected to the Internet this error may already have happened d ue to actually 1333 // When connected to the Internet this error may already have happened d ue to actually
1306 // trying to load the invalid URL. But on test bots that are not online we need to 1334 // trying to load the invalid URL. But on test bots that are not online we need to
1307 // fake that a navigation happened with an error. See crbug.com/682953 f or details. 1335 // fake that a navigation happened with an error. See crbug.com/682953 f or details.
1308 if (!mManager.isOnline()) { 1336 if (!mManager.isOnline()) {
1309 boolean isFailure = true; 1337 boolean isFailure = true;
1310 fakeContentViewDidNavigate(isFailure); 1338 fakeContentViewDidNavigate(isFailure);
1311 } 1339 }
1312 1340
1313 // Once the bar opens, we make a new request at normal priority. 1341 // Once the bar opens, we make a new request at normal priority.
1314 tapPeekingBarToExpandAndAssert(); 1342 tapPeekingBarToExpandAndAssert();
1315 waitForNormalPriorityUrlLoaded(); 1343 waitForNormalPriorityUrlLoaded();
1316 assertEquals(2, mFakeServer.getLoadedUrlCount()); 1344 Assert.assertEquals(2, mFakeServer.getLoadedUrlCount());
1317 } 1345 }
1318 1346
1319 /** 1347 /**
1320 * Tests a simple Tap with disable-preload set. 1348 * Tests a simple Tap with disable-preload set.
1321 */ 1349 */
1350 @Test
1322 @SmallTest 1351 @SmallTest
1323 @Feature({"ContextualSearch"}) 1352 @Feature({"ContextualSearch"})
1324 public void testTapDisablePreload() throws InterruptedException, TimeoutExce ption { 1353 public void testTapDisablePreload() throws InterruptedException, TimeoutExce ption {
1325 clickWordNode("intelligence"); 1354 clickWordNode("intelligence");
1326 1355
1327 assertSearchTermRequested(); 1356 assertSearchTermRequested();
1328 fakeResponse(false, 200, "Intelligence", "display-text", "alternate-term ", true); 1357 fakeResponse(false, 200, "Intelligence", "display-text", "alternate-term ", true);
1329 assertLoadedNoUrl(); 1358 assertLoadedNoUrl();
1330 waitForPanelToPeek(); 1359 waitForPanelToPeek();
1331 assertLoadedNoUrl(); 1360 assertLoadedNoUrl();
1332 } 1361 }
1333 1362
1334 /** 1363 /**
1335 * Tests that long-press selects text, and a subsequent tap will unselect te xt. 1364 * Tests that long-press selects text, and a subsequent tap will unselect te xt.
1336 */ 1365 */
1366 @Test
1337 @SmallTest 1367 @SmallTest
1338 @Feature({"ContextualSearch"}) 1368 @Feature({"ContextualSearch"})
1339 public void testLongPressGestureSelects() throws InterruptedException, Timeo utException { 1369 public void testLongPressGestureSelects() throws InterruptedException, Timeo utException {
1340 longPressNode("intelligence"); 1370 longPressNode("intelligence");
1341 assertEquals("Intelligence", getSelectedText()); 1371 Assert.assertEquals("Intelligence", getSelectedText());
1342 fakeResponse(false, 200, "Intelligence", "Intelligence", "alternate-term ", false); 1372 fakeResponse(false, 200, "Intelligence", "Intelligence", "alternate-term ", false);
1343 assertContainsParameters("Intelligence", "alternate-term"); 1373 assertContainsParameters("Intelligence", "alternate-term");
1344 waitForPanelToPeek(); 1374 waitForPanelToPeek();
1345 assertLoadedNoUrl(); // No load after long-press until opening panel. 1375 assertLoadedNoUrl(); // No load after long-press until opening panel.
1346 clickNode("question-mark"); 1376 clickNode("question-mark");
1347 waitForGestureProcessing(); 1377 waitForGestureProcessing();
1348 waitForPanelToCloseAndSelectionEmpty(); 1378 waitForPanelToCloseAndSelectionEmpty();
1349 assertNull(getSelectedText()); 1379 Assert.assertNull(getSelectedText());
1350 assertLoadedNoUrl(); 1380 assertLoadedNoUrl();
1351 } 1381 }
1352 1382
1353 /** 1383 /**
1354 * Tests that a Tap gesture selects the expected text. 1384 * Tests that a Tap gesture selects the expected text.
1355 */ 1385 */
1386 @Test
1356 @SmallTest 1387 @SmallTest
1357 @Feature({"ContextualSearch"}) 1388 @Feature({"ContextualSearch"})
1358 public void testTapGestureSelects() throws InterruptedException, TimeoutExce ption { 1389 public void testTapGestureSelects() throws InterruptedException, TimeoutExce ption {
1359 clickWordNode("intelligence"); 1390 clickWordNode("intelligence");
1360 assertEquals("Intelligence", getSelectedText()); 1391 Assert.assertEquals("Intelligence", getSelectedText());
1361 fakeResponse(false, 200, "Intelligence", "Intelligence", "alternate-term ", false); 1392 fakeResponse(false, 200, "Intelligence", "Intelligence", "alternate-term ", false);
1362 assertContainsParameters("Intelligence", "alternate-term"); 1393 assertContainsParameters("Intelligence", "alternate-term");
1363 waitForPanelToPeek(); 1394 waitForPanelToPeek();
1364 assertLoadedLowPriorityUrl(); 1395 assertLoadedLowPriorityUrl();
1365 clickNode("question-mark"); 1396 clickNode("question-mark");
1366 waitForGestureProcessing(); 1397 waitForGestureProcessing();
1367 assertNull(getSelectedText()); 1398 Assert.assertNull(getSelectedText());
1368 } 1399 }
1369 1400
1370 /** 1401 /**
1371 * Tests that a Tap gesture on a special character does not select or show t he panel. 1402 * Tests that a Tap gesture on a special character does not select or show t he panel.
1372 */ 1403 */
1404 @Test
1373 @SmallTest 1405 @SmallTest
1374 @Feature({"ContextualSearch"}) 1406 @Feature({"ContextualSearch"})
1375 public void testTapGestureOnSpecialCharacterDoesntSelect() 1407 public void testTapGestureOnSpecialCharacterDoesntSelect()
1376 throws InterruptedException, TimeoutException { 1408 throws InterruptedException, TimeoutException {
1377 clickNode("question-mark"); 1409 clickNode("question-mark");
1378 waitForGestureProcessing(); 1410 waitForGestureProcessing();
1379 assertNull(getSelectedText()); 1411 Assert.assertNull(getSelectedText());
1380 assertPanelClosedOrUndefined(); 1412 assertPanelClosedOrUndefined();
1381 assertLoadedNoUrl(); 1413 assertLoadedNoUrl();
1382 } 1414 }
1383 1415
1384 /** 1416 /**
1385 * Tests that a Tap gesture followed by scrolling clears the selection. 1417 * Tests that a Tap gesture followed by scrolling clears the selection.
1386 */ 1418 */
1419 @Test
1387 @SmallTest 1420 @SmallTest
1388 @Feature({"ContextualSearch"}) 1421 @Feature({"ContextualSearch"})
1389 public void testTapGestureFollowedByScrollClearsSelection() 1422 public void testTapGestureFollowedByScrollClearsSelection()
1390 throws InterruptedException, TimeoutException { 1423 throws InterruptedException, TimeoutException {
1391 clickWordNode("intelligence"); 1424 clickWordNode("intelligence");
1392 fakeResponse(false, 200, "Intelligence", "Intelligence", "alternate-term ", false); 1425 fakeResponse(false, 200, "Intelligence", "Intelligence", "alternate-term ", false);
1393 assertContainsParameters("Intelligence", "alternate-term"); 1426 assertContainsParameters("Intelligence", "alternate-term");
1394 waitForPanelToPeek(); 1427 waitForPanelToPeek();
1395 assertLoadedLowPriorityUrl(); 1428 assertLoadedLowPriorityUrl();
1396 scrollBasePage(); 1429 scrollBasePage();
1397 assertPanelClosedOrUndefined(); 1430 assertPanelClosedOrUndefined();
1398 assertTrue(TextUtils.isEmpty(mSelectionController.getSelectedText())); 1431 Assert.assertTrue(TextUtils.isEmpty(mSelectionController.getSelectedText ()));
1399 } 1432 }
1400 1433
1401 /** 1434 /**
1402 * Tests that a Tap gesture followed by tapping an invalid character doesn't select. 1435 * Tests that a Tap gesture followed by tapping an invalid character doesn't select.
1403 */ 1436 */
1437 @Test
1404 @SmallTest 1438 @SmallTest
1405 @Feature({"ContextualSearch"}) 1439 @Feature({"ContextualSearch"})
1406 public void testTapGestureFollowedByInvalidTextTapCloses() 1440 public void testTapGestureFollowedByInvalidTextTapCloses()
1407 throws InterruptedException, TimeoutException { 1441 throws InterruptedException, TimeoutException {
1408 clickWordNode("states-far"); 1442 clickWordNode("states-far");
1409 waitForPanelToPeek(); 1443 waitForPanelToPeek();
1410 clickNode("question-mark"); 1444 clickNode("question-mark");
1411 waitForGestureProcessing(); 1445 waitForGestureProcessing();
1412 assertPanelClosedOrUndefined(); 1446 assertPanelClosedOrUndefined();
1413 assertNull(mSelectionController.getSelectedText()); 1447 Assert.assertNull(mSelectionController.getSelectedText());
1414 } 1448 }
1415 1449
1416 /** 1450 /**
1417 * Tests that a Tap gesture followed by tapping a non-text character doesn't select. 1451 * Tests that a Tap gesture followed by tapping a non-text character doesn't select.
1418 * @SmallTest 1452 * @SmallTest
1419 * @Feature({"ContextualSearch"}) 1453 * @Feature({"ContextualSearch"})
1420 * crbug.com/665633 1454 * crbug.com/665633
1421 */ 1455 */
1456 @Test
1422 @DisabledTest 1457 @DisabledTest
1423 public void testTapGestureFollowedByNonTextTap() throws InterruptedException , TimeoutException { 1458 public void testTapGestureFollowedByNonTextTap() throws InterruptedException , TimeoutException {
1424 clickWordNode("states-far"); 1459 clickWordNode("states-far");
1425 waitForPanelToPeek(); 1460 waitForPanelToPeek();
1426 clickNode("button"); 1461 clickNode("button");
1427 waitForPanelToCloseAndSelectionEmpty(); 1462 waitForPanelToCloseAndSelectionEmpty();
1428 } 1463 }
1429 1464
1430 /** 1465 /**
1431 * Tests that a Tap gesture far away toggles selecting text. 1466 * Tests that a Tap gesture far away toggles selecting text.
1432 */ 1467 */
1468 @Test
1433 @SmallTest 1469 @SmallTest
1434 @Feature({"ContextualSearch"}) 1470 @Feature({"ContextualSearch"})
1435 public void testTapGestureFarAwayTogglesSelecting() 1471 public void testTapGestureFarAwayTogglesSelecting()
1436 throws InterruptedException, TimeoutException { 1472 throws InterruptedException, TimeoutException {
1437 clickWordNode("states"); 1473 clickWordNode("states");
1438 assertEquals("States", getSelectedText()); 1474 Assert.assertEquals("States", getSelectedText());
1439 waitForPanelToPeek(); 1475 waitForPanelToPeek();
1440 clickNode("states-far"); 1476 clickNode("states-far");
1441 waitForGestureProcessing(); 1477 waitForGestureProcessing();
1442 assertNull(getSelectedText()); 1478 Assert.assertNull(getSelectedText());
1443 assertPanelClosedOrUndefined(); 1479 assertPanelClosedOrUndefined();
1444 clickNode("states-far"); 1480 clickNode("states-far");
1445 waitForGestureProcessing(); 1481 waitForGestureProcessing();
1446 waitForPanelToPeek(); 1482 waitForPanelToPeek();
1447 assertEquals("States", getSelectedText()); 1483 Assert.assertEquals("States", getSelectedText());
1448 } 1484 }
1449 1485
1450 /** 1486 /**
1451 * Tests that sequential Tap gestures nearby keep selecting. 1487 * Tests that sequential Tap gestures nearby keep selecting.
1452 */ 1488 */
1489 @Test
1453 @SmallTest 1490 @SmallTest
1454 @Feature({"ContextualSearch"}) 1491 @Feature({"ContextualSearch"})
1455 public void testTapGesturesNearbyKeepSelecting() throws InterruptedException , TimeoutException { 1492 public void testTapGesturesNearbyKeepSelecting() throws InterruptedException , TimeoutException {
1456 clickWordNode("states"); 1493 clickWordNode("states");
1457 assertEquals("States", getSelectedText()); 1494 Assert.assertEquals("States", getSelectedText());
1458 waitForPanelToPeek(); 1495 waitForPanelToPeek();
1459 // Avoid issues with double-tap detection by ensuring sequential taps 1496 // Avoid issues with double-tap detection by ensuring sequential taps
1460 // aren't treated as such. Double-tapping can also select words much as 1497 // aren't treated as such. Double-tapping can also select words much as
1461 // longpress, in turn showing the pins and preventing contextual tap 1498 // longpress, in turn showing the pins and preventing contextual tap
1462 // refinement from nearby taps. The double-tap timeout is sufficiently 1499 // refinement from nearby taps. The double-tap timeout is sufficiently
1463 // short that this shouldn't conflict with tap refinement by the user. 1500 // short that this shouldn't conflict with tap refinement by the user.
1464 Thread.sleep(ViewConfiguration.getDoubleTapTimeout()); 1501 Thread.sleep(ViewConfiguration.getDoubleTapTimeout());
1465 // Because sequential taps never hide the bar, we we can't wait for it t o peek. 1502 // Because sequential taps never hide the bar, we we can't wait for it t o peek.
1466 // Instead we use clickNode (which doesn't wait) instead of clickWordNod e and wait 1503 // Instead we use clickNode (which doesn't wait) instead of clickWordNod e and wait
1467 // for the selection to change. 1504 // for the selection to change.
1468 clickNode("states-near"); 1505 clickNode("states-near");
1469 waitForSelectionToBe("StatesNear"); 1506 waitForSelectionToBe("StatesNear");
1470 Thread.sleep(ViewConfiguration.getDoubleTapTimeout()); 1507 Thread.sleep(ViewConfiguration.getDoubleTapTimeout());
1471 clickNode("states"); 1508 clickNode("states");
1472 waitForSelectionToBe("States"); 1509 waitForSelectionToBe("States");
1473 } 1510 }
1474 1511
1475 /** 1512 /**
1476 * Tests that a long-press gesture followed by scrolling does not clear the selection. 1513 * Tests that a long-press gesture followed by scrolling does not clear the selection.
1477 */ 1514 */
1515 @Test
1478 @SmallTest 1516 @SmallTest
1479 @Feature({"ContextualSearch"}) 1517 @Feature({"ContextualSearch"})
1480 public void testLongPressGestureFollowedByScrollMaintainsSelection() 1518 public void testLongPressGestureFollowedByScrollMaintainsSelection()
1481 throws InterruptedException, TimeoutException { 1519 throws InterruptedException, TimeoutException {
1482 longPressNode("intelligence"); 1520 longPressNode("intelligence");
1483 waitForPanelToPeek(); 1521 waitForPanelToPeek();
1484 scrollBasePage(); 1522 scrollBasePage();
1485 assertPanelClosedOrUndefined(); 1523 assertPanelClosedOrUndefined();
1486 assertEquals("Intelligence", getSelectedText()); 1524 Assert.assertEquals("Intelligence", getSelectedText());
1487 assertLoadedNoUrl(); 1525 assertLoadedNoUrl();
1488 } 1526 }
1489 1527
1490 /** 1528 /**
1491 * Tests that a long-press gesture followed by a tap does not select. 1529 * Tests that a long-press gesture followed by a tap does not select.
1492 */ 1530 */
1531 @Test
1493 @SmallTest 1532 @SmallTest
1494 @Feature({"ContextualSearch"}) 1533 @Feature({"ContextualSearch"})
1495 public void testLongPressGestureFollowedByTapDoesntSelect() 1534 public void testLongPressGestureFollowedByTapDoesntSelect()
1496 throws InterruptedException, TimeoutException { 1535 throws InterruptedException, TimeoutException {
1497 longPressNode("intelligence"); 1536 longPressNode("intelligence");
1498 waitForPanelToPeek(); 1537 waitForPanelToPeek();
1499 clickWordNode("states-far"); 1538 clickWordNode("states-far");
1500 waitForGestureToClosePanelAndAssertNoSelection(); 1539 waitForGestureToClosePanelAndAssertNoSelection();
1501 assertLoadedNoUrl(); 1540 assertLoadedNoUrl();
1502 } 1541 }
1503 1542
1504 /** 1543 /**
1505 * Tests that the panel closes when its base page crashes. 1544 * Tests that the panel closes when its base page crashes.
1506 */ 1545 */
1546 @Test
1507 @SmallTest 1547 @SmallTest
1508 @Feature({"ContextualSearch"}) 1548 @Feature({"ContextualSearch"})
1509 public void testContextualSearchDismissedOnForegroundTabCrash() 1549 public void testContextualSearchDismissedOnForegroundTabCrash()
1510 throws InterruptedException, TimeoutException { 1550 throws InterruptedException, TimeoutException {
1511 clickWordNode("states"); 1551 clickWordNode("states");
1512 assertEquals("States", getSelectedText()); 1552 Assert.assertEquals("States", getSelectedText());
1513 waitForPanelToPeek(); 1553 waitForPanelToPeek();
1514 1554
1515 ThreadUtils.runOnUiThread(new Runnable() { 1555 ThreadUtils.runOnUiThread(new Runnable() {
1516 @Override 1556 @Override
1517 public void run() { 1557 public void run() {
1518 getActivity().getActivityTab().simulateRendererKilledForTesting( true); 1558 mActivityTestRule.getActivity().getActivityTab().simulateRendere rKilledForTesting(
1559 true);
1519 } 1560 }
1520 }); 1561 });
1521 1562
1522 // Give the panelState time to change 1563 // Give the panelState time to change
1523 CriteriaHelper.pollInstrumentationThread(new Criteria(){ 1564 CriteriaHelper.pollInstrumentationThread(new Criteria(){
1524 @Override 1565 @Override
1525 public boolean isSatisfied() { 1566 public boolean isSatisfied() {
1526 PanelState panelState = mPanel.getPanelState(); 1567 PanelState panelState = mPanel.getPanelState();
1527 return panelState != PanelState.PEEKED; 1568 return panelState != PanelState.PEEKED;
1528 } 1569 }
1529 }); 1570 });
1530 1571
1531 assertPanelClosedOrUndefined(); 1572 assertPanelClosedOrUndefined();
1532 } 1573 }
1533 1574
1534 /** 1575 /**
1535 * Test the the panel does not close when some background tab crashes. 1576 * Test the the panel does not close when some background tab crashes.
1536 */ 1577 */
1578 @Test
1537 @SmallTest 1579 @SmallTest
1538 @Feature({"ContextualSearch"}) 1580 @Feature({"ContextualSearch"})
1539 public void testContextualSearchNotDismissedOnBackgroundTabCrash() 1581 public void testContextualSearchNotDismissedOnBackgroundTabCrash()
1540 throws InterruptedException, TimeoutException { 1582 throws InterruptedException, TimeoutException {
1541 ChromeTabUtils.newTabFromMenu(getInstrumentation(), 1583 ChromeTabUtils.newTabFromMenu(InstrumentationRegistry.getInstrumentation (),
1542 (ChromeTabbedActivity) getActivity()); 1584 (ChromeTabbedActivity) mActivityTestRule.getActivity());
1543 final Tab tab2 = TabModelUtils.getCurrentTab(getActivity().getCurrentTab Model()); 1585 final Tab tab2 =
1586 TabModelUtils.getCurrentTab(mActivityTestRule.getActivity().getC urrentTabModel());
1544 1587
1545 // TODO(donnd): consider using runOnUiThreadBlocking, won't need to wait ForIdleSync? 1588 // TODO(donnd): consider using runOnUiThreadBlocking, won't need to wait ForIdleSync?
1546 ThreadUtils.runOnUiThread(new Runnable() { 1589 ThreadUtils.runOnUiThread(new Runnable() {
1547 @Override 1590 @Override
1548 public void run() { 1591 public void run() {
1549 TabModelUtils.setIndex(getActivity().getCurrentTabModel(), 0); 1592 TabModelUtils.setIndex(mActivityTestRule.getActivity().getCurren tTabModel(), 0);
1550 } 1593 }
1551 }); 1594 });
1552 getInstrumentation().waitForIdleSync(); 1595 InstrumentationRegistry.getInstrumentation().waitForIdleSync();
1553 1596
1554 clickWordNode("states"); 1597 clickWordNode("states");
1555 assertEquals("States", getSelectedText()); 1598 Assert.assertEquals("States", getSelectedText());
1556 waitForPanelToPeek(); 1599 waitForPanelToPeek();
1557 1600
1558 ThreadUtils.runOnUiThread(new Runnable() { 1601 ThreadUtils.runOnUiThread(new Runnable() {
1559 @Override 1602 @Override
1560 public void run() { 1603 public void run() {
1561 tab2.simulateRendererKilledForTesting(false); 1604 tab2.simulateRendererKilledForTesting(false);
1562 } 1605 }
1563 }); 1606 });
1564 1607
1565 waitForPanelToPeek(); 1608 waitForPanelToPeek();
1566 } 1609 }
1567 1610
1568 /* 1611 /*
1569 * Test that tapping on the Search Bar before having a resolved search term does not 1612 * Test that tapping on the Search Bar before having a resolved search term does not
1570 * promote to a tab, and that after the resolution it does promote to a tab. 1613 * promote to a tab, and that after the resolution it does promote to a tab.
1571 */ 1614 */
1615 @Test
1572 @SmallTest 1616 @SmallTest
1573 @Feature({"ContextualSearch"}) 1617 @Feature({"ContextualSearch"})
1574 public void testTapSearchBarPromotesToTab() throws InterruptedException, Tim eoutException { 1618 public void testTapSearchBarPromotesToTab() throws InterruptedException, Tim eoutException {
1575 // -------- SET UP --------- 1619 // -------- SET UP ---------
1576 // Track Tab creation with this helper. 1620 // Track Tab creation with this helper.
1577 final CallbackHelper tabCreatedHelper = new CallbackHelper(); 1621 final CallbackHelper tabCreatedHelper = new CallbackHelper();
1578 int tabCreatedHelperCallCount = tabCreatedHelper.getCallCount(); 1622 int tabCreatedHelperCallCount = tabCreatedHelper.getCallCount();
1579 TabModelSelectorObserver observer = new EmptyTabModelSelectorObserver() { 1623 TabModelSelectorObserver observer = new EmptyTabModelSelectorObserver() {
1580 @Override 1624 @Override
1581 public void onNewTabCreated(Tab tab) { 1625 public void onNewTabCreated(Tab tab) {
1582 tabCreatedHelper.notifyCalled(); 1626 tabCreatedHelper.notifyCalled();
1583 } 1627 }
1584 }; 1628 };
1585 getActivity().getTabModelSelector().addObserver(observer); 1629 mActivityTestRule.getActivity().getTabModelSelector().addObserver(observ er);
1586 1630
1587 // -------- TEST --------- 1631 // -------- TEST ---------
1588 // Start a slow-resolve search and maximize the Panel. 1632 // Start a slow-resolve search and maximize the Panel.
1589 simulateSlowResolveSearch("search"); 1633 simulateSlowResolveSearch("search");
1590 flingPanelUpToTop(); 1634 flingPanelUpToTop();
1591 waitForPanelToMaximize(); 1635 waitForPanelToMaximize();
1592 1636
1593 // A click in the Bar should not promote since we are still waiting to R esolve. 1637 // A click in the Bar should not promote since we are still waiting to R esolve.
1594 forcePanelToHandleBarClick(); 1638 forcePanelToHandleBarClick();
1595 1639
1596 // Assert that the Panel is still maximized. 1640 // Assert that the Panel is still maximized.
1597 waitForPanelToMaximize(); 1641 waitForPanelToMaximize();
1598 1642
1599 // Let the Search Term Resolution finish. 1643 // Let the Search Term Resolution finish.
1600 simulateSlowResolveFinished(); 1644 simulateSlowResolveFinished();
1601 1645
1602 // Now a click in the Bar should promote to a separate tab. 1646 // Now a click in the Bar should promote to a separate tab.
1603 forcePanelToHandleBarClick(); 1647 forcePanelToHandleBarClick();
1604 1648
1605 // The Panel should now be closed. 1649 // The Panel should now be closed.
1606 waitForPanelToClose(); 1650 waitForPanelToClose();
1607 1651
1608 // Make sure a tab was created. 1652 // Make sure a tab was created.
1609 tabCreatedHelper.waitForCallback(tabCreatedHelperCallCount); 1653 tabCreatedHelper.waitForCallback(tabCreatedHelperCallCount);
1610 1654
1611 // -------- CLEAN UP --------- 1655 // -------- CLEAN UP ---------
1612 getActivity().getTabModelSelector().removeObserver(observer); 1656 mActivityTestRule.getActivity().getTabModelSelector().removeObserver(obs erver);
1613 } 1657 }
1614 1658
1615 /** 1659 /**
1616 * Tests that a Tap gesture on an element with an ARIA role does not trigger . 1660 * Tests that a Tap gesture on an element with an ARIA role does not trigger .
1617 */ 1661 */
1662 @Test
1618 @SmallTest 1663 @SmallTest
1619 @Feature({"ContextualSearch"}) 1664 @Feature({"ContextualSearch"})
1620 public void testTapOnRoleIgnored() throws InterruptedException, TimeoutExcep tion { 1665 public void testTapOnRoleIgnored() throws InterruptedException, TimeoutExcep tion {
1621 PanelState initialState = mPanel.getPanelState(); 1666 PanelState initialState = mPanel.getPanelState();
1622 clickNode("role"); 1667 clickNode("role");
1623 assertPanelStillInState(initialState); 1668 assertPanelStillInState(initialState);
1624 } 1669 }
1625 1670
1626 /** 1671 /**
1627 * Tests that a Tap gesture on an element with an ARIA attribute does not tr igger. 1672 * Tests that a Tap gesture on an element with an ARIA attribute does not tr igger.
1628 * http://crbug.com/542874 1673 * http://crbug.com/542874
1629 */ 1674 */
1675 @Test
1630 @SmallTest 1676 @SmallTest
1631 @Feature({"ContextualSearch"}) 1677 @Feature({"ContextualSearch"})
1632 public void testTapOnARIAIgnored() throws InterruptedException, TimeoutExcep tion { 1678 public void testTapOnARIAIgnored() throws InterruptedException, TimeoutExcep tion {
1633 PanelState initialState = mPanel.getPanelState(); 1679 PanelState initialState = mPanel.getPanelState();
1634 clickNode("aria"); 1680 clickNode("aria");
1635 assertPanelStillInState(initialState); 1681 assertPanelStillInState(initialState);
1636 } 1682 }
1637 1683
1638 /** 1684 /**
1639 * Tests that a Tap gesture on an element that is focusable does not trigger . 1685 * Tests that a Tap gesture on an element that is focusable does not trigger .
1640 */ 1686 */
1687 @Test
1641 @SmallTest 1688 @SmallTest
1642 @Feature({"ContextualSearch"}) 1689 @Feature({"ContextualSearch"})
1643 public void testTapOnFocusableIgnored() throws InterruptedException, Timeout Exception { 1690 public void testTapOnFocusableIgnored() throws InterruptedException, Timeout Exception {
1644 PanelState initialState = mPanel.getPanelState(); 1691 PanelState initialState = mPanel.getPanelState();
1645 clickNode("focusable"); 1692 clickNode("focusable");
1646 assertPanelStillInState(initialState); 1693 assertPanelStillInState(initialState);
1647 } 1694 }
1648 1695
1649 /** 1696 /**
1650 * Tests that taps can be resolve and prefetch limited for decided users. 1697 * Tests that taps can be resolve and prefetch limited for decided users.
1651 */ 1698 */
1699 @Test
1652 @SmallTest 1700 @SmallTest
1653 @Feature({"ContextualSearch"}) 1701 @Feature({"ContextualSearch"})
1654 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) 1702 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE)
1655 @DisableIf.Build(supported_abis_includes = "arm64-v8a", message = "crbug.com /596533") 1703 @DisableIf.Build(supported_abis_includes = "arm64-v8a", message = "crbug.com /596533")
1656 public void testTapLimitForDecided() throws InterruptedException, TimeoutExc eption { 1704 public void testTapLimitForDecided() throws InterruptedException, TimeoutExc eption {
1657 mPolicy.setTapLimitForDecidedForTesting(2); 1705 mPolicy.setTapLimitForDecidedForTesting(2);
1658 clickToTriggerPrefetch(); 1706 clickToTriggerPrefetch();
1659 assertSearchTermRequested(); 1707 assertSearchTermRequested();
1660 assertLoadedLowPriorityUrl(); 1708 assertLoadedLowPriorityUrl();
1661 clickToTriggerPrefetch(); 1709 clickToTriggerPrefetch();
1662 assertSearchTermRequested(); 1710 assertSearchTermRequested();
1663 assertLoadedLowPriorityUrl(); 1711 assertLoadedLowPriorityUrl();
1664 // 3rd click should not resolve or prefetch. 1712 // 3rd click should not resolve or prefetch.
1665 clickToTriggerLimitedPrefetch(); 1713 clickToTriggerLimitedPrefetch();
1666 assertSearchTermNotRequested(); 1714 assertSearchTermNotRequested();
1667 assertLoadedNoUrl(); 1715 assertLoadedNoUrl();
1668 1716
1669 // Expanding the panel should reset the limit. 1717 // Expanding the panel should reset the limit.
1670 clickToExpandAndClosePanel(); 1718 clickToExpandAndClosePanel();
1671 1719
1672 // Click should resolve and prefetch again. 1720 // Click should resolve and prefetch again.
1673 clickToTriggerPrefetch(); 1721 clickToTriggerPrefetch();
1674 assertSearchTermRequested(); 1722 assertSearchTermRequested();
1675 assertLoadedLowPriorityUrl(); 1723 assertLoadedLowPriorityUrl();
1676 } 1724 }
1677 1725
1678 /** 1726 /**
1679 * Tests that taps can be resolve-limited for undecided users. 1727 * Tests that taps can be resolve-limited for undecided users.
1680 */ 1728 */
1729 @Test
1681 @SmallTest 1730 @SmallTest
1682 @Feature({"ContextualSearch"}) 1731 @Feature({"ContextualSearch"})
1683 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) 1732 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE)
1684 @DisableIf.Build(supported_abis_includes = "arm64-v8a", message = "crbug.com /596533") 1733 @DisableIf.Build(supported_abis_includes = "arm64-v8a", message = "crbug.com /596533")
1685 public void testTapLimitForUndecided() throws InterruptedException, TimeoutE xception { 1734 public void testTapLimitForUndecided() throws InterruptedException, TimeoutE xception {
1686 mPolicy.setTapLimitForUndecidedForTesting(2); 1735 mPolicy.setTapLimitForUndecidedForTesting(2);
1687 mPolicy.overrideDecidedStateForTesting(false); 1736 mPolicy.overrideDecidedStateForTesting(false);
1688 1737
1689 clickToTriggerPrefetch(); 1738 clickToTriggerPrefetch();
1690 assertSearchTermRequested(); 1739 assertSearchTermRequested();
(...skipping 12 matching lines...) Expand all
1703 // Click should resolve and prefetch again. 1752 // Click should resolve and prefetch again.
1704 clickToTriggerPrefetch(); 1753 clickToTriggerPrefetch();
1705 assertSearchTermRequested(); 1754 assertSearchTermRequested();
1706 assertLoadedLowPriorityUrl(); 1755 assertLoadedLowPriorityUrl();
1707 } 1756 }
1708 1757
1709 /** 1758 /**
1710 * Tests expanding the panel before the search term has resolved, verifies t hat nothing 1759 * Tests expanding the panel before the search term has resolved, verifies t hat nothing
1711 * loads until the resolve completes and that it's now a normal priority URL . 1760 * loads until the resolve completes and that it's now a normal priority URL .
1712 */ 1761 */
1762 @Test
1713 @SmallTest 1763 @SmallTest
1714 @Feature({"ContextualSearch"}) 1764 @Feature({"ContextualSearch"})
1715 public void testExpandBeforeSearchTermResolution() 1765 public void testExpandBeforeSearchTermResolution()
1716 throws InterruptedException, TimeoutException { 1766 throws InterruptedException, TimeoutException {
1717 clickWordNode("states"); 1767 clickWordNode("states");
1718 assertNoContentViewCore(); 1768 assertNoContentViewCore();
1719 1769
1720 // Expanding before the search term resolves should not load anything. 1770 // Expanding before the search term resolves should not load anything.
1721 tapPeekingBarToExpandAndAssert(); 1771 tapPeekingBarToExpandAndAssert();
1722 assertLoadedNoUrl(); 1772 assertLoadedNoUrl();
1723 1773
1724 // Once the response comes in, it should load. 1774 // Once the response comes in, it should load.
1725 fakeResponse(false, 200, "states", "United States Intelligence", "altern ate-term", false); 1775 fakeResponse(false, 200, "states", "United States Intelligence", "altern ate-term", false);
1726 assertContainsParameters("states", "alternate-term"); 1776 assertContainsParameters("states", "alternate-term");
1727 assertLoadedNormalPriorityUrl(); 1777 assertLoadedNormalPriorityUrl();
1728 assertContentViewCoreCreated(); 1778 assertContentViewCoreCreated();
1729 assertContentViewCoreVisible(); 1779 assertContentViewCoreVisible();
1730 } 1780 }
1731 1781
1732 /** 1782 /**
1733 * Tests that an error from the Search Term Resolution request causes a fall back to a 1783 * Tests that an error from the Search Term Resolution request causes a fall back to a
1734 * search request for the literal selection. 1784 * search request for the literal selection.
1735 */ 1785 */
1786 @Test
1736 @SmallTest 1787 @SmallTest
1737 @Feature({"ContextualSearch"}) 1788 @Feature({"ContextualSearch"})
1738 public void testSearchTermResolutionError() throws InterruptedException, Tim eoutException { 1789 public void testSearchTermResolutionError() throws InterruptedException, Tim eoutException {
1739 clickWordNode("states"); 1790 clickWordNode("states");
1740 assertSearchTermRequested(); 1791 assertSearchTermRequested();
1741 fakeResponse(false, 403, "", "", "", false); 1792 fakeResponse(false, 403, "", "", "", false);
1742 assertLoadedNoUrl(); 1793 assertLoadedNoUrl();
1743 tapPeekingBarToExpandAndAssert(); 1794 tapPeekingBarToExpandAndAssert();
1744 assertLoadedNormalPriorityUrl(); 1795 assertLoadedNormalPriorityUrl();
1745 } 1796 }
1746 1797
1747 // ------------------------------------------------------------------------- ------------------- 1798 // ------------------------------------------------------------------------- -------------------
1748 // HTTP/HTTPS for Undecided/Decided users. 1799 // HTTP/HTTPS for Undecided/Decided users.
1749 // ------------------------------------------------------------------------- ------------------- 1800 // ------------------------------------------------------------------------- -------------------
1750 1801
1751 /** 1802 /**
1752 * Tests that HTTPS does not resolve in the opt-out model before the user ac cepts. 1803 * Tests that HTTPS does not resolve in the opt-out model before the user ac cepts.
1753 */ 1804 */
1805 @Test
1754 @SmallTest 1806 @SmallTest
1755 @Feature({"ContextualSearch"}) 1807 @Feature({"ContextualSearch"})
1756 public void testHttpsBeforeAcceptForOptOut() throws InterruptedException, Ti meoutException { 1808 public void testHttpsBeforeAcceptForOptOut() throws InterruptedException, Ti meoutException {
1757 mPolicy.overrideDecidedStateForTesting(false); 1809 mPolicy.overrideDecidedStateForTesting(false);
1758 mFakeServer.setShouldUseHttps(true); 1810 mFakeServer.setShouldUseHttps(true);
1759 1811
1760 clickWordNode("states"); 1812 clickWordNode("states");
1761 assertLoadedLowPriorityUrl(); 1813 assertLoadedLowPriorityUrl();
1762 assertSearchTermNotRequested(); 1814 assertSearchTermNotRequested();
1763 } 1815 }
1764 1816
1765 /** 1817 /**
1766 * Tests that HTTPS does resolve in the opt-out model after the user accepts . 1818 * Tests that HTTPS does resolve in the opt-out model after the user accepts .
1767 */ 1819 */
1820 @Test
1768 @SmallTest 1821 @SmallTest
1769 @Feature({"ContextualSearch"}) 1822 @Feature({"ContextualSearch"})
1770 public void testHttpsAfterAcceptForOptOut() throws InterruptedException, Tim eoutException { 1823 public void testHttpsAfterAcceptForOptOut() throws InterruptedException, Tim eoutException {
1771 mPolicy.overrideDecidedStateForTesting(true); 1824 mPolicy.overrideDecidedStateForTesting(true);
1772 mFakeServer.setShouldUseHttps(true); 1825 mFakeServer.setShouldUseHttps(true);
1773 1826
1774 clickToResolveAndAssertPrefetch(); 1827 clickToResolveAndAssertPrefetch();
1775 } 1828 }
1776 1829
1777 /** 1830 /**
1778 * Tests that HTTP does resolve in the opt-out model before the user accepts . 1831 * Tests that HTTP does resolve in the opt-out model before the user accepts .
1779 */ 1832 */
1833 @Test
1780 @SmallTest 1834 @SmallTest
1781 @Feature({"ContextualSearch"}) 1835 @Feature({"ContextualSearch"})
1782 public void testHttpBeforeAcceptForOptOut() throws InterruptedException, Tim eoutException { 1836 public void testHttpBeforeAcceptForOptOut() throws InterruptedException, Tim eoutException {
1783 mPolicy.overrideDecidedStateForTesting(false); 1837 mPolicy.overrideDecidedStateForTesting(false);
1784 1838
1785 clickToResolveAndAssertPrefetch(); 1839 clickToResolveAndAssertPrefetch();
1786 } 1840 }
1787 1841
1788 /** 1842 /**
1789 * Tests that HTTP does resolve in the opt-out model after the user accepts. 1843 * Tests that HTTP does resolve in the opt-out model after the user accepts.
1790 */ 1844 */
1845 @Test
1791 @SmallTest 1846 @SmallTest
1792 @Feature({"ContextualSearch"}) 1847 @Feature({"ContextualSearch"})
1793 public void testHttpAfterAcceptForOptOut() throws InterruptedException, Time outException { 1848 public void testHttpAfterAcceptForOptOut() throws InterruptedException, Time outException {
1794 mPolicy.overrideDecidedStateForTesting(true); 1849 mPolicy.overrideDecidedStateForTesting(true);
1795 1850
1796 clickToResolveAndAssertPrefetch(); 1851 clickToResolveAndAssertPrefetch();
1797 } 1852 }
1798 1853
1799 // ------------------------------------------------------------------------- ------------------- 1854 // ------------------------------------------------------------------------- -------------------
1800 // App Menu Suppression 1855 // App Menu Suppression
1801 // ------------------------------------------------------------------------- ------------------- 1856 // ------------------------------------------------------------------------- -------------------
1802 1857
1803 /** 1858 /**
1804 * Simulates pressing the App Menu button. 1859 * Simulates pressing the App Menu button.
1805 */ 1860 */
1806 private void pressAppMenuKey() { 1861 private void pressAppMenuKey() {
1807 pressKey(KeyEvent.KEYCODE_MENU); 1862 pressKey(KeyEvent.KEYCODE_MENU);
1808 } 1863 }
1809 1864
1810 /** 1865 /**
1811 * Asserts whether the App Menu is visible. 1866 * Asserts whether the App Menu is visible.
1812 */ 1867 */
1813 private void assertAppMenuVisibility(final boolean isVisible) { 1868 private void assertAppMenuVisibility(final boolean isVisible) {
1814 CriteriaHelper.pollInstrumentationThread( 1869 CriteriaHelper.pollInstrumentationThread(
1815 Criteria.equals(isVisible, new Callable<Boolean>() { 1870 Criteria.equals(isVisible, new Callable<Boolean>() {
1816 @Override 1871 @Override
1817 public Boolean call() { 1872 public Boolean call() {
1818 return getActivity().getAppMenuHandler().isAppMenuShowin g(); 1873 return mActivityTestRule.getActivity()
1874 .getAppMenuHandler()
1875 .isAppMenuShowing();
1819 } 1876 }
1820 })); 1877 }));
1821 } 1878 }
1822 1879
1823 /** 1880 /**
1824 * Tests that the App Menu gets suppressed when Search Panel is expanded. 1881 * Tests that the App Menu gets suppressed when Search Panel is expanded.
1825 */ 1882 */
1883 @Test
1826 @SmallTest 1884 @SmallTest
1827 @Feature({"ContextualSearch"}) 1885 @Feature({"ContextualSearch"})
1828 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) 1886 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE)
1829 @DisableIf.Build(supported_abis_includes = "arm64-v8a", message = "crbug.com /596533") 1887 @DisableIf.Build(supported_abis_includes = "arm64-v8a", message = "crbug.com /596533")
1830 public void testAppMenuSuppressedWhenExpanded() throws InterruptedException, TimeoutException { 1888 public void testAppMenuSuppressedWhenExpanded() throws InterruptedException, TimeoutException {
1831 clickWordNode("states"); 1889 clickWordNode("states");
1832 tapPeekingBarToExpandAndAssert(); 1890 tapPeekingBarToExpandAndAssert();
1833 1891
1834 pressAppMenuKey(); 1892 pressAppMenuKey();
1835 assertAppMenuVisibility(false); 1893 assertAppMenuVisibility(false);
1836 1894
1837 tapBasePageToClosePanel(); 1895 tapBasePageToClosePanel();
1838 1896
1839 pressAppMenuKey(); 1897 pressAppMenuKey();
1840 assertAppMenuVisibility(true); 1898 assertAppMenuVisibility(true);
1841 } 1899 }
1842 1900
1843 /** 1901 /**
1844 * Tests that the App Menu gets suppressed when Search Panel is maximized. 1902 * Tests that the App Menu gets suppressed when Search Panel is maximized.
1845 */ 1903 */
1904 @Test
1846 @SmallTest 1905 @SmallTest
1847 @Feature({"ContextualSearch"}) 1906 @Feature({"ContextualSearch"})
1848 public void testAppMenuSuppressedWhenMaximized() throws InterruptedException , TimeoutException { 1907 public void testAppMenuSuppressedWhenMaximized() throws InterruptedException , TimeoutException {
1849 clickWordNode("states"); 1908 clickWordNode("states");
1850 flingPanelUpToTop(); 1909 flingPanelUpToTop();
1851 waitForPanelToMaximize(); 1910 waitForPanelToMaximize();
1852 1911
1853 pressAppMenuKey(); 1912 pressAppMenuKey();
1854 assertAppMenuVisibility(false); 1913 assertAppMenuVisibility(false);
1855 1914
1856 pressBackButton(); 1915 pressBackButton();
1857 waitForPanelToClose(); 1916 waitForPanelToClose();
1858 1917
1859 pressAppMenuKey(); 1918 pressAppMenuKey();
1860 assertAppMenuVisibility(true); 1919 assertAppMenuVisibility(true);
1861 } 1920 }
1862 1921
1863 // ------------------------------------------------------------------------- ------------------- 1922 // ------------------------------------------------------------------------- -------------------
1864 // Promo tap count - the number of promo peeks. 1923 // Promo tap count - the number of promo peeks.
1865 // ------------------------------------------------------------------------- ------------------- 1924 // ------------------------------------------------------------------------- -------------------
1866 1925
1867 /** 1926 /**
1868 * Tests the TapN-promo-limit feature, which disables the promo on tap after N taps if 1927 * Tests the TapN-promo-limit feature, which disables the promo on tap after N taps if
1869 * the user has never ever opened the panel. Once the panel is opened, this limiting-feature 1928 * the user has never ever opened the panel. Once the panel is opened, this limiting-feature
1870 * is permanently disabled. 1929 * is permanently disabled.
1871 */ 1930 */
1931 @Test
1872 @SmallTest 1932 @SmallTest
1873 @Feature({"ContextualSearch"}) 1933 @Feature({"ContextualSearch"})
1874 public void testPromoTapCount() throws InterruptedException, TimeoutExceptio n { 1934 public void testPromoTapCount() throws InterruptedException, TimeoutExceptio n {
1875 mPolicy.setPromoTapTriggeredLimitForTesting(2); 1935 mPolicy.setPromoTapTriggeredLimitForTesting(2);
1876 mPolicy.overrideDecidedStateForTesting(false); 1936 mPolicy.overrideDecidedStateForTesting(false);
1877 assertTapPromoCounterEnabledAt(0); 1937 assertTapPromoCounterEnabledAt(0);
1878 1938
1879 // A simple Tap should change the counter. 1939 // A simple Tap should change the counter.
1880 clickToTriggerPrefetch(); 1940 clickToTriggerPrefetch();
1881 assertTapPromoCounterEnabledAt(1); 1941 assertTapPromoCounterEnabledAt(1);
(...skipping 24 matching lines...) Expand all
1906 assertTapPromoCounterDisabledAt(2); 1966 assertTapPromoCounterDisabledAt(2);
1907 } 1967 }
1908 1968
1909 // ------------------------------------------------------------------------- ------------------- 1969 // ------------------------------------------------------------------------- -------------------
1910 // Promo open count 1970 // Promo open count
1911 // ------------------------------------------------------------------------- ------------------- 1971 // ------------------------------------------------------------------------- -------------------
1912 1972
1913 /** 1973 /**
1914 * Tests the promo open counter. 1974 * Tests the promo open counter.
1915 */ 1975 */
1976 @Test
1916 @SmallTest 1977 @SmallTest
1917 @Feature({"ContextualSearch"}) 1978 @Feature({"ContextualSearch"})
1918 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) 1979 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE)
1919 @DisableIf.Build(supported_abis_includes = "arm64-v8a", message = "crbug.com /596533") 1980 @DisableIf.Build(supported_abis_includes = "arm64-v8a", message = "crbug.com /596533")
1920 public void testPromoOpenCountForUndecided() throws InterruptedException, Ti meoutException { 1981 public void testPromoOpenCountForUndecided() throws InterruptedException, Ti meoutException {
1921 mPolicy.overrideDecidedStateForTesting(false); 1982 mPolicy.overrideDecidedStateForTesting(false);
1922 1983
1923 // A simple click / resolve / prefetch sequence without open should not change the counter. 1984 // A simple click / resolve / prefetch sequence without open should not change the counter.
1924 clickToTriggerPrefetch(); 1985 clickToTriggerPrefetch();
1925 assertEquals(0, mPolicy.getPromoOpenCount()); 1986 Assert.assertEquals(0, mPolicy.getPromoOpenCount());
1926 1987
1927 // An open should count. 1988 // An open should count.
1928 clickToExpandAndClosePanel(); 1989 clickToExpandAndClosePanel();
1929 assertEquals(1, mPolicy.getPromoOpenCount()); 1990 Assert.assertEquals(1, mPolicy.getPromoOpenCount());
1930 1991
1931 // Another open should count. 1992 // Another open should count.
1932 clickToExpandAndClosePanel(); 1993 clickToExpandAndClosePanel();
1933 assertEquals(2, mPolicy.getPromoOpenCount()); 1994 Assert.assertEquals(2, mPolicy.getPromoOpenCount());
1934 1995
1935 // Once the user has decided, we should stop counting. 1996 // Once the user has decided, we should stop counting.
1936 mPolicy.overrideDecidedStateForTesting(true); 1997 mPolicy.overrideDecidedStateForTesting(true);
1937 clickToExpandAndClosePanel(); 1998 clickToExpandAndClosePanel();
1938 assertEquals(2, mPolicy.getPromoOpenCount()); 1999 Assert.assertEquals(2, mPolicy.getPromoOpenCount());
1939 } 2000 }
1940 2001
1941 /** 2002 /**
1942 * Tests the promo open counter. 2003 * Tests the promo open counter.
1943 */ 2004 */
2005 @Test
1944 @SmallTest 2006 @SmallTest
1945 @Feature({"ContextualSearch"}) 2007 @Feature({"ContextualSearch"})
1946 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) 2008 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE)
1947 @DisableIf.Build(supported_abis_includes = "arm64-v8a", message = "crbug.com /596533") 2009 @DisableIf.Build(supported_abis_includes = "arm64-v8a", message = "crbug.com /596533")
1948 public void testPromoOpenCountForDecided() throws InterruptedException, Time outException { 2010 public void testPromoOpenCountForDecided() throws InterruptedException, Time outException {
1949 mPolicy.overrideDecidedStateForTesting(true); 2011 mPolicy.overrideDecidedStateForTesting(true);
1950 2012
1951 // An open should not count for decided users. 2013 // An open should not count for decided users.
1952 clickToExpandAndClosePanel(); 2014 clickToExpandAndClosePanel();
1953 assertEquals(0, mPolicy.getPromoOpenCount()); 2015 Assert.assertEquals(0, mPolicy.getPromoOpenCount());
1954 } 2016 }
1955 2017
1956 // ------------------------------------------------------------------------- ------------------- 2018 // ------------------------------------------------------------------------- -------------------
1957 // Tap count - number of taps between opens. 2019 // Tap count - number of taps between opens.
1958 // ------------------------------------------------------------------------- ------------------- 2020 // ------------------------------------------------------------------------- -------------------
1959 /** 2021 /**
1960 * Tests the counter for the number of taps between opens. 2022 * Tests the counter for the number of taps between opens.
1961 * @SmallTest 2023 * @SmallTest
1962 * @Feature({"ContextualSearch"}) 2024 * @Feature({"ContextualSearch"})
1963 */ 2025 */
2026 @Test
1964 @FlakyTest 2027 @FlakyTest
1965 public void testTapCount() throws InterruptedException, TimeoutException { 2028 public void testTapCount() throws InterruptedException, TimeoutException {
1966 assertEquals(0, mPolicy.getTapCount()); 2029 Assert.assertEquals(0, mPolicy.getTapCount());
1967 2030
1968 // A simple Tap should change the counter. 2031 // A simple Tap should change the counter.
1969 clickToTriggerPrefetch(); 2032 clickToTriggerPrefetch();
1970 assertEquals(1, mPolicy.getTapCount()); 2033 Assert.assertEquals(1, mPolicy.getTapCount());
1971 2034
1972 // Another Tap should increase the counter. 2035 // Another Tap should increase the counter.
1973 clickToTriggerPrefetch(); 2036 clickToTriggerPrefetch();
1974 assertEquals(2, mPolicy.getTapCount()); 2037 Assert.assertEquals(2, mPolicy.getTapCount());
1975 2038
1976 // An open should reset the counter. 2039 // An open should reset the counter.
1977 clickToExpandAndClosePanel(); 2040 clickToExpandAndClosePanel();
1978 assertEquals(0, mPolicy.getTapCount()); 2041 Assert.assertEquals(0, mPolicy.getTapCount());
1979 } 2042 }
1980 2043
1981 // ------------------------------------------------------------------------- ------------------- 2044 // ------------------------------------------------------------------------- -------------------
1982 // Calls to ContextualSearchObserver. 2045 // Calls to ContextualSearchObserver.
1983 // ------------------------------------------------------------------------- ------------------- 2046 // ------------------------------------------------------------------------- -------------------
1984 private static class TestContextualSearchObserver implements ContextualSearc hObserver { 2047 private static class TestContextualSearchObserver implements ContextualSearc hObserver {
1985 public int hideCount; 2048 public int hideCount;
1986 2049
1987 @Override 2050 @Override
1988 public void onShowContextualSearch(GSAContextDisplaySelection selectionC ontext) {} 2051 public void onShowContextualSearch(GSAContextDisplaySelection selectionC ontext) {}
1989 2052
1990 @Override 2053 @Override
1991 public void onHideContextualSearch() { 2054 public void onHideContextualSearch() {
1992 hideCount++; 2055 hideCount++;
1993 } 2056 }
1994 } 2057 }
1995 2058
1996 /** 2059 /**
1997 * Tests that ContextualSearchObserver gets notified when user brings up con textual search 2060 * Tests that ContextualSearchObserver gets notified when user brings up con textual search
1998 * panel via long press and then dismisses the panel by tapping on the base page. 2061 * panel via long press and then dismisses the panel by tapping on the base page.
1999 */ 2062 */
2063 @Test
2000 @SmallTest 2064 @SmallTest
2001 @Feature({"ContextualSearch"}) 2065 @Feature({"ContextualSearch"})
2002 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) 2066 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE)
2003 public void testNotifyObserverHideAfterLongPress() 2067 public void testNotifyObserverHideAfterLongPress()
2004 throws InterruptedException, TimeoutException { 2068 throws InterruptedException, TimeoutException {
2005 TestContextualSearchObserver observer = new TestContextualSearchObserver (); 2069 TestContextualSearchObserver observer = new TestContextualSearchObserver ();
2006 mManager.addObserver(observer); 2070 mManager.addObserver(observer);
2007 longPressNode("states"); 2071 longPressNode("states");
2008 assertEquals(0, observer.hideCount); 2072 Assert.assertEquals(0, observer.hideCount);
2009 2073
2010 tapBasePageToClosePanel(); 2074 tapBasePageToClosePanel();
2011 assertEquals(1, observer.hideCount); 2075 Assert.assertEquals(1, observer.hideCount);
2012 } 2076 }
2013 2077
2014 /** 2078 /**
2015 * Tests that ContextualSearchObserver gets notified when user brings up con textual search 2079 * Tests that ContextualSearchObserver gets notified when user brings up con textual search
2016 * panel via tap and then dismisses the panel by tapping on the base page. 2080 * panel via tap and then dismisses the panel by tapping on the base page.
2017 */ 2081 */
2082 @Test
2018 @SmallTest 2083 @SmallTest
2019 @Feature({"ContextualSearch"}) 2084 @Feature({"ContextualSearch"})
2020 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) 2085 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE)
2021 public void testNotifyObserverHideAfterTap() throws InterruptedException, Ti meoutException { 2086 public void testNotifyObserverHideAfterTap() throws InterruptedException, Ti meoutException {
2022 TestContextualSearchObserver observer = new TestContextualSearchObserver (); 2087 TestContextualSearchObserver observer = new TestContextualSearchObserver ();
2023 mManager.addObserver(observer); 2088 mManager.addObserver(observer);
2024 clickWordNode("states"); 2089 clickWordNode("states");
2025 assertEquals(0, observer.hideCount); 2090 Assert.assertEquals(0, observer.hideCount);
2026 2091
2027 tapBasePageToClosePanel(); 2092 tapBasePageToClosePanel();
2028 assertEquals(1, observer.hideCount); 2093 Assert.assertEquals(1, observer.hideCount);
2029 } 2094 }
2030 2095
2031 /** 2096 /**
2032 * Asserts that the action bar does or does not become visible in response t o a selection. 2097 * Asserts that the action bar does or does not become visible in response t o a selection.
2033 * @param visible Whether the Action Bar must become visible or not. 2098 * @param visible Whether the Action Bar must become visible or not.
2034 * @throws InterruptedException 2099 * @throws InterruptedException
2035 */ 2100 */
2036 private void assertWaitForSelectActionBarVisible(final boolean visible) 2101 private void assertWaitForSelectActionBarVisible(final boolean visible)
2037 throws InterruptedException { 2102 throws InterruptedException {
2038 CriteriaHelper.pollUiThread(Criteria.equals(visible, new Callable<Boolea n>() { 2103 CriteriaHelper.pollUiThread(Criteria.equals(visible, new Callable<Boolea n>() {
2039 @Override 2104 @Override
2040 public Boolean call() { 2105 public Boolean call() {
2041 return getActivity().getActivityTab().getContentViewCore() 2106 return mActivityTestRule.getActivity()
2107 .getActivityTab()
2108 .getContentViewCore()
2042 .isSelectActionBarShowing(); 2109 .isSelectActionBarShowing();
2043 } 2110 }
2044 })); 2111 }));
2045 } 2112 }
2046 2113
2047 /** 2114 /**
2048 * Tests that ContextualSearchObserver gets notified when user brings up con textual search 2115 * Tests that ContextualSearchObserver gets notified when user brings up con textual search
2049 * panel via long press and then dismisses the panel by tapping copy (hide s elect action mode). 2116 * panel via long press and then dismisses the panel by tapping copy (hide s elect action mode).
2050 */ 2117 */
2118 @Test
2051 @SmallTest 2119 @SmallTest
2052 @Feature({"ContextualSearch"}) 2120 @Feature({"ContextualSearch"})
2053 public void testNotifyObserverHideOnClearSelectionAfterTap() 2121 public void testNotifyObserverHideOnClearSelectionAfterTap()
2054 throws InterruptedException, TimeoutException { 2122 throws InterruptedException, TimeoutException {
2055 TestContextualSearchObserver observer = new TestContextualSearchObserver (); 2123 TestContextualSearchObserver observer = new TestContextualSearchObserver ();
2056 mManager.addObserver(observer); 2124 mManager.addObserver(observer);
2057 longPressNode("states"); 2125 longPressNode("states");
2058 assertEquals(0, observer.hideCount); 2126 Assert.assertEquals(0, observer.hideCount);
2059 2127
2060 // Dismiss select action mode. 2128 // Dismiss select action mode.
2061 final ContentViewCore contentViewCore = getActivity().getActivityTab().g etContentViewCore(); 2129 final ContentViewCore contentViewCore =
2130 mActivityTestRule.getActivity().getActivityTab().getContentViewC ore();
2062 assertWaitForSelectActionBarVisible(true); 2131 assertWaitForSelectActionBarVisible(true);
2063 ThreadUtils.runOnUiThreadBlocking(new Runnable() { 2132 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
2064 @Override 2133 @Override
2065 public void run() { 2134 public void run() {
2066 contentViewCore.destroySelectActionMode(); 2135 contentViewCore.destroySelectActionMode();
2067 } 2136 }
2068 }); 2137 });
2069 assertWaitForSelectActionBarVisible(false); 2138 assertWaitForSelectActionBarVisible(false);
2070 2139
2071 waitForPanelToClose(); 2140 waitForPanelToClose();
2072 assertEquals(1, observer.hideCount); 2141 Assert.assertEquals(1, observer.hideCount);
2073 } 2142 }
2074 2143
2075 /** 2144 /**
2076 * Tests that the Contextual Search panel does not reappear when a long-pres s selection is 2145 * Tests that the Contextual Search panel does not reappear when a long-pres s selection is
2077 * modified after the user has taken an action to explicitly dismiss the pan el. Also tests 2146 * modified after the user has taken an action to explicitly dismiss the pan el. Also tests
2078 * that the panel reappears when a new selection is made. 2147 * that the panel reappears when a new selection is made.
2079 */ 2148 */
2149 @Test
2080 @SmallTest 2150 @SmallTest
2081 @Feature({"ContextualSearch"}) 2151 @Feature({"ContextualSearch"})
2082 public void testPreventHandlingCurrentSelectionModification() 2152 public void testPreventHandlingCurrentSelectionModification()
2083 throws InterruptedException, TimeoutException { 2153 throws InterruptedException, TimeoutException {
2084 simulateLongPressSearch("search"); 2154 simulateLongPressSearch("search");
2085 2155
2086 // Dismiss the Contextual Search panel. 2156 // Dismiss the Contextual Search panel.
2087 closePanel(); 2157 closePanel();
2088 assertEquals("Search", getSelectedText()); 2158 Assert.assertEquals("Search", getSelectedText());
2089 2159
2090 // Simulate a selection change event and assert that the panel has not r eappeared. 2160 // Simulate a selection change event and assert that the panel has not r eappeared.
2091 ThreadUtils.runOnUiThreadBlocking(new Runnable() { 2161 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
2092 @Override 2162 @Override
2093 public void run() { 2163 public void run() {
2094 mManager.onSelectionEvent( 2164 mManager.onSelectionEvent(
2095 SelectionEventType.SELECTION_HANDLE_DRAG_STARTED, 333, 4 50); 2165 SelectionEventType.SELECTION_HANDLE_DRAG_STARTED, 333, 4 50);
2096 mManager.onSelectionEvent( 2166 mManager.onSelectionEvent(
2097 SelectionEventType.SELECTION_HANDLE_DRAG_STOPPED, 303, 4 50); 2167 SelectionEventType.SELECTION_HANDLE_DRAG_STOPPED, 303, 4 50);
2098 } 2168 }
2099 }); 2169 });
2100 assertPanelClosedOrUndefined(); 2170 assertPanelClosedOrUndefined();
2101 2171
2102 // Select a different word and assert that the panel has appeared. 2172 // Select a different word and assert that the panel has appeared.
2103 simulateLongPressSearch("resolution"); 2173 simulateLongPressSearch("resolution");
2104 // The simulateLongPressSearch call will verify that the panel peeks. 2174 // The simulateLongPressSearch call will verify that the panel peeks.
2105 } 2175 }
2106 2176
2107 /** 2177 /**
2108 * Tests a bunch of taps in a row. 2178 * Tests a bunch of taps in a row.
2109 * We've had reliability problems with a sequence of simple taps, due to asy nc dissolving 2179 * We've had reliability problems with a sequence of simple taps, due to asy nc dissolving
2110 * of selection bounds, so this helps prevent a regression with that. 2180 * of selection bounds, so this helps prevent a regression with that.
2111 */ 2181 */
2182 @Test
2112 @SmallTest 2183 @SmallTest
2113 @Feature({"ContextualSearch"}) 2184 @Feature({"ContextualSearch"})
2114 public void testTapALot() throws InterruptedException, TimeoutException { 2185 public void testTapALot() throws InterruptedException, TimeoutException {
2115 mPolicy.setTapLimitForDecidedForTesting(PLENTY_OF_TAPS); 2186 mPolicy.setTapLimitForDecidedForTesting(PLENTY_OF_TAPS);
2116 mPolicy.setTapLimitForUndecidedForTesting(PLENTY_OF_TAPS); 2187 mPolicy.setTapLimitForUndecidedForTesting(PLENTY_OF_TAPS);
2117 for (int i = 0; i < 50; i++) { 2188 for (int i = 0; i < 50; i++) {
2118 clickToTriggerPrefetch(); 2189 clickToTriggerPrefetch();
2119 waitForSelectionEmpty(); 2190 waitForSelectionEmpty();
2120 assertSearchTermRequested(); 2191 assertSearchTermRequested();
2121 } 2192 }
2122 } 2193 }
2123 2194
2124 /** 2195 /**
2125 * Tests ContextualSearchManager#shouldInterceptNavigation for a case that a n external 2196 * Tests ContextualSearchManager#shouldInterceptNavigation for a case that a n external
2126 * navigation has a user gesture. 2197 * navigation has a user gesture.
2127 */ 2198 */
2199 @Test
2128 @SmallTest 2200 @SmallTest
2129 @Feature({"ContextualSearch"}) 2201 @Feature({"ContextualSearch"})
2130 public void testExternalNavigationWithUserGesture() { 2202 public void testExternalNavigationWithUserGesture() {
2131 final ExternalNavigationHandler externalNavHandler = 2203 final ExternalNavigationHandler externalNavHandler =
2132 new ExternalNavigationHandler(getActivity().getActivityTab()); 2204 new ExternalNavigationHandler(mActivityTestRule.getActivity().ge tActivityTab());
2133 final NavigationParams navigationParams = new NavigationParams( 2205 final NavigationParams navigationParams = new NavigationParams(
2134 "intent://test/#Intent;scheme=test;package=com.chrome.test;end", "", 2206 "intent://test/#Intent;scheme=test;package=com.chrome.test;end", "",
2135 false /* isPost */, true /* hasUserGesture */, PageTransition.LI NK, 2207 false /* isPost */, true /* hasUserGesture */, PageTransition.LI NK,
2136 false /* isRedirect */, true /* isExternalProtocol */, true /* i sMainFrame */, 2208 false /* isRedirect */, true /* isExternalProtocol */, true /* i sMainFrame */,
2137 false /* hasUserGestureCarryover */); 2209 false /* hasUserGestureCarryover */);
2138 getInstrumentation().runOnMainSync(new Runnable() { 2210 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable( ) {
2139 @Override 2211 @Override
2140 public void run() { 2212 public void run() {
2141 assertFalse( 2213 Assert.assertFalse(mManager.getOverlayContentDelegate().shouldIn terceptNavigation(
2142 mManager.getOverlayContentDelegate().shouldInterceptNavi gation( 2214 externalNavHandler, navigationParams));
2143 externalNavHandler, navigationParams));
2144 } 2215 }
2145 }); 2216 });
2146 assertEquals(1, mActivityMonitor.getHits()); 2217 Assert.assertEquals(1, mActivityMonitor.getHits());
2147 } 2218 }
2148 2219
2149 /** 2220 /**
2150 * Tests ContextualSearchManager#shouldInterceptNavigation for a case that a n initial 2221 * Tests ContextualSearchManager#shouldInterceptNavigation for a case that a n initial
2151 * navigation has a user gesture but the redirected external navigation does n't. 2222 * navigation has a user gesture but the redirected external navigation does n't.
2152 */ 2223 */
2224 @Test
2153 @SmallTest 2225 @SmallTest
2154 @Feature({"ContextualSearch"}) 2226 @Feature({"ContextualSearch"})
2155 public void testRedirectedExternalNavigationWithUserGesture() { 2227 public void testRedirectedExternalNavigationWithUserGesture() {
2156 final ExternalNavigationHandler externalNavHandler = 2228 final ExternalNavigationHandler externalNavHandler =
2157 new ExternalNavigationHandler(getActivity().getActivityTab()); 2229 new ExternalNavigationHandler(mActivityTestRule.getActivity().ge tActivityTab());
2158 2230
2159 final NavigationParams initialNavigationParams = new NavigationParams("h ttp://test.com", "", 2231 final NavigationParams initialNavigationParams = new NavigationParams("h ttp://test.com", "",
2160 false /* isPost */, true /* hasUserGesture */, PageTransition.LI NK, 2232 false /* isPost */, true /* hasUserGesture */, PageTransition.LI NK,
2161 false /* isRedirect */, false /* isExternalProtocol */, true /* isMainFrame */, 2233 false /* isRedirect */, false /* isExternalProtocol */, true /* isMainFrame */,
2162 false /* hasUserGestureCarryover */); 2234 false /* hasUserGestureCarryover */);
2163 final NavigationParams redirectedNavigationParams = new NavigationParams ( 2235 final NavigationParams redirectedNavigationParams = new NavigationParams (
2164 "intent://test/#Intent;scheme=test;package=com.chrome.test;end", "", 2236 "intent://test/#Intent;scheme=test;package=com.chrome.test;end", "",
2165 false /* isPost */, false /* hasUserGesture */, PageTransition.L INK, 2237 false /* isPost */, false /* hasUserGesture */, PageTransition.L INK,
2166 true /* isRedirect */, true /* isExternalProtocol */, true /* is MainFrame */, 2238 true /* isRedirect */, true /* isExternalProtocol */, true /* is MainFrame */,
2167 false /* hasUserGestureCarryover */); 2239 false /* hasUserGestureCarryover */);
2168 2240
2169 getInstrumentation().runOnMainSync(new Runnable() { 2241 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable( ) {
2170 @Override 2242 @Override
2171 public void run() { 2243 public void run() {
2172 OverlayContentDelegate delegate = mManager.getOverlayContentDele gate(); 2244 OverlayContentDelegate delegate = mManager.getOverlayContentDele gate();
2173 assertTrue(delegate.shouldInterceptNavigation( 2245 Assert.assertTrue(delegate.shouldInterceptNavigation(
2174 externalNavHandler, initialNavigationParams)); 2246 externalNavHandler, initialNavigationParams));
2175 assertFalse(delegate.shouldInterceptNavigation( 2247 Assert.assertFalse(delegate.shouldInterceptNavigation(
2176 externalNavHandler, redirectedNavigationParams)); 2248 externalNavHandler, redirectedNavigationParams));
2177 } 2249 }
2178 }); 2250 });
2179 assertEquals(1, mActivityMonitor.getHits()); 2251 Assert.assertEquals(1, mActivityMonitor.getHits());
2180 } 2252 }
2181 2253
2182 /** 2254 /**
2183 * Tests ContextualSearchManager#shouldInterceptNavigation for a case that a n external 2255 * Tests ContextualSearchManager#shouldInterceptNavigation for a case that a n external
2184 * navigation doesn't have a user gesture. 2256 * navigation doesn't have a user gesture.
2185 */ 2257 */
2258 @Test
2186 @SmallTest 2259 @SmallTest
2187 @Feature({"ContextualSearch"}) 2260 @Feature({"ContextualSearch"})
2188 public void testExternalNavigationWithoutUserGesture() { 2261 public void testExternalNavigationWithoutUserGesture() {
2189 final ExternalNavigationHandler externalNavHandler = 2262 final ExternalNavigationHandler externalNavHandler =
2190 new ExternalNavigationHandler(getActivity().getActivityTab()); 2263 new ExternalNavigationHandler(mActivityTestRule.getActivity().ge tActivityTab());
2191 final NavigationParams navigationParams = new NavigationParams( 2264 final NavigationParams navigationParams = new NavigationParams(
2192 "intent://test/#Intent;scheme=test;package=com.chrome.test;end", "", 2265 "intent://test/#Intent;scheme=test;package=com.chrome.test;end", "",
2193 false /* isPost */, false /* hasUserGesture */, PageTransition.L INK, 2266 false /* isPost */, false /* hasUserGesture */, PageTransition.L INK,
2194 false /* isRedirect */, true /* isExternalProtocol */, true /* i sMainFrame */, 2267 false /* isRedirect */, true /* isExternalProtocol */, true /* i sMainFrame */,
2195 false /* hasUserGestureCarryover */); 2268 false /* hasUserGestureCarryover */);
2196 getInstrumentation().runOnMainSync(new Runnable() { 2269 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable( ) {
2197 @Override 2270 @Override
2198 public void run() { 2271 public void run() {
2199 assertFalse( 2272 Assert.assertFalse(mManager.getOverlayContentDelegate().shouldIn terceptNavigation(
2200 mManager.getOverlayContentDelegate().shouldInterceptNavi gation( 2273 externalNavHandler, navigationParams));
2201 externalNavHandler, navigationParams));
2202 } 2274 }
2203 }); 2275 });
2204 assertEquals(0, mActivityMonitor.getHits()); 2276 Assert.assertEquals(0, mActivityMonitor.getHits());
2205 } 2277 }
2206 2278
2279 @Test
2207 @SmallTest 2280 @SmallTest
2208 @Feature({"ContextualSearch"}) 2281 @Feature({"ContextualSearch"})
2209 public void testSelectionExpansionOnSearchTermResolution() 2282 public void testSelectionExpansionOnSearchTermResolution()
2210 throws InterruptedException, TimeoutException { 2283 throws InterruptedException, TimeoutException {
2211 mFakeServer.reset(); 2284 mFakeServer.reset();
2212 clickWordNode("intelligence"); 2285 clickWordNode("intelligence");
2213 waitForPanelToPeek(); 2286 waitForPanelToPeek();
2214 2287
2215 fakeResponse(false, 200, "Intelligence", "United States Intelligence", " alternate-term", 2288 fakeResponse(false, 200, "Intelligence", "United States Intelligence", " alternate-term",
2216 null, false, -14, 0, "", "", "", "", QuickActionCategory.NONE); 2289 null, false, -14, 0, "", "", "", "", QuickActionCategory.NONE);
2217 waitForSelectionToBe("United States Intelligence"); 2290 waitForSelectionToBe("United States Intelligence");
2218 } 2291 }
2219 2292
2220 /** 2293 /**
2221 * Tests that long-press triggers the Peek Promo, and expanding the Panel di smisses it. 2294 * Tests that long-press triggers the Peek Promo, and expanding the Panel di smisses it.
2222 */ 2295 */
2296 @Test
2223 @SmallTest 2297 @SmallTest
2224 @Feature({"ContextualSearch"}) 2298 @Feature({"ContextualSearch"})
2225 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) 2299 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE)
2226 @CommandLineFlags.Add(ContextualSearchFieldTrial.PEEK_PROMO_ENABLED + "=true ") 2300 @CommandLineFlags.Add(ContextualSearchFieldTrial.PEEK_PROMO_ENABLED + "=true ")
2227 @DisableIf.Build(supported_abis_includes = "arm64-v8a", message = "crbug.com /596533") 2301 @DisableIf.Build(supported_abis_includes = "arm64-v8a", message = "crbug.com /596533")
2228 public void testLongPressShowsPeekPromo() 2302 public void testLongPressShowsPeekPromo() throws InterruptedException, Timeo utException {
2229 throws InterruptedException, TimeoutException {
2230 // Must be in undecided state in order to trigger the Peek Promo. 2303 // Must be in undecided state in order to trigger the Peek Promo.
2231 mPolicy.overrideDecidedStateForTesting(false); 2304 mPolicy.overrideDecidedStateForTesting(false);
2232 // Must have never opened the Panel in order to trigger the Peek Promo. 2305 // Must have never opened the Panel in order to trigger the Peek Promo.
2233 assertEquals(0, mPolicy.getPromoOpenCount()); 2306 Assert.assertEquals(0, mPolicy.getPromoOpenCount());
2234 2307
2235 // Long press and make sure the Promo shows. 2308 // Long press and make sure the Promo shows.
2236 longPressNode("intelligence"); 2309 longPressNode("intelligence");
2237 waitForPanelToPeek(); 2310 waitForPanelToPeek();
2238 assertTrue(mPanel.isPeekPromoVisible()); 2311 Assert.assertTrue(mPanel.isPeekPromoVisible());
2239 2312
2240 // After expanding the Panel the Promo should be invisible. 2313 // After expanding the Panel the Promo should be invisible.
2241 flingPanelUp(); 2314 flingPanelUp();
2242 waitForPanelToExpand(); 2315 waitForPanelToExpand();
2243 assertFalse(mPanel.isPeekPromoVisible()); 2316 Assert.assertFalse(mPanel.isPeekPromoVisible());
2244 2317
2245 // After closing the Panel the Promo should still be invisible. 2318 // After closing the Panel the Promo should still be invisible.
2246 tapBasePageToClosePanel(); 2319 tapBasePageToClosePanel();
2247 assertFalse(mPanel.isPeekPromoVisible()); 2320 Assert.assertFalse(mPanel.isPeekPromoVisible());
2248 2321
2249 // Click elsewhere to clear the selection. 2322 // Click elsewhere to clear the selection.
2250 clickNode("question-mark"); 2323 clickNode("question-mark");
2251 waitForSelectionToBe(null); 2324 waitForSelectionToBe(null);
2252 2325
2253 // Now that the Panel was opened at least once, the Promo should not sho w again. 2326 // Now that the Panel was opened at least once, the Promo should not sho w again.
2254 longPressNode("intelligence"); 2327 longPressNode("intelligence");
2255 waitForPanelToPeek(); 2328 waitForPanelToPeek();
2256 assertFalse(mPanel.isPeekPromoVisible()); 2329 Assert.assertFalse(mPanel.isPeekPromoVisible());
2257 } 2330 }
2258 2331
2259 //========================================================================== ================== 2332 //========================================================================== ==================
2260 // Content Tests 2333 // Content Tests
2261 //========================================================================== ================== 2334 //========================================================================== ==================
2262 2335
2263 /** 2336 /**
2264 * Tests that tap followed by expand makes Content visible. 2337 * Tests that tap followed by expand makes Content visible.
2265 */ 2338 */
2339 @Test
2266 @SmallTest 2340 @SmallTest
2267 @Feature({"ContextualSearch"}) 2341 @Feature({"ContextualSearch"})
2268 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) 2342 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE)
2269 public void testTapContentVisibility() throws InterruptedException, TimeoutE xception { 2343 public void testTapContentVisibility() throws InterruptedException, TimeoutE xception {
2270 // Simulate a tap and make sure Content is not visible. 2344 // Simulate a tap and make sure Content is not visible.
2271 simulateTapSearch("search"); 2345 simulateTapSearch("search");
2272 assertContentViewCoreCreatedButNeverMadeVisible(); 2346 assertContentViewCoreCreatedButNeverMadeVisible();
2273 2347
2274 // Expanding the Panel should make the Content visible. 2348 // Expanding the Panel should make the Content visible.
2275 tapPeekingBarToExpandAndAssert(); 2349 tapPeekingBarToExpandAndAssert();
2276 assertContentViewCoreVisible(); 2350 assertContentViewCoreVisible();
2277 2351
2278 // Closing the Panel should destroy the Content. 2352 // Closing the Panel should destroy the Content.
2279 tapBasePageToClosePanel(); 2353 tapBasePageToClosePanel();
2280 assertNoContentViewCore(); 2354 assertNoContentViewCore();
2281 } 2355 }
2282 2356
2283 /** 2357 /**
2284 * Tests that long press followed by expand creates Content and makes it vis ible. 2358 * Tests that long press followed by expand creates Content and makes it vis ible.
2285 * 2359 *
2286 */ 2360 */
2361 @Test
2287 @SmallTest 2362 @SmallTest
2288 @Feature({"ContextualSearch"}) 2363 @Feature({"ContextualSearch"})
2289 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) 2364 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE)
2290 public void testLongPressContentVisibility() throws InterruptedException, Ti meoutException { 2365 public void testLongPressContentVisibility() throws InterruptedException, Ti meoutException {
2291 // Simulate a long press and make sure no Content is created. 2366 // Simulate a long press and make sure no Content is created.
2292 simulateLongPressSearch("search"); 2367 simulateLongPressSearch("search");
2293 assertNoContentViewCore(); 2368 assertNoContentViewCore();
2294 assertNoSearchesLoaded(); 2369 assertNoSearchesLoaded();
2295 2370
2296 // Expanding the Panel should make the Content visible. 2371 // Expanding the Panel should make the Content visible.
2297 tapPeekingBarToExpandAndAssert(); 2372 tapPeekingBarToExpandAndAssert();
2298 assertContentViewCoreCreated(); 2373 assertContentViewCoreCreated();
2299 assertContentViewCoreVisible(); 2374 assertContentViewCoreVisible();
2300 2375
2301 // Closing the Panel should destroy the Content. 2376 // Closing the Panel should destroy the Content.
2302 tapBasePageToClosePanel(); 2377 tapBasePageToClosePanel();
2303 assertNoContentViewCore(); 2378 assertNoContentViewCore();
2304 } 2379 }
2305 2380
2306 /** 2381 /**
2307 * Tests swiping panel up and down after a tap search will only load the Con tent once. 2382 * Tests swiping panel up and down after a tap search will only load the Con tent once.
2308 */ 2383 */
2384 @Test
2309 @SmallTest 2385 @SmallTest
2310 @Feature({"ContextualSearch"}) 2386 @Feature({"ContextualSearch"})
2311 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) 2387 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE)
2312 public void testTapMultipleSwipeOnlyLoadsContentOnce() 2388 public void testTapMultipleSwipeOnlyLoadsContentOnce()
2313 throws InterruptedException, TimeoutException { 2389 throws InterruptedException, TimeoutException {
2314 // Simulate a tap and make sure Content is not visible. 2390 // Simulate a tap and make sure Content is not visible.
2315 simulateTapSearch("search"); 2391 simulateTapSearch("search");
2316 assertContentViewCoreCreatedButNeverMadeVisible(); 2392 assertContentViewCoreCreatedButNeverMadeVisible();
2317 assertEquals(1, mFakeServer.getLoadedUrlCount()); 2393 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
2318 2394
2319 // Expanding the Panel should make the Content visible. 2395 // Expanding the Panel should make the Content visible.
2320 tapPeekingBarToExpandAndAssert(); 2396 tapPeekingBarToExpandAndAssert();
2321 assertContentViewCoreVisible(); 2397 assertContentViewCoreVisible();
2322 assertEquals(1, mFakeServer.getLoadedUrlCount()); 2398 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
2323 2399
2324 // Swiping the Panel down should not change the visibility or load conte nt again. 2400 // Swiping the Panel down should not change the visibility or load conte nt again.
2325 swipePanelDown(); 2401 swipePanelDown();
2326 waitForPanelToPeek(); 2402 waitForPanelToPeek();
2327 assertContentViewCoreVisible(); 2403 assertContentViewCoreVisible();
2328 assertEquals(1, mFakeServer.getLoadedUrlCount()); 2404 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
2329 2405
2330 // Expanding the Panel should not change the visibility or load content again. 2406 // Expanding the Panel should not change the visibility or load content again.
2331 tapPeekingBarToExpandAndAssert(); 2407 tapPeekingBarToExpandAndAssert();
2332 assertContentViewCoreVisible(); 2408 assertContentViewCoreVisible();
2333 assertEquals(1, mFakeServer.getLoadedUrlCount()); 2409 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
2334 2410
2335 // Closing the Panel should destroy the Content. 2411 // Closing the Panel should destroy the Content.
2336 tapBasePageToClosePanel(); 2412 tapBasePageToClosePanel();
2337 assertNoContentViewCore(); 2413 assertNoContentViewCore();
2338 assertEquals(1, mFakeServer.getLoadedUrlCount()); 2414 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
2339 } 2415 }
2340 2416
2341 /** 2417 /**
2342 * Tests swiping panel up and down after a long press search will only load the Content once. 2418 * Tests swiping panel up and down after a long press search will only load the Content once.
2343 */ 2419 */
2420 @Test
2344 @SmallTest 2421 @SmallTest
2345 @Feature({"ContextualSearch"}) 2422 @Feature({"ContextualSearch"})
2346 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) 2423 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE)
2347 public void testLongPressMultipleSwipeOnlyLoadsContentOnce() 2424 public void testLongPressMultipleSwipeOnlyLoadsContentOnce()
2348 throws InterruptedException, TimeoutException { 2425 throws InterruptedException, TimeoutException {
2349 // Simulate a long press and make sure no Content is created. 2426 // Simulate a long press and make sure no Content is created.
2350 simulateLongPressSearch("search"); 2427 simulateLongPressSearch("search");
2351 assertNoContentViewCore(); 2428 assertNoContentViewCore();
2352 assertNoSearchesLoaded(); 2429 assertNoSearchesLoaded();
2353 2430
2354 // Expanding the Panel should load the URL and make the Content visible. 2431 // Expanding the Panel should load the URL and make the Content visible.
2355 tapPeekingBarToExpandAndAssert(); 2432 tapPeekingBarToExpandAndAssert();
2356 assertContentViewCoreCreated(); 2433 assertContentViewCoreCreated();
2357 assertContentViewCoreVisible(); 2434 assertContentViewCoreVisible();
2358 assertEquals(1, mFakeServer.getLoadedUrlCount()); 2435 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
2359 2436
2360 // Swiping the Panel down should not change the visibility or load conte nt again. 2437 // Swiping the Panel down should not change the visibility or load conte nt again.
2361 swipePanelDown(); 2438 swipePanelDown();
2362 waitForPanelToPeek(); 2439 waitForPanelToPeek();
2363 assertContentViewCoreVisible(); 2440 assertContentViewCoreVisible();
2364 assertEquals(1, mFakeServer.getLoadedUrlCount()); 2441 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
2365 2442
2366 // Expanding the Panel should not change the visibility or load content again. 2443 // Expanding the Panel should not change the visibility or load content again.
2367 tapPeekingBarToExpandAndAssert(); 2444 tapPeekingBarToExpandAndAssert();
2368 assertContentViewCoreVisible(); 2445 assertContentViewCoreVisible();
2369 assertEquals(1, mFakeServer.getLoadedUrlCount()); 2446 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
2370 2447
2371 // Closing the Panel should destroy the Content. 2448 // Closing the Panel should destroy the Content.
2372 tapBasePageToClosePanel(); 2449 tapBasePageToClosePanel();
2373 assertNoContentViewCore(); 2450 assertNoContentViewCore();
2374 assertEquals(1, mFakeServer.getLoadedUrlCount()); 2451 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
2375 } 2452 }
2376 2453
2377 /** 2454 /**
2378 * Tests that chained tap searches create new Content. 2455 * Tests that chained tap searches create new Content.
2379 */ 2456 */
2457 @Test
2380 @SmallTest 2458 @SmallTest
2381 @Feature({"ContextualSearch"}) 2459 @Feature({"ContextualSearch"})
2382 public void testChainedSearchCreatesNewContent() throws InterruptedException , TimeoutException { 2460 public void testChainedSearchCreatesNewContent() throws InterruptedException , TimeoutException {
2383 // Simulate a tap and make sure Content is not visible. 2461 // Simulate a tap and make sure Content is not visible.
2384 simulateTapSearch("search"); 2462 simulateTapSearch("search");
2385 assertContentViewCoreCreatedButNeverMadeVisible(); 2463 assertContentViewCoreCreatedButNeverMadeVisible();
2386 assertEquals(1, mFakeServer.getLoadedUrlCount()); 2464 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
2387 ContentViewCore cvc1 = getPanelContentViewCore(); 2465 ContentViewCore cvc1 = getPanelContentViewCore();
2388 2466
2389 waitToPreventDoubleTapRecognition(); 2467 waitToPreventDoubleTapRecognition();
2390 2468
2391 // Simulate a new tap and make sure a new Content is created. 2469 // Simulate a new tap and make sure a new Content is created.
2392 simulateTapSearch("term"); 2470 simulateTapSearch("term");
2393 assertContentViewCoreCreatedButNeverMadeVisible(); 2471 assertContentViewCoreCreatedButNeverMadeVisible();
2394 assertEquals(2, mFakeServer.getLoadedUrlCount()); 2472 Assert.assertEquals(2, mFakeServer.getLoadedUrlCount());
2395 ContentViewCore cvc2 = getPanelContentViewCore(); 2473 ContentViewCore cvc2 = getPanelContentViewCore();
2396 assertNotSame(cvc1, cvc2); 2474 Assert.assertNotSame(cvc1, cvc2);
2397 2475
2398 waitToPreventDoubleTapRecognition(); 2476 waitToPreventDoubleTapRecognition();
2399 2477
2400 // Simulate a new tap and make sure a new Content is created. 2478 // Simulate a new tap and make sure a new Content is created.
2401 simulateTapSearch("resolution"); 2479 simulateTapSearch("resolution");
2402 assertContentViewCoreCreatedButNeverMadeVisible(); 2480 assertContentViewCoreCreatedButNeverMadeVisible();
2403 assertEquals(3, mFakeServer.getLoadedUrlCount()); 2481 Assert.assertEquals(3, mFakeServer.getLoadedUrlCount());
2404 ContentViewCore cvc3 = getPanelContentViewCore(); 2482 ContentViewCore cvc3 = getPanelContentViewCore();
2405 assertNotSame(cvc2, cvc3); 2483 Assert.assertNotSame(cvc2, cvc3);
2406 2484
2407 // Closing the Panel should destroy the Content. 2485 // Closing the Panel should destroy the Content.
2408 closePanel(); 2486 closePanel();
2409 assertNoContentViewCore(); 2487 assertNoContentViewCore();
2410 assertEquals(3, mFakeServer.getLoadedUrlCount()); 2488 Assert.assertEquals(3, mFakeServer.getLoadedUrlCount());
2411 } 2489 }
2412 2490
2413 /** 2491 /**
2414 * Tests that chained searches load correctly. 2492 * Tests that chained searches load correctly.
2415 */ 2493 */
2494 @Test
2416 @DisabledTest(message = "crbug.com/551711") 2495 @DisabledTest(message = "crbug.com/551711")
2417 @SmallTest 2496 @SmallTest
2418 @Feature({"ContextualSearch"}) 2497 @Feature({"ContextualSearch"})
2419 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) 2498 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE)
2420 public void testChainedSearchLoadsCorrectSearchTerm() 2499 public void testChainedSearchLoadsCorrectSearchTerm()
2421 throws InterruptedException, TimeoutException { 2500 throws InterruptedException, TimeoutException {
2422 // Simulate a tap and make sure Content is not visible. 2501 // Simulate a tap and make sure Content is not visible.
2423 simulateTapSearch("search"); 2502 simulateTapSearch("search");
2424 assertContentViewCoreCreatedButNeverMadeVisible(); 2503 assertContentViewCoreCreatedButNeverMadeVisible();
2425 assertEquals(1, mFakeServer.getLoadedUrlCount()); 2504 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
2426 ContentViewCore cvc1 = getPanelContentViewCore(); 2505 ContentViewCore cvc1 = getPanelContentViewCore();
2427 2506
2428 // Expanding the Panel should make the Content visible. 2507 // Expanding the Panel should make the Content visible.
2429 tapPeekingBarToExpandAndAssert(); 2508 tapPeekingBarToExpandAndAssert();
2430 assertContentViewCoreVisible(); 2509 assertContentViewCoreVisible();
2431 assertEquals(1, mFakeServer.getLoadedUrlCount()); 2510 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
2432 2511
2433 // Swiping the Panel down should not change the visibility or load conte nt again. 2512 // Swiping the Panel down should not change the visibility or load conte nt again.
2434 swipePanelDown(); 2513 swipePanelDown();
2435 waitForPanelToPeek(); 2514 waitForPanelToPeek();
2436 assertContentViewCoreVisible(); 2515 assertContentViewCoreVisible();
2437 assertEquals(1, mFakeServer.getLoadedUrlCount()); 2516 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
2438 2517
2439 waitToPreventDoubleTapRecognition(); 2518 waitToPreventDoubleTapRecognition();
2440 2519
2441 // Now simulate a long press, leaving the Panel peeking. 2520 // Now simulate a long press, leaving the Panel peeking.
2442 simulateLongPressSearch("resolution"); 2521 simulateLongPressSearch("resolution");
2443 2522
2444 // Expanding the Panel should load and display the new search. 2523 // Expanding the Panel should load and display the new search.
2445 tapPeekingBarToExpandAndAssert(); 2524 tapPeekingBarToExpandAndAssert();
2446 assertContentViewCoreCreated(); 2525 assertContentViewCoreCreated();
2447 assertContentViewCoreVisible(); 2526 assertContentViewCoreVisible();
2448 assertEquals(2, mFakeServer.getLoadedUrlCount()); 2527 Assert.assertEquals(2, mFakeServer.getLoadedUrlCount());
2449 assertLoadedSearchTermMatches("Resolution"); 2528 assertLoadedSearchTermMatches("Resolution");
2450 ContentViewCore cvc2 = getPanelContentViewCore(); 2529 ContentViewCore cvc2 = getPanelContentViewCore();
2451 assertNotSame(cvc1, cvc2); 2530 Assert.assertNotSame(cvc1, cvc2);
2452 2531
2453 // Closing the Panel should destroy the Content. 2532 // Closing the Panel should destroy the Content.
2454 tapBasePageToClosePanel(); 2533 tapBasePageToClosePanel();
2455 assertNoContentViewCore(); 2534 assertNoContentViewCore();
2456 assertEquals(2, mFakeServer.getLoadedUrlCount()); 2535 Assert.assertEquals(2, mFakeServer.getLoadedUrlCount());
2457 } 2536 }
2458 2537
2459 /** 2538 /**
2460 * Tests that chained searches make Content visible when opening the Panel. 2539 * Tests that chained searches make Content visible when opening the Panel.
2461 */ 2540 */
2541 @Test
2462 @SmallTest 2542 @SmallTest
2463 @Feature({"ContextualSearch"}) 2543 @Feature({"ContextualSearch"})
2464 public void testChainedSearchContentVisibility() throws InterruptedException , TimeoutException { 2544 public void testChainedSearchContentVisibility() throws InterruptedException , TimeoutException {
2465 // Simulate a tap and make sure Content is not visible. 2545 // Simulate a tap and make sure Content is not visible.
2466 simulateTapSearch("search"); 2546 simulateTapSearch("search");
2467 assertContentViewCoreCreatedButNeverMadeVisible(); 2547 assertContentViewCoreCreatedButNeverMadeVisible();
2468 assertEquals(1, mFakeServer.getLoadedUrlCount()); 2548 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
2469 ContentViewCore cvc1 = getPanelContentViewCore(); 2549 ContentViewCore cvc1 = getPanelContentViewCore();
2470 2550
2471 waitToPreventDoubleTapRecognition(); 2551 waitToPreventDoubleTapRecognition();
2472 2552
2473 // Now simulate a long press, leaving the Panel peeking. 2553 // Now simulate a long press, leaving the Panel peeking.
2474 simulateLongPressSearch("resolution"); 2554 simulateLongPressSearch("resolution");
2475 assertNeverCalledContentViewCoreOnShow(); 2555 assertNeverCalledContentViewCoreOnShow();
2476 assertEquals(1, mFakeServer.getLoadedUrlCount()); 2556 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
2477 2557
2478 // Expanding the Panel should load and display the new search. 2558 // Expanding the Panel should load and display the new search.
2479 tapPeekingBarToExpandAndAssert(); 2559 tapPeekingBarToExpandAndAssert();
2480 assertContentViewCoreCreated(); 2560 assertContentViewCoreCreated();
2481 assertContentViewCoreVisible(); 2561 assertContentViewCoreVisible();
2482 assertEquals(2, mFakeServer.getLoadedUrlCount()); 2562 Assert.assertEquals(2, mFakeServer.getLoadedUrlCount());
2483 assertLoadedSearchTermMatches("Resolution"); 2563 assertLoadedSearchTermMatches("Resolution");
2484 ContentViewCore cvc2 = getPanelContentViewCore(); 2564 ContentViewCore cvc2 = getPanelContentViewCore();
2485 assertNotSame(cvc1, cvc2); 2565 Assert.assertNotSame(cvc1, cvc2);
2486 } 2566 }
2487 2567
2488 //========================================================================== ================== 2568 //========================================================================== ==================
2489 // History Removal Tests 2569 // History Removal Tests
2490 //========================================================================== ================== 2570 //========================================================================== ==================
2491 2571
2492 /** 2572 /**
2493 * Tests that a tap followed by closing the Panel removes the loaded URL fro m history. 2573 * Tests that a tap followed by closing the Panel removes the loaded URL fro m history.
2494 */ 2574 */
2575 @Test
2495 @SmallTest 2576 @SmallTest
2496 @Feature({"ContextualSearch"}) 2577 @Feature({"ContextualSearch"})
2497 public void testTapCloseRemovedFromHistory() throws InterruptedException, Ti meoutException { 2578 public void testTapCloseRemovedFromHistory() throws InterruptedException, Ti meoutException {
2498 // Simulate a tap and make sure a URL was loaded. 2579 // Simulate a tap and make sure a URL was loaded.
2499 simulateTapSearch("search"); 2580 simulateTapSearch("search");
2500 assertEquals(1, mFakeServer.getLoadedUrlCount()); 2581 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
2501 String url = mFakeServer.getLoadedUrl(); 2582 String url = mFakeServer.getLoadedUrl();
2502 2583
2503 // Close the Panel without seeing the Content. 2584 // Close the Panel without seeing the Content.
2504 tapBasePageToClosePanel(); 2585 tapBasePageToClosePanel();
2505 2586
2506 // Now check that the URL has been removed from history. 2587 // Now check that the URL has been removed from history.
2507 assertTrue(mFakeServer.hasRemovedUrl(url)); 2588 Assert.assertTrue(mFakeServer.hasRemovedUrl(url));
2508 } 2589 }
2509 2590
2510 /** 2591 /**
2511 * Tests that a tap followed by opening the Panel does not remove the loaded URL from history. 2592 * Tests that a tap followed by opening the Panel does not remove the loaded URL from history.
2512 */ 2593 */
2594 @Test
2513 @SmallTest 2595 @SmallTest
2514 @Feature({"ContextualSearch"}) 2596 @Feature({"ContextualSearch"})
2515 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) 2597 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE)
2516 public void testTapExpandNotRemovedFromHistory() throws InterruptedException , TimeoutException { 2598 public void testTapExpandNotRemovedFromHistory() throws InterruptedException , TimeoutException {
2517 // Simulate a tap and make sure a URL was loaded. 2599 // Simulate a tap and make sure a URL was loaded.
2518 simulateTapSearch("search"); 2600 simulateTapSearch("search");
2519 assertEquals(1, mFakeServer.getLoadedUrlCount()); 2601 Assert.assertEquals(1, mFakeServer.getLoadedUrlCount());
2520 String url = mFakeServer.getLoadedUrl(); 2602 String url = mFakeServer.getLoadedUrl();
2521 2603
2522 // Expand Panel so that the Content becomes visible. 2604 // Expand Panel so that the Content becomes visible.
2523 tapPeekingBarToExpandAndAssert(); 2605 tapPeekingBarToExpandAndAssert();
2524 2606
2525 // Close the Panel. 2607 // Close the Panel.
2526 tapBasePageToClosePanel(); 2608 tapBasePageToClosePanel();
2527 2609
2528 // Now check that the URL has not been removed from history, since the C ontent was seen. 2610 // Now check that the URL has not been removed from history, since the C ontent was seen.
2529 assertFalse(mFakeServer.hasRemovedUrl(url)); 2611 Assert.assertFalse(mFakeServer.hasRemovedUrl(url));
2530 } 2612 }
2531 2613
2532 /** 2614 /**
2533 * Tests that chained searches without opening the Panel removes all loaded URLs from history. 2615 * Tests that chained searches without opening the Panel removes all loaded URLs from history.
2534 */ 2616 */
2617 @Test
2535 @SmallTest 2618 @SmallTest
2536 @Feature({"ContextualSearch"}) 2619 @Feature({"ContextualSearch"})
2537 public void testChainedTapsRemovedFromHistory() throws InterruptedException, TimeoutException { 2620 public void testChainedTapsRemovedFromHistory() throws InterruptedException, TimeoutException {
2538 // Simulate a tap and make sure a URL was loaded. 2621 // Simulate a tap and make sure a URL was loaded.
2539 simulateTapSearch("search"); 2622 simulateTapSearch("search");
2540 String url1 = mFakeServer.getLoadedUrl(); 2623 String url1 = mFakeServer.getLoadedUrl();
2541 assertNotNull(url1); 2624 Assert.assertNotNull(url1);
2542 2625
2543 waitToPreventDoubleTapRecognition(); 2626 waitToPreventDoubleTapRecognition();
2544 2627
2545 // Simulate another tap and make sure another URL was loaded. 2628 // Simulate another tap and make sure another URL was loaded.
2546 simulateTapSearch("term"); 2629 simulateTapSearch("term");
2547 String url2 = mFakeServer.getLoadedUrl(); 2630 String url2 = mFakeServer.getLoadedUrl();
2548 assertNotSame(url1, url2); 2631 Assert.assertNotSame(url1, url2);
2549 2632
2550 waitToPreventDoubleTapRecognition(); 2633 waitToPreventDoubleTapRecognition();
2551 2634
2552 // Simulate another tap and make sure another URL was loaded. 2635 // Simulate another tap and make sure another URL was loaded.
2553 simulateTapSearch("resolution"); 2636 simulateTapSearch("resolution");
2554 String url3 = mFakeServer.getLoadedUrl(); 2637 String url3 = mFakeServer.getLoadedUrl();
2555 assertNotSame(url2, url3); 2638 Assert.assertNotSame(url2, url3);
2556 2639
2557 // Close the Panel without seeing any Content. 2640 // Close the Panel without seeing any Content.
2558 closePanel(); 2641 closePanel();
2559 2642
2560 // Now check that all three URLs have been removed from history. 2643 // Now check that all three URLs have been removed from history.
2561 assertEquals(3, mFakeServer.getLoadedUrlCount()); 2644 Assert.assertEquals(3, mFakeServer.getLoadedUrlCount());
2562 assertTrue(mFakeServer.hasRemovedUrl(url1)); 2645 Assert.assertTrue(mFakeServer.hasRemovedUrl(url1));
2563 assertTrue(mFakeServer.hasRemovedUrl(url2)); 2646 Assert.assertTrue(mFakeServer.hasRemovedUrl(url2));
2564 assertTrue(mFakeServer.hasRemovedUrl(url3)); 2647 Assert.assertTrue(mFakeServer.hasRemovedUrl(url3));
2565 } 2648 }
2566 2649
2567 //========================================================================== ================== 2650 //========================================================================== ==================
2568 // Translate Tests 2651 // Translate Tests
2569 //========================================================================== ================== 2652 //========================================================================== ==================
2570 2653
2571 /** 2654 /**
2572 * Tests that a simple Tap with language determination triggers translation. 2655 * Tests that a simple Tap with language determination triggers translation.
2573 */ 2656 */
2657 @Test
2574 @SmallTest 2658 @SmallTest
2575 @Feature({"ContextualSearch"}) 2659 @Feature({"ContextualSearch"})
2576 public void testTapWithLanguage() throws InterruptedException, TimeoutExcept ion { 2660 public void testTapWithLanguage() throws InterruptedException, TimeoutExcept ion {
2577 // Tapping a German word should trigger translation. 2661 // Tapping a German word should trigger translation.
2578 simulateTapSearch("german"); 2662 simulateTapSearch("german");
2579 2663
2580 // Make sure we tried to trigger translate. 2664 // Make sure we tried to trigger translate.
2581 assertTrue("Translation was not forced with the current request URL: " 2665 Assert.assertTrue("Translation was not forced with the current request U RL: "
2582 + mManager.getRequest().getSearchUrl(), 2666 + mManager.getRequest().getSearchUrl(),
2583 mManager.getRequest().isTranslationForced()); 2667 mManager.getRequest().isTranslationForced());
2584 } 2668 }
2585 2669
2586 /** 2670 /**
2587 * Tests translation with a simple Tap can be disabled. 2671 * Tests translation with a simple Tap can be disabled.
2588 */ 2672 */
2673 @Test
2589 @SmallTest 2674 @SmallTest
2590 @Feature({"ContextualSearch"}) 2675 @Feature({"ContextualSearch"})
2591 @CommandLineFlags.Add(ContextualSearchFieldTrial.DISABLE_TRANSLATION + "=tru e") 2676 @CommandLineFlags.Add(ContextualSearchFieldTrial.DISABLE_TRANSLATION + "=tru e")
2592 public void testTapDisabled() throws InterruptedException, TimeoutException { 2677 public void testTapDisabled() throws InterruptedException, TimeoutException {
2593 // Tapping a German word would normally trigger translation, but not wit h the above flag. 2678 // Tapping a German word would normally trigger translation, but not wit h the above flag.
2594 simulateTapSearch("german"); 2679 simulateTapSearch("german");
2595 2680
2596 // Make sure we did not try to trigger translate. 2681 // Make sure we did not try to trigger translate.
2597 assertFalse(mManager.getRequest().isTranslationForced()); 2682 Assert.assertFalse(mManager.getRequest().isTranslationForced());
2598 } 2683 }
2599 2684
2600 /** 2685 /**
2601 * Tests that a simple Tap without language determination does not trigger t ranslation. 2686 * Tests that a simple Tap without language determination does not trigger t ranslation.
2602 */ 2687 */
2688 @Test
2603 @SmallTest 2689 @SmallTest
2604 @Feature({"ContextualSearch"}) 2690 @Feature({"ContextualSearch"})
2605 public void testTapWithoutLanguage() throws InterruptedException, TimeoutExc eption { 2691 public void testTapWithoutLanguage() throws InterruptedException, TimeoutExc eption {
2606 // Tapping an English word should NOT trigger translation. 2692 // Tapping an English word should NOT trigger translation.
2607 simulateTapSearch("search"); 2693 simulateTapSearch("search");
2608 2694
2609 // Make sure we did not try to trigger translate. 2695 // Make sure we did not try to trigger translate.
2610 assertFalse(mManager.getRequest().isTranslationForced()); 2696 Assert.assertFalse(mManager.getRequest().isTranslationForced());
2611 } 2697 }
2612 2698
2613 /** 2699 /**
2614 * Tests that a long-press does trigger translation. 2700 * Tests that a long-press does trigger translation.
2615 */ 2701 */
2702 @Test
2616 @SmallTest 2703 @SmallTest
2617 @Feature({"ContextualSearch"}) 2704 @Feature({"ContextualSearch"})
2618 public void testLongpressTranslates() throws InterruptedException, TimeoutEx ception { 2705 public void testLongpressTranslates() throws InterruptedException, TimeoutEx ception {
2619 // LongPress on any word should trigger translation. 2706 // LongPress on any word should trigger translation.
2620 simulateLongPressSearch("search"); 2707 simulateLongPressSearch("search");
2621 2708
2622 // Make sure we did try to trigger translate. 2709 // Make sure we did try to trigger translate.
2623 assertTrue(mManager.getRequest().isTranslationForced()); 2710 Assert.assertTrue(mManager.getRequest().isTranslationForced());
2624 } 2711 }
2625 2712
2626 /** 2713 /**
2627 * Tests that a long-press does NOT trigger translation when disabled. 2714 * Tests that a long-press does NOT trigger translation when disabled.
2628 */ 2715 */
2716 @Test
2629 @SmallTest 2717 @SmallTest
2630 @Feature({"ContextualSearch"}) 2718 @Feature({"ContextualSearch"})
2631 @CommandLineFlags.Add(ContextualSearchFieldTrial.DISABLE_TRANSLATION + "=tru e") 2719 @CommandLineFlags.Add(ContextualSearchFieldTrial.DISABLE_TRANSLATION + "=tru e")
2632 public void testLongpressTranslateDisabledDoesNotTranslate() 2720 public void testLongpressTranslateDisabledDoesNotTranslate()
2633 throws InterruptedException, TimeoutException { 2721 throws InterruptedException, TimeoutException {
2634 // When disabled, LongPress on any word should not trigger translation. 2722 // When disabled, LongPress on any word should not trigger translation.
2635 simulateLongPressSearch("search"); 2723 simulateLongPressSearch("search");
2636 2724
2637 // Make sure we did not try to trigger translate. 2725 // Make sure we did not try to trigger translate.
2638 assertFalse(mManager.getRequest().isTranslationForced()); 2726 Assert.assertFalse(mManager.getRequest().isTranslationForced());
2639 } 2727 }
2640 2728
2641 /** 2729 /**
2642 * Tests that Contextual Search works in fullscreen. Specifically, tests tha t tapping a word 2730 * Tests that Contextual Search works in fullscreen. Specifically, tests tha t tapping a word
2643 * peeks the panel, expanding the bar results in the bar ending at the corre ct spot in the page 2731 * peeks the panel, expanding the bar results in the bar ending at the corre ct spot in the page
2644 * and tapping the base page closes the panel. 2732 * and tapping the base page closes the panel.
2645 */ 2733 */
2734 @Test
2646 @SmallTest 2735 @SmallTest
2647 @Feature({"ContextualSearch"}) 2736 @Feature({"ContextualSearch"})
2648 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) 2737 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE)
2649 public void testTapContentAndExpandPanelInFullscreen() 2738 public void testTapContentAndExpandPanelInFullscreen()
2650 throws InterruptedException, TimeoutException { 2739 throws InterruptedException, TimeoutException {
2651 // Toggle tab to fulllscreen. 2740 // Toggle tab to fulllscreen.
2652 FullscreenTestUtils.togglePersistentFullscreenAndAssert(getActivity().ge tActivityTab(), 2741 FullscreenTestUtils.togglePersistentFullscreenAndAssert(
2653 true, getActivity()); 2742 mActivityTestRule.getActivity().getActivityTab(), true,
2743 mActivityTestRule.getActivity());
2654 2744
2655 // Simulate a tap and assert that the panel peeks. 2745 // Simulate a tap and assert that the panel peeks.
2656 simulateTapSearch("search"); 2746 simulateTapSearch("search");
2657 2747
2658 // Expand the panel and assert that it ends up in the right place. 2748 // Expand the panel and assert that it ends up in the right place.
2659 tapPeekingBarToExpandAndAssert(); 2749 tapPeekingBarToExpandAndAssert();
2660 assertEquals(mManager.getContextualSearchPanel().getHeight(), 2750 Assert.assertEquals(mManager.getContextualSearchPanel().getHeight(),
2661 mManager.getContextualSearchPanel().getPanelHeightFromState(Pane lState.EXPANDED)); 2751 mManager.getContextualSearchPanel().getPanelHeightFromState(Pane lState.EXPANDED),
2752 0);
2662 2753
2663 // Tap the base page and assert that the panel is closed. 2754 // Tap the base page and assert that the panel is closed.
2664 tapBasePageToClosePanel(); 2755 tapBasePageToClosePanel();
2665 } 2756 }
2666 2757
2667 /** 2758 /**
2668 * Tests that the Contextual Search panel is dismissed when entering or exit ing fullscreen. 2759 * Tests that the Contextual Search panel is dismissed when entering or exit ing fullscreen.
2669 */ 2760 */
2761 @Test
2670 @SmallTest 2762 @SmallTest
2671 @Feature({"ContextualSearch"}) 2763 @Feature({"ContextualSearch"})
2672 public void testPanelDismissedOnToggleFullscreen() 2764 public void testPanelDismissedOnToggleFullscreen()
2673 throws InterruptedException, TimeoutException { 2765 throws InterruptedException, TimeoutException {
2674 // Simulate a tap and assert that the panel peeks. 2766 // Simulate a tap and assert that the panel peeks.
2675 simulateTapSearch("search"); 2767 simulateTapSearch("search");
2676 2768
2677 // Toggle tab to fullscreen. 2769 // Toggle tab to fullscreen.
2678 Tab tab = getActivity().getActivityTab(); 2770 Tab tab = mActivityTestRule.getActivity().getActivityTab();
2679 FullscreenTestUtils.togglePersistentFullscreenAndAssert(tab, true, getAc tivity()); 2771 FullscreenTestUtils.togglePersistentFullscreenAndAssert(
2772 tab, true, mActivityTestRule.getActivity());
2680 2773
2681 // Assert that the panel is closed. 2774 // Assert that the panel is closed.
2682 waitForPanelToClose(); 2775 waitForPanelToClose();
2683 2776
2684 // Simulate a tap and assert that the panel peeks. 2777 // Simulate a tap and assert that the panel peeks.
2685 simulateTapSearch("search"); 2778 simulateTapSearch("search");
2686 2779
2687 // Toggle tab to non-fullscreen. 2780 // Toggle tab to non-fullscreen.
2688 FullscreenTestUtils.togglePersistentFullscreenAndAssert(tab, false, getA ctivity()); 2781 FullscreenTestUtils.togglePersistentFullscreenAndAssert(
2782 tab, false, mActivityTestRule.getActivity());
2689 2783
2690 // Assert that the panel is closed. 2784 // Assert that the panel is closed.
2691 waitForPanelToClose(); 2785 waitForPanelToClose();
2692 } 2786 }
2693 2787
2694 /** 2788 /**
2695 * Tests that ContextualSearchImageControl correctly sets either the icon sp rite or thumbnail 2789 * Tests that ContextualSearchImageControl correctly sets either the icon sp rite or thumbnail
2696 * as visible. 2790 * as visible.
2697 */ 2791 */
2792 @Test
2698 @SmallTest 2793 @SmallTest
2699 @Feature({"ContextualSearch"}) 2794 @Feature({"ContextualSearch"})
2700 public void testImageControl() throws InterruptedException, TimeoutException { 2795 public void testImageControl() throws InterruptedException, TimeoutException {
2701 simulateTapSearch("search"); 2796 simulateTapSearch("search");
2702 2797
2703 final ContextualSearchImageControl imageControl = mPanel.getImageControl (); 2798 final ContextualSearchImageControl imageControl = mPanel.getImageControl ();
2704 2799
2705 assertFalse(imageControl.getThumbnailVisible()); 2800 Assert.assertFalse(imageControl.getThumbnailVisible());
2706 assertTrue(TextUtils.isEmpty(imageControl.getThumbnailUrl())); 2801 Assert.assertTrue(TextUtils.isEmpty(imageControl.getThumbnailUrl()));
2707 2802
2708 ThreadUtils.runOnUiThreadBlocking(new Runnable() { 2803 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
2709 @Override 2804 @Override
2710 public void run() { 2805 public void run() {
2711 imageControl.setThumbnailUrl("http://someimageurl.com/image.png" ); 2806 imageControl.setThumbnailUrl("http://someimageurl.com/image.png" );
2712 imageControl.onThumbnailFetched(true); 2807 imageControl.onThumbnailFetched(true);
2713 } 2808 }
2714 }); 2809 });
2715 2810
2716 assertTrue(imageControl.getThumbnailVisible()); 2811 Assert.assertTrue(imageControl.getThumbnailVisible());
2717 assertEquals(imageControl.getThumbnailUrl(), "http://someimageurl.com/im age.png"); 2812 Assert.assertEquals(imageControl.getThumbnailUrl(), "http://someimageurl .com/image.png");
2718 2813
2719 ThreadUtils.runOnUiThreadBlocking(new Runnable() { 2814 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
2720 @Override 2815 @Override
2721 public void run() { 2816 public void run() {
2722 imageControl.hideCustomImage(false); 2817 imageControl.hideCustomImage(false);
2723 } 2818 }
2724 }); 2819 });
2725 2820
2726 assertFalse(imageControl.getThumbnailVisible()); 2821 Assert.assertFalse(imageControl.getThumbnailVisible());
2727 assertTrue(TextUtils.isEmpty(imageControl.getThumbnailUrl())); 2822 Assert.assertTrue(TextUtils.isEmpty(imageControl.getThumbnailUrl()));
2728 } 2823 }
2729 2824
2730 // TODO(twellington): Add an end-to-end integration test for fetching a thum bnail based on a 2825 // TODO(twellington): Add an end-to-end integration test for fetching a thum bnail based on a
2731 // a URL that is included with the resolution response. 2826 // a URL that is included with the resolution response.
2732 2827
2733 /** 2828 /**
2734 * Tests that Contextual Search is fully disabled when offline. 2829 * Tests that Contextual Search is fully disabled when offline.
2735 */ 2830 */
2831 @Test
2736 @SmallTest 2832 @SmallTest
2737 @Feature({"ContextualSearch"}) 2833 @Feature({"ContextualSearch"})
2738 // NOTE: Remove the flag so we will run just this test with onLine detection enabled. 2834 // NOTE: Remove the flag so we will run just this test with onLine detection enabled.
2739 @CommandLineFlags.Remove(ContextualSearchFieldTrial.ONLINE_DETECTION_DISABLE D) 2835 @CommandLineFlags.Remove(ContextualSearchFieldTrial.ONLINE_DETECTION_DISABLE D)
2740 public void testNetworkDisconnectedDeactivatesSearch() 2836 public void testNetworkDisconnectedDeactivatesSearch()
2741 throws InterruptedException, TimeoutException { 2837 throws InterruptedException, TimeoutException {
2742 setOnlineStatusAndReload(false); 2838 setOnlineStatusAndReload(false);
2743 longPressNodeWithoutWaiting("states"); 2839 longPressNodeWithoutWaiting("states");
2744 waitForSelectActionBarVisible(); 2840 waitForSelectActionBarVisible();
2745 // Verify the panel didn't open. It should open by now if CS has not be en disabled. 2841 // Verify the panel didn't open. It should open by now if CS has not be en disabled.
2746 // TODO(donnd): Consider waiting for some condition to be sure we'll cat ch all failures, 2842 // TODO(donnd): Consider waiting for some condition to be sure we'll cat ch all failures,
2747 // e.g. in case the Bar is about to show but has not yet appeared. Curr ently catches ~90%. 2843 // e.g. in case the Bar is about to show but has not yet appeared. Curr ently catches ~90%.
2748 assertPanelClosedOrUndefined(); 2844 assertPanelClosedOrUndefined();
2749 2845
2750 // Similar sequence with network connected should peek for Longpress. 2846 // Similar sequence with network connected should peek for Longpress.
2751 setOnlineStatusAndReload(true); 2847 setOnlineStatusAndReload(true);
2752 longPressNodeWithoutWaiting("states"); 2848 longPressNodeWithoutWaiting("states");
2753 waitForSelectActionBarVisible(); 2849 waitForSelectActionBarVisible();
2754 waitForPanelToPeek(); 2850 waitForPanelToPeek();
2755 } 2851 }
2756 2852
2757 /** 2853 /**
2758 * Tests that the quick action caption is set correctly when one is availabl e. Also tests that 2854 * Tests that the quick action caption is set correctly when one is availabl e. Also tests that
2759 * the caption gets changed when the panel is expanded and reset when the pa nel is closed. 2855 * the caption gets changed when the panel is expanded and reset when the pa nel is closed.
2760 */ 2856 */
2857 @Test
2761 @SmallTest 2858 @SmallTest
2762 @Feature({"ContextualSearch"}) 2859 @Feature({"ContextualSearch"})
2763 public void testQuickActionCaptionAndImage() throws InterruptedException, Ti meoutException { 2860 public void testQuickActionCaptionAndImage() throws InterruptedException, Ti meoutException {
2764 // Simulate a tap to show the Bar, then set the quick action data. 2861 // Simulate a tap to show the Bar, then set the quick action data.
2765 simulateTapSearch("search"); 2862 simulateTapSearch("search");
2766 ThreadUtils.runOnUiThreadBlocking(new Runnable() { 2863 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
2767 @Override 2864 @Override
2768 public void run() { 2865 public void run() {
2769 mPanel.onSearchTermResolved("search", null, "tel:555-555-5555", 2866 mPanel.onSearchTermResolved("search", null, "tel:555-555-5555",
2770 QuickActionCategory.PHONE); 2867 QuickActionCategory.PHONE);
2771 // Finish all running animations. 2868 // Finish all running animations.
2772 mPanel.onUpdateAnimation(System.currentTimeMillis(), true); 2869 mPanel.onUpdateAnimation(System.currentTimeMillis(), true);
2773 } 2870 }
2774 }); 2871 });
2775 2872
2776 ContextualSearchBarControl barControl = mPanel.getSearchBarControl(); 2873 ContextualSearchBarControl barControl = mPanel.getSearchBarControl();
2777 ContextualSearchQuickActionControl quickActionControl = barControl.getQu ickActionControl(); 2874 ContextualSearchQuickActionControl quickActionControl = barControl.getQu ickActionControl();
2778 ContextualSearchImageControl imageControl = mPanel.getImageControl(); 2875 ContextualSearchImageControl imageControl = mPanel.getImageControl();
2779 2876
2780 // Check that the peeking bar is showing the quick action data. 2877 // Check that the peeking bar is showing the quick action data.
2781 assertTrue(quickActionControl.hasQuickAction()); 2878 Assert.assertTrue(quickActionControl.hasQuickAction());
2782 assertTrue(barControl.getCaptionVisible()); 2879 Assert.assertTrue(barControl.getCaptionVisible());
2783 assertEquals(getActivity().getResources().getString( 2880 Assert.assertEquals(mActivityTestRule.getActivity().getResources().getSt ring(
2784 R.string.contextual_search_quick_action_caption_phone), 2881 R.string.contextual_search_quick_action_capt ion_phone),
2785 barControl.getCaptionText()); 2882 barControl.getCaptionText());
2786 assertEquals(1.f, imageControl.getCustomImageVisibilityPercentage()); 2883 Assert.assertEquals(1.f, imageControl.getCustomImageVisibilityPercentage (), 0);
2787 2884
2788 // Expand the bar. 2885 // Expand the bar.
2789 ThreadUtils.runOnUiThreadBlocking(new Runnable() { 2886 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
2790 @Override 2887 @Override
2791 public void run() { 2888 public void run() {
2792 mPanel.simulateTapOnEndButton(); 2889 mPanel.simulateTapOnEndButton();
2793 } 2890 }
2794 }); 2891 });
2795 waitForPanelToExpand(); 2892 waitForPanelToExpand();
2796 2893
2797 // Check that the expanded bar is showing the correct image and caption. 2894 // Check that the expanded bar is showing the correct image and caption.
2798 assertTrue(barControl.getCaptionVisible()); 2895 Assert.assertTrue(barControl.getCaptionVisible());
2799 assertEquals(getActivity().getResources().getString( 2896 Assert.assertEquals(mActivityTestRule.getActivity().getResources().getSt ring(
2800 ContextualSearchCaptionControl.EXPANED_CAPTION_ID), 2897 ContextualSearchCaptionControl.EXPANED_CAPTI ON_ID),
2801 barControl.getCaptionText()); 2898 barControl.getCaptionText());
2802 assertEquals(0.f, imageControl.getCustomImageVisibilityPercentage()); 2899 Assert.assertEquals(0.f, imageControl.getCustomImageVisibilityPercentage (), 0);
2803 2900
2804 // Go back to peeking. 2901 // Go back to peeking.
2805 swipePanelDown(); 2902 swipePanelDown();
2806 waitForPanelToPeek(); 2903 waitForPanelToPeek();
2807 2904
2808 // Assert that the quick action data is showing. 2905 // Assert that the quick action data is showing.
2809 assertTrue(barControl.getCaptionVisible()); 2906 Assert.assertTrue(barControl.getCaptionVisible());
2810 assertEquals(getActivity().getResources().getString( 2907 Assert.assertEquals(mActivityTestRule.getActivity().getResources().getSt ring(
2811 R.string.contextual_search_quick_action_caption_phone), 2908 R.string.contextual_search_quick_action_capt ion_phone),
2812 barControl.getCaptionText()); 2909 barControl.getCaptionText());
2813 assertEquals(1.f, imageControl.getCustomImageVisibilityPercentage()); 2910 Assert.assertEquals(1.f, imageControl.getCustomImageVisibilityPercentage (), 0);
2814 } 2911 }
2815 2912
2816 /** 2913 /**
2817 * Tests that an intent is sent when the bar is tapped and a quick action is available. 2914 * Tests that an intent is sent when the bar is tapped and a quick action is available.
2818 */ 2915 */
2916 @Test
2819 @SmallTest 2917 @SmallTest
2820 @Feature({"ContextualSearch"}) 2918 @Feature({"ContextualSearch"})
2821 public void testQuickActionIntent() throws InterruptedException, TimeoutExce ption { 2919 public void testQuickActionIntent() throws InterruptedException, TimeoutExce ption {
2822 // Add a new filter to the activity monitor that matches the intent that should be fired. 2920 // Add a new filter to the activity monitor that matches the intent that should be fired.
2823 IntentFilter quickActionFilter = new IntentFilter(Intent.ACTION_VIEW); 2921 IntentFilter quickActionFilter = new IntentFilter(Intent.ACTION_VIEW);
2824 quickActionFilter.addDataScheme("tel"); 2922 quickActionFilter.addDataScheme("tel");
2825 mActivityMonitor = getInstrumentation().addMonitor( 2923 mActivityMonitor =
2826 quickActionFilter, new Instrumentation.ActivityResult(Activity.R ESULT_OK, null), 2924 InstrumentationRegistry.getInstrumentation().addMonitor(quickAct ionFilter,
2827 true); 2925 new Instrumentation.ActivityResult(Activity.RESULT_OK, n ull), true);
2828 2926
2829 // Simulate a tap to show the Bar, then set the quick action data. 2927 // Simulate a tap to show the Bar, then set the quick action data.
2830 simulateTapSearch("search"); 2928 simulateTapSearch("search");
2831 ThreadUtils.runOnUiThreadBlocking(new Runnable() { 2929 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
2832 @Override 2930 @Override
2833 public void run() { 2931 public void run() {
2834 mPanel.onSearchTermResolved("search", null, "tel:555-555-5555", 2932 mPanel.onSearchTermResolved("search", null, "tel:555-555-5555",
2835 QuickActionCategory.PHONE); 2933 QuickActionCategory.PHONE);
2836 } 2934 }
2837 }); 2935 });
2838 2936
2839 // Tap on the portion of the bar that should trigger the quick action in tent to be fired. 2937 // Tap on the portion of the bar that should trigger the quick action in tent to be fired.
2840 clickPanelBar(); 2938 clickPanelBar();
2841 2939
2842 // Assert that an intent was fired. 2940 // Assert that an intent was fired.
2843 assertEquals(1, mActivityMonitor.getHits()); 2941 Assert.assertEquals(1, mActivityMonitor.getHits());
2844 } 2942 }
2845 2943
2846 /** 2944 /**
2847 * Tests that the current tab is navigated to the quick action URI for 2945 * Tests that the current tab is navigated to the quick action URI for
2848 * QuickActionCategory#WEBSITE. 2946 * QuickActionCategory#WEBSITE.
2849 */ 2947 */
2948 @Test
2850 @SmallTest 2949 @SmallTest
2851 @Feature({"ContextualSearch"}) 2950 @Feature({"ContextualSearch"})
2852 public void testQuickActionUrl() throws InterruptedException, TimeoutExcepti on { 2951 public void testQuickActionUrl() throws InterruptedException, TimeoutExcepti on {
2853 final String testUrl = mTestServer.getURL("/chrome/test/data/android/goo gle.html"); 2952 final String testUrl = mTestServer.getURL("/chrome/test/data/android/goo gle.html");
2854 2953
2855 // Simulate a tap to show the Bar, then set the quick action data. 2954 // Simulate a tap to show the Bar, then set the quick action data.
2856 simulateTapSearch("search"); 2955 simulateTapSearch("search");
2857 ThreadUtils.runOnUiThreadBlocking(new Runnable() { 2956 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
2858 @Override 2957 @Override
2859 public void run() { 2958 public void run() {
2860 mPanel.onSearchTermResolved("search", null, testUrl, QuickAction Category.WEBSITE); 2959 mPanel.onSearchTermResolved("search", null, testUrl, QuickAction Category.WEBSITE);
2861 } 2960 }
2862 }); 2961 });
2863 2962
2864 // Tap on the portion of the bar that should trigger the quick action. 2963 // Tap on the portion of the bar that should trigger the quick action.
2865 clickPanelBar(); 2964 clickPanelBar();
2866 2965
2867 // Assert that the URL was loaded. 2966 // Assert that the URL was loaded.
2868 ChromeTabUtils.waitForTabPageLoaded(getActivity().getActivityTab(), test Url); 2967 ChromeTabUtils.waitForTabPageLoaded(
2968 mActivityTestRule.getActivity().getActivityTab(), testUrl);
2869 } 2969 }
2870 } 2970 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698