OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.chrome.browser.customtabs; | 5 package org.chromium.chrome.browser.customtabs; |
6 | 6 |
7 import static org.chromium.base.test.util.Restriction.RESTRICTION_TYPE_NON_LOW_E
ND_DEVICE; | 7 import static org.chromium.base.test.util.Restriction.RESTRICTION_TYPE_NON_LOW_E
ND_DEVICE; |
8 | 8 |
9 import android.app.Application; | 9 import android.app.Application; |
10 import android.content.Context; | 10 import android.content.Context; |
11 import android.content.Intent; | 11 import android.content.Intent; |
12 import android.net.Uri; | 12 import android.net.Uri; |
13 import android.os.Build; | 13 import android.os.Build; |
14 import android.os.Bundle; | 14 import android.os.Bundle; |
15 import android.os.Process; | 15 import android.os.Process; |
16 import android.support.customtabs.CustomTabsService; | 16 import android.support.customtabs.CustomTabsService; |
17 import android.support.customtabs.CustomTabsSessionToken; | 17 import android.support.customtabs.CustomTabsSessionToken; |
| 18 import android.support.test.InstrumentationRegistry; |
18 import android.support.test.filters.SmallTest; | 19 import android.support.test.filters.SmallTest; |
19 import android.test.InstrumentationTestCase; | 20 |
| 21 import org.junit.After; |
| 22 import org.junit.Assert; |
| 23 import org.junit.Before; |
| 24 import org.junit.Test; |
| 25 import org.junit.runner.RunWith; |
20 | 26 |
21 import org.chromium.base.PathUtils; | 27 import org.chromium.base.PathUtils; |
22 import org.chromium.base.ThreadUtils; | 28 import org.chromium.base.ThreadUtils; |
23 import org.chromium.base.library_loader.LibraryLoader; | 29 import org.chromium.base.library_loader.LibraryLoader; |
24 import org.chromium.base.library_loader.LibraryProcessType; | 30 import org.chromium.base.library_loader.LibraryProcessType; |
25 import org.chromium.base.test.util.Restriction; | 31 import org.chromium.base.test.util.Restriction; |
26 import org.chromium.base.test.util.RetryOnFailure; | 32 import org.chromium.base.test.util.RetryOnFailure; |
27 import org.chromium.chrome.browser.WarmupManager; | 33 import org.chromium.chrome.browser.WarmupManager; |
28 import org.chromium.chrome.browser.preferences.PrefServiceBridge; | 34 import org.chromium.chrome.browser.preferences.PrefServiceBridge; |
| 35 import org.chromium.chrome.test.ChromeJUnit4ClassRunner; |
29 import org.chromium.content_public.browser.WebContents; | 36 import org.chromium.content_public.browser.WebContents; |
30 | 37 |
31 import java.util.ArrayList; | 38 import java.util.ArrayList; |
32 import java.util.List; | 39 import java.util.List; |
33 import java.util.concurrent.Callable; | 40 import java.util.concurrent.Callable; |
34 import java.util.concurrent.FutureTask; | 41 import java.util.concurrent.FutureTask; |
35 | 42 |
36 /** Tests for CustomTabsConnection. */ | 43 /** Tests for CustomTabsConnection. */ |
37 public class CustomTabsConnectionTest extends InstrumentationTestCase { | 44 @RunWith(ChromeJUnit4ClassRunner.class) |
| 45 public class CustomTabsConnectionTest { |
38 private CustomTabsConnection mCustomTabsConnection; | 46 private CustomTabsConnection mCustomTabsConnection; |
39 private static final String URL = "http://www.google.com"; | 47 private static final String URL = "http://www.google.com"; |
40 private static final String URL2 = "https://www.android.com"; | 48 private static final String URL2 = "https://www.android.com"; |
41 private static final String INVALID_SCHEME_URL = "intent://www.google.com"; | 49 private static final String INVALID_SCHEME_URL = "intent://www.google.com"; |
42 private static final String PRIVATE_DATA_DIRECTORY_SUFFIX = "chrome"; | 50 private static final String PRIVATE_DATA_DIRECTORY_SUFFIX = "chrome"; |
43 | 51 |
44 private Context mAppContext; | 52 private Context mAppContext; |
45 | 53 |
46 @Override | 54 @Before |
47 protected void setUp() throws Exception { | 55 public void setUp() throws Exception { |
48 super.setUp(); | 56 mAppContext = InstrumentationRegistry.getInstrumentation() |
49 mAppContext = getInstrumentation().getTargetContext().getApplicationCont
ext(); | 57 .getTargetContext() |
| 58 .getApplicationContext(); |
50 PathUtils.setPrivateDataDirectorySuffix(PRIVATE_DATA_DIRECTORY_SUFFIX); | 59 PathUtils.setPrivateDataDirectorySuffix(PRIVATE_DATA_DIRECTORY_SUFFIX); |
51 LibraryLoader.get(LibraryProcessType.PROCESS_BROWSER).ensureInitialized(
); | 60 LibraryLoader.get(LibraryProcessType.PROCESS_BROWSER).ensureInitialized(
); |
52 mCustomTabsConnection = CustomTabsTestUtils.setUpConnection((Application
) mAppContext); | 61 mCustomTabsConnection = CustomTabsTestUtils.setUpConnection((Application
) mAppContext); |
53 mCustomTabsConnection.resetThrottling(mAppContext, Process.myUid()); | 62 mCustomTabsConnection.resetThrottling(mAppContext, Process.myUid()); |
54 } | 63 } |
55 | 64 |
56 @Override | 65 @After |
57 protected void tearDown() throws Exception { | 66 public void tearDown() throws Exception { |
58 super.tearDown(); | |
59 CustomTabsTestUtils.cleanupSessions(mCustomTabsConnection); | 67 CustomTabsTestUtils.cleanupSessions(mCustomTabsConnection); |
60 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 68 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
61 @Override | 69 @Override |
62 public void run() { | 70 public void run() { |
63 WarmupManager.getInstance().destroySpareWebContents(); | 71 WarmupManager.getInstance().destroySpareWebContents(); |
64 } | 72 } |
65 }); | 73 }); |
66 } | 74 } |
67 | 75 |
68 /** | 76 /** |
69 * Tests that we can create a new session. Registering with a null callback | 77 * Tests that we can create a new session. Registering with a null callback |
70 * fails, as well as multiple sessions with the same callback. | 78 * fails, as well as multiple sessions with the same callback. |
71 */ | 79 */ |
| 80 @Test |
72 @SmallTest | 81 @SmallTest |
73 public void testNewSession() { | 82 public void testNewSession() { |
74 assertEquals(false, mCustomTabsConnection.newSession(null)); | 83 Assert.assertEquals(false, mCustomTabsConnection.newSession(null)); |
75 CustomTabsSessionToken token = CustomTabsSessionToken.createDummySession
TokenForTesting(); | 84 CustomTabsSessionToken token = CustomTabsSessionToken.createDummySession
TokenForTesting(); |
76 assertEquals(true, mCustomTabsConnection.newSession(token)); | 85 Assert.assertEquals(true, mCustomTabsConnection.newSession(token)); |
77 assertEquals(false, mCustomTabsConnection.newSession(token)); | 86 Assert.assertEquals(false, mCustomTabsConnection.newSession(token)); |
78 } | 87 } |
79 | 88 |
80 /** | 89 /** |
81 * Tests that we can create several sessions. | 90 * Tests that we can create several sessions. |
82 */ | 91 */ |
| 92 @Test |
83 @SmallTest | 93 @SmallTest |
84 public void testSeveralSessions() { | 94 public void testSeveralSessions() { |
85 CustomTabsSessionToken token = CustomTabsSessionToken.createDummySession
TokenForTesting(); | 95 CustomTabsSessionToken token = CustomTabsSessionToken.createDummySession
TokenForTesting(); |
86 assertEquals(true, mCustomTabsConnection.newSession(token)); | 96 Assert.assertEquals(true, mCustomTabsConnection.newSession(token)); |
87 CustomTabsSessionToken token2 = CustomTabsSessionToken.createDummySessio
nTokenForTesting(); | 97 CustomTabsSessionToken token2 = CustomTabsSessionToken.createDummySessio
nTokenForTesting(); |
88 assertEquals(true, mCustomTabsConnection.newSession(token2)); | 98 Assert.assertEquals(true, mCustomTabsConnection.newSession(token2)); |
89 } | 99 } |
90 | 100 |
91 /** | 101 /** |
92 * Tests that {@link CustomTabsConnection#warmup(long)} succeeds and can | 102 * Tests that {@link CustomTabsConnection#warmup(long)} succeeds and can |
93 * be issued multiple times. | 103 * be issued multiple times. |
94 */ | 104 */ |
| 105 @Test |
95 @SmallTest | 106 @SmallTest |
96 public void testCanWarmup() { | 107 public void testCanWarmup() { |
97 assertEquals(true, mCustomTabsConnection.warmup(0)); | 108 Assert.assertEquals(true, mCustomTabsConnection.warmup(0)); |
98 assertEquals(true, mCustomTabsConnection.warmup(0)); | 109 Assert.assertEquals(true, mCustomTabsConnection.warmup(0)); |
99 } | 110 } |
100 | 111 |
| 112 @Test |
101 @SmallTest | 113 @SmallTest |
102 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) | 114 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) |
103 public void testCreateSpareRenderer() { | 115 public void testCreateSpareRenderer() { |
104 assertTrue(mCustomTabsConnection.warmup(0)); | 116 Assert.assertTrue(mCustomTabsConnection.warmup(0)); |
105 // On UI thread because: | 117 // On UI thread because: |
106 // 1. takeSpareWebContents needs to be called from the UI thread. | 118 // 1. takeSpareWebContents needs to be called from the UI thread. |
107 // 2. warmup() is non-blocking and posts tasks to the UI thread, it ensu
res proper ordering. | 119 // 2. warmup() is non-blocking and posts tasks to the UI thread, it ensu
res proper ordering. |
108 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 120 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
109 @Override | 121 @Override |
110 public void run() { | 122 public void run() { |
111 WarmupManager warmupManager = WarmupManager.getInstance(); | 123 WarmupManager warmupManager = WarmupManager.getInstance(); |
112 assertTrue(warmupManager.hasSpareWebContents()); | 124 Assert.assertTrue(warmupManager.hasSpareWebContents()); |
113 WebContents webContents = warmupManager.takeSpareWebContents(fal
se, false); | 125 WebContents webContents = warmupManager.takeSpareWebContents(fal
se, false); |
114 assertNotNull(webContents); | 126 Assert.assertNotNull(webContents); |
115 assertFalse(warmupManager.hasSpareWebContents()); | 127 Assert.assertFalse(warmupManager.hasSpareWebContents()); |
116 webContents.destroy(); | 128 webContents.destroy(); |
117 } | 129 } |
118 }); | 130 }); |
119 } | 131 } |
120 | 132 |
| 133 @Test |
121 @SmallTest | 134 @SmallTest |
122 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) | 135 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) |
123 public void testCreateSpareRendererCanBeRecreated() { | 136 public void testCreateSpareRendererCanBeRecreated() { |
124 assertTrue(mCustomTabsConnection.warmup(0)); | 137 Assert.assertTrue(mCustomTabsConnection.warmup(0)); |
125 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 138 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
126 @Override | 139 @Override |
127 public void run() { | 140 public void run() { |
128 assertSpareWebContentsNotNullAndDestroy(); | 141 assertSpareWebContentsNotNullAndDestroy(); |
129 assertFalse(WarmupManager.getInstance().hasSpareWebContents()); | 142 Assert.assertFalse(WarmupManager.getInstance().hasSpareWebConten
ts()); |
130 } | 143 } |
131 }); | 144 }); |
132 assertTrue(mCustomTabsConnection.warmup(0)); | 145 Assert.assertTrue(mCustomTabsConnection.warmup(0)); |
133 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 146 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
134 @Override | 147 @Override |
135 public void run() { | 148 public void run() { |
136 assertSpareWebContentsNotNullAndDestroy(); | 149 assertSpareWebContentsNotNullAndDestroy(); |
137 } | 150 } |
138 }); | 151 }); |
139 } | 152 } |
140 | 153 |
| 154 @Test |
141 @SmallTest | 155 @SmallTest |
142 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) | 156 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) |
143 public void testPrerenderDestroysSpareRenderer() { | 157 public void testPrerenderDestroysSpareRenderer() { |
144 final CustomTabsSessionToken token = assertWarmupAndMayLaunchUrl(null, U
RL, true); | 158 final CustomTabsSessionToken token = assertWarmupAndMayLaunchUrl(null, U
RL, true); |
145 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 159 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
146 @Override | 160 @Override |
147 public void run() { | 161 public void run() { |
148 assertFalse(WarmupManager.getInstance().hasSpareWebContents()); | 162 Assert.assertFalse(WarmupManager.getInstance().hasSpareWebConten
ts()); |
149 String referrer = | 163 String referrer = |
150 mCustomTabsConnection.getReferrerForSession(token).getUr
l(); | 164 mCustomTabsConnection.getReferrerForSession(token).getUr
l(); |
151 WebContents webContents = | 165 WebContents webContents = |
152 mCustomTabsConnection.takePrerenderedUrl(token, URL, ref
errer); | 166 mCustomTabsConnection.takePrerenderedUrl(token, URL, ref
errer); |
153 assertNotNull(webContents); | 167 Assert.assertNotNull(webContents); |
154 webContents.destroy(); | 168 webContents.destroy(); |
155 } | 169 } |
156 }); | 170 }); |
157 } | 171 } |
158 | 172 |
159 /* | 173 /* |
160 * Tests that when the disconnection notification comes from a non-UI thread
, Chrome doesn't | 174 * Tests that when the disconnection notification comes from a non-UI thread
, Chrome doesn't |
161 * crash. Non-regression test for crbug.com/623128. | 175 * crash. Non-regression test for crbug.com/623128. |
162 */ | 176 */ |
| 177 @Test |
163 @SmallTest | 178 @SmallTest |
164 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) | 179 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) |
165 public void testPrerenderAndDisconnectOnOtherThread() { | 180 public void testPrerenderAndDisconnectOnOtherThread() { |
166 final CustomTabsSessionToken token = assertWarmupAndMayLaunchUrl(null, U
RL, true); | 181 final CustomTabsSessionToken token = assertWarmupAndMayLaunchUrl(null, U
RL, true); |
167 final Thread otherThread = new Thread(new Runnable() { | 182 final Thread otherThread = new Thread(new Runnable() { |
168 @Override | 183 @Override |
169 public void run() { | 184 public void run() { |
170 mCustomTabsConnection.cleanUpSession(token); | 185 mCustomTabsConnection.cleanUpSession(token); |
171 } | 186 } |
172 }); | 187 }); |
173 | 188 |
174 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 189 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
175 @Override | 190 @Override |
176 public void run() { | 191 public void run() { |
177 otherThread.start(); | 192 otherThread.start(); |
178 } | 193 } |
179 }); | 194 }); |
180 // Should not crash, hence no assertions below. | 195 // Should not crash, hence no assertions below. |
181 } | 196 } |
182 | 197 |
| 198 @Test |
183 @SmallTest | 199 @SmallTest |
184 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) | 200 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) |
185 public void testMayLaunchUrlKeepsSpareRendererWithoutPrerendering() { | 201 public void testMayLaunchUrlKeepsSpareRendererWithoutPrerendering() { |
186 assertTrue(mCustomTabsConnection.warmup(0)); | 202 Assert.assertTrue(mCustomTabsConnection.warmup(0)); |
187 final CustomTabsSessionToken token = | 203 final CustomTabsSessionToken token = |
188 CustomTabsSessionToken.createDummySessionTokenForTesting(); | 204 CustomTabsSessionToken.createDummySessionTokenForTesting(); |
189 assertTrue(mCustomTabsConnection.newSession(token)); | 205 Assert.assertTrue(mCustomTabsConnection.newSession(token)); |
190 | 206 |
191 Bundle extras = new Bundle(); | 207 Bundle extras = new Bundle(); |
192 extras.putInt( | 208 extras.putInt( |
193 CustomTabsConnection.DEBUG_OVERRIDE_KEY, CustomTabsConnection.NO
_PRERENDERING); | 209 CustomTabsConnection.DEBUG_OVERRIDE_KEY, CustomTabsConnection.NO
_PRERENDERING); |
194 assertTrue(mCustomTabsConnection.mayLaunchUrl(token, Uri.parse(URL), ext
ras, null)); | 210 Assert.assertTrue(mCustomTabsConnection.mayLaunchUrl(token, Uri.parse(UR
L), extras, null)); |
195 | 211 |
196 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 212 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
197 @Override | 213 @Override |
198 public void run() { | 214 public void run() { |
199 assertSpareWebContentsNotNullAndDestroy(); | 215 assertSpareWebContentsNotNullAndDestroy(); |
200 } | 216 } |
201 }); | 217 }); |
202 } | 218 } |
203 | 219 |
| 220 @Test |
204 @SmallTest | 221 @SmallTest |
205 public void testMayLaunchUrlNullOrEmptyUrl() { | 222 public void testMayLaunchUrlNullOrEmptyUrl() { |
206 assertWarmupAndMayLaunchUrl(null, null, true); | 223 assertWarmupAndMayLaunchUrl(null, null, true); |
207 CustomTabsTestUtils.cleanupSessions(mCustomTabsConnection); // Resets th
rottling. | 224 CustomTabsTestUtils.cleanupSessions(mCustomTabsConnection); // Resets th
rottling. |
208 assertWarmupAndMayLaunchUrl(null, "", true); | 225 assertWarmupAndMayLaunchUrl(null, "", true); |
209 } | 226 } |
210 | 227 |
| 228 @Test |
211 @SmallTest | 229 @SmallTest |
212 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) | 230 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) |
213 public void testUnderstandsLowConfidenceMayLaunchUrl() { | 231 public void testUnderstandsLowConfidenceMayLaunchUrl() { |
214 final CustomTabsSessionToken token = | 232 final CustomTabsSessionToken token = |
215 CustomTabsSessionToken.createDummySessionTokenForTesting(); | 233 CustomTabsSessionToken.createDummySessionTokenForTesting(); |
216 assertTrue(mCustomTabsConnection.newSession(token)); | 234 Assert.assertTrue(mCustomTabsConnection.newSession(token)); |
217 List<Bundle> urls = new ArrayList<>(); | 235 List<Bundle> urls = new ArrayList<>(); |
218 Bundle urlBundle = new Bundle(); | 236 Bundle urlBundle = new Bundle(); |
219 urlBundle.putParcelable(CustomTabsService.KEY_URL, Uri.parse(URL)); | 237 urlBundle.putParcelable(CustomTabsService.KEY_URL, Uri.parse(URL)); |
220 urls.add(urlBundle); | 238 urls.add(urlBundle); |
221 mCustomTabsConnection.mayLaunchUrl(token, null, null, urls); | 239 mCustomTabsConnection.mayLaunchUrl(token, null, null, urls); |
222 | 240 |
223 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 241 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
224 @Override | 242 @Override |
225 public void run() { | 243 public void run() { |
226 assertSpareWebContentsNotNullAndDestroy(); | 244 assertSpareWebContentsNotNullAndDestroy(); |
227 String referrer = mCustomTabsConnection.getReferrerForSession(to
ken).getUrl(); | 245 String referrer = mCustomTabsConnection.getReferrerForSession(to
ken).getUrl(); |
228 assertNull(mCustomTabsConnection.takePrerenderedUrl(token, URL,
referrer)); | 246 Assert.assertNull(mCustomTabsConnection.takePrerenderedUrl(token
, URL, referrer)); |
229 } | 247 } |
230 }); | 248 }); |
231 } | 249 } |
232 | 250 |
| 251 @Test |
233 @SmallTest | 252 @SmallTest |
234 public void testLowConfidenceMayLaunchUrlOnlyAcceptUris() { | 253 public void testLowConfidenceMayLaunchUrlOnlyAcceptUris() { |
235 final CustomTabsSessionToken token = | 254 final CustomTabsSessionToken token = |
236 CustomTabsSessionToken.createDummySessionTokenForTesting(); | 255 CustomTabsSessionToken.createDummySessionTokenForTesting(); |
237 assertTrue(mCustomTabsConnection.newSession(token)); | 256 Assert.assertTrue(mCustomTabsConnection.newSession(token)); |
238 assertTrue(mCustomTabsConnection.warmup(0)); | 257 Assert.assertTrue(mCustomTabsConnection.warmup(0)); |
239 | 258 |
240 final List<Bundle> urlsAsString = new ArrayList<>(); | 259 final List<Bundle> urlsAsString = new ArrayList<>(); |
241 Bundle urlStringBundle = new Bundle(); | 260 Bundle urlStringBundle = new Bundle(); |
242 urlStringBundle.putString(CustomTabsService.KEY_URL, URL); | 261 urlStringBundle.putString(CustomTabsService.KEY_URL, URL); |
243 urlsAsString.add(urlStringBundle); | 262 urlsAsString.add(urlStringBundle); |
244 | 263 |
245 final List<Bundle> urlsAsUri = new ArrayList<>(); | 264 final List<Bundle> urlsAsUri = new ArrayList<>(); |
246 Bundle urlUriBundle = new Bundle(); | 265 Bundle urlUriBundle = new Bundle(); |
247 urlUriBundle.putParcelable(CustomTabsService.KEY_URL, Uri.parse(URL)); | 266 urlUriBundle.putParcelable(CustomTabsService.KEY_URL, Uri.parse(URL)); |
248 urlsAsUri.add(urlUriBundle); | 267 urlsAsUri.add(urlUriBundle); |
249 | 268 |
250 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 269 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
251 @Override | 270 @Override |
252 public void run() { | 271 public void run() { |
253 assertFalse(mCustomTabsConnection.lowConfidenceMayLaunchUrl(urls
AsString)); | 272 Assert.assertFalse(mCustomTabsConnection.lowConfidenceMayLaunchU
rl(urlsAsString)); |
254 assertTrue(mCustomTabsConnection.lowConfidenceMayLaunchUrl(urlsA
sUri)); | 273 Assert.assertTrue(mCustomTabsConnection.lowConfidenceMayLaunchUr
l(urlsAsUri)); |
255 } | 274 } |
256 }); | 275 }); |
257 } | 276 } |
258 | 277 |
| 278 @Test |
259 @SmallTest | 279 @SmallTest |
260 public void testLowConfidenceMayLaunchUrlDoesntCrash() { | 280 public void testLowConfidenceMayLaunchUrlDoesntCrash() { |
261 final CustomTabsSessionToken token = | 281 final CustomTabsSessionToken token = |
262 CustomTabsSessionToken.createDummySessionTokenForTesting(); | 282 CustomTabsSessionToken.createDummySessionTokenForTesting(); |
263 assertTrue(mCustomTabsConnection.newSession(token)); | 283 Assert.assertTrue(mCustomTabsConnection.newSession(token)); |
264 assertTrue(mCustomTabsConnection.warmup(0)); | 284 Assert.assertTrue(mCustomTabsConnection.warmup(0)); |
265 | 285 |
266 final List<Bundle> invalidBundles = new ArrayList<>(); | 286 final List<Bundle> invalidBundles = new ArrayList<>(); |
267 Bundle invalidBundle = new Bundle(); | 287 Bundle invalidBundle = new Bundle(); |
268 invalidBundle.putParcelable(CustomTabsService.KEY_URL, new Intent()); | 288 invalidBundle.putParcelable(CustomTabsService.KEY_URL, new Intent()); |
269 invalidBundles.add(invalidBundle); | 289 invalidBundles.add(invalidBundle); |
270 | 290 |
271 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 291 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
272 @Override | 292 @Override |
273 public void run() { | 293 public void run() { |
274 try { | 294 try { |
275 mCustomTabsConnection.lowConfidenceMayLaunchUrl(invalidBundl
es); | 295 mCustomTabsConnection.lowConfidenceMayLaunchUrl(invalidBundl
es); |
276 } catch (ClassCastException e) { | 296 } catch (ClassCastException e) { |
277 fail(); | 297 Assert.fail(); |
278 } | 298 } |
279 } | 299 } |
280 }); | 300 }); |
281 } | 301 } |
282 | 302 |
| 303 @Test |
283 @SmallTest | 304 @SmallTest |
284 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) | 305 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) |
285 public void testStillHighConfidenceMayLaunchUrlWithSeveralUrls() { | 306 public void testStillHighConfidenceMayLaunchUrlWithSeveralUrls() { |
286 final CustomTabsSessionToken token = | 307 final CustomTabsSessionToken token = |
287 CustomTabsSessionToken.createDummySessionTokenForTesting(); | 308 CustomTabsSessionToken.createDummySessionTokenForTesting(); |
288 assertTrue(mCustomTabsConnection.newSession(token)); | 309 Assert.assertTrue(mCustomTabsConnection.newSession(token)); |
289 List<Bundle> urls = new ArrayList<>(); | 310 List<Bundle> urls = new ArrayList<>(); |
290 Bundle urlBundle = new Bundle(); | 311 Bundle urlBundle = new Bundle(); |
291 urlBundle.putParcelable(CustomTabsService.KEY_URL, Uri.parse(URL)); | 312 urlBundle.putParcelable(CustomTabsService.KEY_URL, Uri.parse(URL)); |
292 urls.add(urlBundle); | 313 urls.add(urlBundle); |
293 | 314 |
294 mCustomTabsConnection.mayLaunchUrl(token, Uri.parse(URL), null, urls); | 315 mCustomTabsConnection.mayLaunchUrl(token, Uri.parse(URL), null, urls); |
295 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 316 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
296 @Override | 317 @Override |
297 public void run() { | 318 public void run() { |
298 assertNull(WarmupManager.getInstance().takeSpareWebContents(fals
e, false)); | 319 Assert.assertNull(WarmupManager.getInstance().takeSpareWebConten
ts(false, false)); |
299 String referrer = mCustomTabsConnection.getReferrerForSession(to
ken).getUrl(); | 320 String referrer = mCustomTabsConnection.getReferrerForSession(to
ken).getUrl(); |
300 assertNotNull(mCustomTabsConnection.takePrerenderedUrl(token, UR
L, referrer)); | 321 Assert.assertNotNull( |
| 322 mCustomTabsConnection.takePrerenderedUrl(token, URL, ref
errer)); |
301 } | 323 } |
302 }); | 324 }); |
303 } | 325 } |
304 | 326 |
| 327 @Test |
305 @SmallTest | 328 @SmallTest |
306 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) | 329 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) |
307 public void testPrefetchOnlyNoPrerenderHasSpareWebContents() { | 330 public void testPrefetchOnlyNoPrerenderHasSpareWebContents() { |
308 assertTrue(mCustomTabsConnection.warmup(0)); | 331 Assert.assertTrue(mCustomTabsConnection.warmup(0)); |
309 final CustomTabsSessionToken token = | 332 final CustomTabsSessionToken token = |
310 CustomTabsSessionToken.createDummySessionTokenForTesting(); | 333 CustomTabsSessionToken.createDummySessionTokenForTesting(); |
311 assertTrue(mCustomTabsConnection.newSession(token)); | 334 Assert.assertTrue(mCustomTabsConnection.newSession(token)); |
312 | 335 |
313 Bundle extras = new Bundle(); | 336 Bundle extras = new Bundle(); |
314 extras.putInt(CustomTabsConnection.DEBUG_OVERRIDE_KEY, CustomTabsConnect
ion.PREFETCH_ONLY); | 337 extras.putInt(CustomTabsConnection.DEBUG_OVERRIDE_KEY, CustomTabsConnect
ion.PREFETCH_ONLY); |
315 assertTrue(mCustomTabsConnection.mayLaunchUrl(token, Uri.parse(URL), ext
ras, null)); | 338 Assert.assertTrue(mCustomTabsConnection.mayLaunchUrl(token, Uri.parse(UR
L), extras, null)); |
316 | 339 |
317 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 340 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
318 @Override | 341 @Override |
319 public void run() { | 342 public void run() { |
320 assertSpareWebContentsNotNullAndDestroy(); | 343 assertSpareWebContentsNotNullAndDestroy(); |
321 } | 344 } |
322 }); | 345 }); |
323 } | 346 } |
324 | 347 |
| 348 @Test |
325 @SmallTest | 349 @SmallTest |
326 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) | 350 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) |
327 @RetryOnFailure | 351 @RetryOnFailure |
328 public void testCanCancelPrerender() { | 352 public void testCanCancelPrerender() { |
329 final CustomTabsSessionToken token = assertWarmupAndMayLaunchUrl(null, U
RL, true); | 353 final CustomTabsSessionToken token = assertWarmupAndMayLaunchUrl(null, U
RL, true); |
330 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 354 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
331 @Override | 355 @Override |
332 public void run() { | 356 public void run() { |
333 assertNull(WarmupManager.getInstance().takeSpareWebContents(fals
e, false)); | 357 Assert.assertNull(WarmupManager.getInstance().takeSpareWebConten
ts(false, false)); |
334 } | 358 } |
335 }); | 359 }); |
336 assertTrue(mCustomTabsConnection.mayLaunchUrl(token, null, null, null)); | 360 Assert.assertTrue(mCustomTabsConnection.mayLaunchUrl(token, null, null,
null)); |
337 // mayLaunchUrl() posts a task, the following has to run after it. | 361 // mayLaunchUrl() posts a task, the following has to run after it. |
338 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 362 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
339 @Override | 363 @Override |
340 public void run() { | 364 public void run() { |
341 String referrer = mCustomTabsConnection.getReferrerForSession(to
ken).getUrl(); | 365 String referrer = mCustomTabsConnection.getReferrerForSession(to
ken).getUrl(); |
342 assertNull(mCustomTabsConnection.takePrerenderedUrl(token, URL,
referrer)); | 366 Assert.assertNull(mCustomTabsConnection.takePrerenderedUrl(token
, URL, referrer)); |
343 } | 367 } |
344 }); | 368 }); |
345 } | 369 } |
346 | 370 |
347 private void assertSpareWebContentsNotNullAndDestroy() { | 371 private void assertSpareWebContentsNotNullAndDestroy() { |
348 WebContents webContents = WarmupManager.getInstance().takeSpareWebConten
ts(false, false); | 372 WebContents webContents = WarmupManager.getInstance().takeSpareWebConten
ts(false, false); |
349 assertNotNull(webContents); | 373 Assert.assertNotNull(webContents); |
350 webContents.destroy(); | 374 webContents.destroy(); |
351 } | 375 } |
352 | 376 |
353 /** | 377 /** |
354 * Calls warmup() and mayLaunchUrl(), checks for the expected result | 378 * Calls warmup() and mayLaunchUrl(), checks for the expected result |
355 * (success or failure) and returns the result code. | 379 * (success or failure) and returns the result code. |
356 */ | 380 */ |
357 private CustomTabsSessionToken assertWarmupAndMayLaunchUrl( | 381 private CustomTabsSessionToken assertWarmupAndMayLaunchUrl( |
358 CustomTabsSessionToken token, String url, boolean shouldSucceed) { | 382 CustomTabsSessionToken token, String url, boolean shouldSucceed) { |
359 mCustomTabsConnection.warmup(0); | 383 mCustomTabsConnection.warmup(0); |
360 if (token == null) { | 384 if (token == null) { |
361 token = CustomTabsSessionToken.createDummySessionTokenForTesting(); | 385 token = CustomTabsSessionToken.createDummySessionTokenForTesting(); |
362 mCustomTabsConnection.newSession(token); | 386 mCustomTabsConnection.newSession(token); |
363 } | 387 } |
364 Uri uri = url == null ? null : Uri.parse(url); | 388 Uri uri = url == null ? null : Uri.parse(url); |
365 boolean succeeded = mCustomTabsConnection.mayLaunchUrl(token, uri, null,
null); | 389 boolean succeeded = mCustomTabsConnection.mayLaunchUrl(token, uri, null,
null); |
366 assertEquals(shouldSucceed, succeeded); | 390 Assert.assertEquals(shouldSucceed, succeeded); |
367 return shouldSucceed ? token : null; | 391 return shouldSucceed ? token : null; |
368 } | 392 } |
369 | 393 |
370 /** | 394 /** |
371 * Tests that | 395 * Tests that |
372 * {@link CustomTabsConnection#mayLaunchUrl( | 396 * {@link CustomTabsConnection#mayLaunchUrl( |
373 * CustomTabsSessionToken, Uri, android.os.Bundle, java.util.List)} | 397 * CustomTabsSessionToken, Uri, android.os.Bundle, java.util.List)} |
374 * returns an error when called with an invalid session ID. | 398 * returns an error when called with an invalid session ID. |
375 */ | 399 */ |
| 400 @Test |
376 @SmallTest | 401 @SmallTest |
377 public void testNoMayLaunchUrlWithInvalidSessionId() { | 402 public void testNoMayLaunchUrlWithInvalidSessionId() { |
378 assertWarmupAndMayLaunchUrl( | 403 assertWarmupAndMayLaunchUrl( |
379 CustomTabsSessionToken.createDummySessionTokenForTesting(), URL,
false); | 404 CustomTabsSessionToken.createDummySessionTokenForTesting(), URL,
false); |
380 } | 405 } |
381 | 406 |
382 /** | 407 /** |
383 * Tests that | 408 * Tests that |
384 * {@link CustomTabsConnection#mayLaunchUrl(CustomTabsSessionToken, Uri, Bun
dle, List)} | 409 * {@link CustomTabsConnection#mayLaunchUrl(CustomTabsSessionToken, Uri, Bun
dle, List)} |
385 * rejects invalid URL schemes. | 410 * rejects invalid URL schemes. |
386 */ | 411 */ |
| 412 @Test |
387 @SmallTest | 413 @SmallTest |
388 public void testNoMayLaunchUrlWithInvalidScheme() { | 414 public void testNoMayLaunchUrlWithInvalidScheme() { |
389 assertWarmupAndMayLaunchUrl(null, INVALID_SCHEME_URL, false); | 415 assertWarmupAndMayLaunchUrl(null, INVALID_SCHEME_URL, false); |
390 } | 416 } |
391 | 417 |
392 /** | 418 /** |
393 * Tests that | 419 * Tests that |
394 * {@link CustomTabsConnection#mayLaunchUrl(CustomTabsSessionToken, Uri, Bun
dle, List)} | 420 * {@link CustomTabsConnection#mayLaunchUrl(CustomTabsSessionToken, Uri, Bun
dle, List)} |
395 * succeeds. | 421 * succeeds. |
396 */ | 422 */ |
| 423 @Test |
397 @SmallTest | 424 @SmallTest |
398 public void testMayLaunchUrl() { | 425 public void testMayLaunchUrl() { |
399 assertWarmupAndMayLaunchUrl(null, URL, true); | 426 assertWarmupAndMayLaunchUrl(null, URL, true); |
400 } | 427 } |
401 | 428 |
402 /** | 429 /** |
403 * Tests that | 430 * Tests that |
404 * {@link CustomTabsConnection#mayLaunchUrl(CustomTabsSessionToken, Uri, Bun
dle, List)} | 431 * {@link CustomTabsConnection#mayLaunchUrl(CustomTabsSessionToken, Uri, Bun
dle, List)} |
405 * can be called several times with the same, and different URLs. | 432 * can be called several times with the same, and different URLs. |
406 */ | 433 */ |
| 434 @Test |
407 @SmallTest | 435 @SmallTest |
408 public void testMultipleMayLaunchUrl() { | 436 public void testMultipleMayLaunchUrl() { |
409 CustomTabsSessionToken token = assertWarmupAndMayLaunchUrl(null, URL, tr
ue); | 437 CustomTabsSessionToken token = assertWarmupAndMayLaunchUrl(null, URL, tr
ue); |
410 mCustomTabsConnection.resetThrottling(mAppContext, Process.myUid()); | 438 mCustomTabsConnection.resetThrottling(mAppContext, Process.myUid()); |
411 assertWarmupAndMayLaunchUrl(token, URL, true); | 439 assertWarmupAndMayLaunchUrl(token, URL, true); |
412 mCustomTabsConnection.resetThrottling(mAppContext, Process.myUid()); | 440 mCustomTabsConnection.resetThrottling(mAppContext, Process.myUid()); |
413 assertWarmupAndMayLaunchUrl(token, URL2, true); | 441 assertWarmupAndMayLaunchUrl(token, URL2, true); |
414 } | 442 } |
415 | 443 |
416 /** | 444 /** |
417 * Tests that sessions are forgotten properly. | 445 * Tests that sessions are forgotten properly. |
418 */ | 446 */ |
| 447 @Test |
419 @SmallTest | 448 @SmallTest |
420 public void testForgetsSession() { | 449 public void testForgetsSession() { |
421 CustomTabsSessionToken token = assertWarmupAndMayLaunchUrl(null, URL, tr
ue); | 450 CustomTabsSessionToken token = assertWarmupAndMayLaunchUrl(null, URL, tr
ue); |
422 CustomTabsTestUtils.cleanupSessions(mCustomTabsConnection); | 451 CustomTabsTestUtils.cleanupSessions(mCustomTabsConnection); |
423 assertWarmupAndMayLaunchUrl(token, URL, false); | 452 assertWarmupAndMayLaunchUrl(token, URL, false); |
424 } | 453 } |
425 | 454 |
426 /** | 455 /** |
427 * Tests that CPU cgroups exist and have the expected values for background
and foreground. | 456 * Tests that CPU cgroups exist and have the expected values for background
and foreground. |
428 * | 457 * |
429 * To make testing easier the test assumes that the Android Framework uses | 458 * To make testing easier the test assumes that the Android Framework uses |
430 * the same cgroup for background processes and background _threads_, which | 459 * the same cgroup for background processes and background _threads_, which |
431 * has been the case through LOLLIPOP_MR1. | 460 * has been the case through LOLLIPOP_MR1. |
432 */ | 461 */ |
| 462 @Test |
433 @SmallTest | 463 @SmallTest |
434 public void testGetSchedulerGroup() { | 464 public void testGetSchedulerGroup() { |
435 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return; | 465 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return; |
436 assertNotNull(CustomTabsConnection.getSchedulerGroup(Process.myPid())); | 466 Assert.assertNotNull(CustomTabsConnection.getSchedulerGroup(Process.myPi
d())); |
437 String cgroup = CustomTabsConnection.getSchedulerGroup(Process.myPid()); | 467 String cgroup = CustomTabsConnection.getSchedulerGroup(Process.myPid()); |
438 // Tests run in the foreground. | 468 // Tests run in the foreground. |
439 assertTrue(cgroup.equals("/") || cgroup.equals("/apps")); | 469 Assert.assertTrue(cgroup.equals("/") || cgroup.equals("/apps")); |
440 | 470 |
441 final String[] backgroundThreadCgroup = {null}; | 471 final String[] backgroundThreadCgroup = {null}; |
442 Thread backgroundThread = new Thread(new Runnable() { | 472 Thread backgroundThread = new Thread(new Runnable() { |
443 @Override | 473 @Override |
444 public void run() { | 474 public void run() { |
445 int tid = Process.myTid(); | 475 int tid = Process.myTid(); |
446 Process.setThreadPriority(tid, Process.THREAD_PRIORITY_BACKGROUN
D); | 476 Process.setThreadPriority(tid, Process.THREAD_PRIORITY_BACKGROUN
D); |
447 backgroundThreadCgroup[0] = CustomTabsConnection.getSchedulerGro
up(tid); | 477 backgroundThreadCgroup[0] = CustomTabsConnection.getSchedulerGro
up(tid); |
448 } | 478 } |
449 }); | 479 }); |
450 backgroundThread.start(); | 480 backgroundThread.start(); |
451 try { | 481 try { |
452 backgroundThread.join(); | 482 backgroundThread.join(); |
453 } catch (InterruptedException e) { | 483 } catch (InterruptedException e) { |
454 fail(); | 484 Assert.fail(); |
455 return; | 485 return; |
456 } | 486 } |
457 String threadCgroup = backgroundThreadCgroup[0]; | 487 String threadCgroup = backgroundThreadCgroup[0]; |
458 assertNotNull(threadCgroup); | 488 Assert.assertNotNull(threadCgroup); |
459 assertTrue(threadCgroup.equals("/bg_non_interactive") | 489 Assert.assertTrue(threadCgroup.equals("/bg_non_interactive") |
460 || threadCgroup.equals("/apps/bg_non_interactive")); | 490 || threadCgroup.equals("/apps/bg_non_interactive")); |
461 } | 491 } |
462 | 492 |
463 /** | 493 /** |
464 * Tests that predictions are throttled. | 494 * Tests that predictions are throttled. |
465 */ | 495 */ |
| 496 @Test |
466 @SmallTest | 497 @SmallTest |
467 public void testThrottleMayLaunchUrl() { | 498 public void testThrottleMayLaunchUrl() { |
468 CustomTabsSessionToken token = assertWarmupAndMayLaunchUrl(null, URL, tr
ue); | 499 CustomTabsSessionToken token = assertWarmupAndMayLaunchUrl(null, URL, tr
ue); |
469 int successfulRequests = 0; | 500 int successfulRequests = 0; |
470 // Send a burst of requests instead of checking for precise delays to av
oid flakiness. | 501 // Send a burst of requests instead of checking for precise delays to av
oid flakiness. |
471 while (successfulRequests < 10) { | 502 while (successfulRequests < 10) { |
472 if (!mCustomTabsConnection.mayLaunchUrl(token, Uri.parse(URL), null,
null)) break; | 503 if (!mCustomTabsConnection.mayLaunchUrl(token, Uri.parse(URL), null,
null)) break; |
473 successfulRequests++; | 504 successfulRequests++; |
474 } | 505 } |
475 assertTrue("10 requests in a row should not all succeed.", successfulReq
uests < 10); | 506 Assert.assertTrue("10 requests in a row should not all succeed.", succes
sfulRequests < 10); |
476 } | 507 } |
477 | 508 |
478 /** | 509 /** |
479 * Tests that the mayLaunchUrl() throttling is reset after a long enough wai
t. | 510 * Tests that the mayLaunchUrl() throttling is reset after a long enough wai
t. |
480 */ | 511 */ |
| 512 @Test |
481 @SmallTest | 513 @SmallTest |
482 public void testThrottlingIsReset() { | 514 public void testThrottlingIsReset() { |
483 CustomTabsSessionToken token = assertWarmupAndMayLaunchUrl(null, URL, tr
ue); | 515 CustomTabsSessionToken token = assertWarmupAndMayLaunchUrl(null, URL, tr
ue); |
484 mCustomTabsConnection.mayLaunchUrl(token, Uri.parse(URL), null, null); | 516 mCustomTabsConnection.mayLaunchUrl(token, Uri.parse(URL), null, null); |
485 // Depending on the timing, the delay should be 100 or 200ms here. | 517 // Depending on the timing, the delay should be 100 or 200ms here. |
486 assertWarmupAndMayLaunchUrl(token, URL, false); | 518 assertWarmupAndMayLaunchUrl(token, URL, false); |
487 // Wait for more than 2 * MAX_POSSIBLE_DELAY to clear the delay | 519 // Wait for more than 2 * MAX_POSSIBLE_DELAY to clear the delay |
488 try { | 520 try { |
489 Thread.sleep(450); // 2 * MAX_POSSIBLE_DELAY + 50ms | 521 Thread.sleep(450); // 2 * MAX_POSSIBLE_DELAY + 50ms |
490 } catch (InterruptedException e) { | 522 } catch (InterruptedException e) { |
491 fail(); | 523 Assert.fail(); |
492 return; | 524 return; |
493 } | 525 } |
494 assertWarmupAndMayLaunchUrl(token, URL, true); | 526 assertWarmupAndMayLaunchUrl(token, URL, true); |
495 // Check that the delay has been reset, by waiting for 100ms. | 527 // Check that the delay has been reset, by waiting for 100ms. |
496 try { | 528 try { |
497 Thread.sleep(150); // MIN_DELAY + 50ms margin | 529 Thread.sleep(150); // MIN_DELAY + 50ms margin |
498 } catch (InterruptedException e) { | 530 } catch (InterruptedException e) { |
499 fail(); | 531 Assert.fail(); |
500 return; | 532 return; |
501 } | 533 } |
502 assertWarmupAndMayLaunchUrl(token, URL, true); | 534 assertWarmupAndMayLaunchUrl(token, URL, true); |
503 } | 535 } |
504 | 536 |
505 /** | 537 /** |
506 * Tests that throttling applies across sessions. | 538 * Tests that throttling applies across sessions. |
507 */ | 539 */ |
| 540 @Test |
508 @SmallTest | 541 @SmallTest |
509 public void testThrottlingAcrossSessions() { | 542 public void testThrottlingAcrossSessions() { |
510 CustomTabsSessionToken token = assertWarmupAndMayLaunchUrl(null, URL, tr
ue); | 543 CustomTabsSessionToken token = assertWarmupAndMayLaunchUrl(null, URL, tr
ue); |
511 mCustomTabsConnection.resetThrottling(mAppContext, Process.myUid()); | 544 mCustomTabsConnection.resetThrottling(mAppContext, Process.myUid()); |
512 CustomTabsSessionToken token2 = assertWarmupAndMayLaunchUrl(null, URL, t
rue); | 545 CustomTabsSessionToken token2 = assertWarmupAndMayLaunchUrl(null, URL, t
rue); |
513 mCustomTabsConnection.resetThrottling(mAppContext, Process.myUid()); | 546 mCustomTabsConnection.resetThrottling(mAppContext, Process.myUid()); |
514 for (int i = 0; i < 10; i++) { | 547 for (int i = 0; i < 10; i++) { |
515 mCustomTabsConnection.mayLaunchUrl(token, Uri.parse(URL), null, null
); | 548 mCustomTabsConnection.mayLaunchUrl(token, Uri.parse(URL), null, null
); |
516 } | 549 } |
517 assertWarmupAndMayLaunchUrl(token2, URL, false); | 550 assertWarmupAndMayLaunchUrl(token2, URL, false); |
518 } | 551 } |
519 | 552 |
| 553 @Test |
520 @SmallTest | 554 @SmallTest |
521 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) | 555 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) |
522 public void testBanningWorks() { | 556 public void testBanningWorks() { |
523 mCustomTabsConnection.ban(mAppContext, Process.myUid()); | 557 mCustomTabsConnection.ban(mAppContext, Process.myUid()); |
524 final CustomTabsSessionToken token = | 558 final CustomTabsSessionToken token = |
525 CustomTabsSessionToken.createDummySessionTokenForTesting(); | 559 CustomTabsSessionToken.createDummySessionTokenForTesting(); |
526 assertTrue(mCustomTabsConnection.newSession(token)); | 560 Assert.assertTrue(mCustomTabsConnection.newSession(token)); |
527 | 561 |
528 assertTrue(mCustomTabsConnection.mayLaunchUrl(token, Uri.parse(URL), nul
l, null)); | 562 Assert.assertTrue(mCustomTabsConnection.mayLaunchUrl(token, Uri.parse(UR
L), null, null)); |
529 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 563 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
530 @Override | 564 @Override |
531 public void run() { | 565 public void run() { |
532 assertSpareWebContentsNotNullAndDestroy(); | 566 assertSpareWebContentsNotNullAndDestroy(); |
533 String referrer = mCustomTabsConnection.getReferrerForSession(to
ken).getUrl(); | 567 String referrer = mCustomTabsConnection.getReferrerForSession(to
ken).getUrl(); |
534 assertNull(mCustomTabsConnection.takePrerenderedUrl(token, URL,
referrer)); | 568 Assert.assertNull(mCustomTabsConnection.takePrerenderedUrl(token
, URL, referrer)); |
535 } | 569 } |
536 }); | 570 }); |
537 } | 571 } |
538 | 572 |
| 573 @Test |
539 @SmallTest | 574 @SmallTest |
540 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) | 575 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) |
541 public void testBanningDisabledForCellular() { | 576 public void testBanningDisabledForCellular() { |
542 mCustomTabsConnection.ban(mAppContext, Process.myUid()); | 577 mCustomTabsConnection.ban(mAppContext, Process.myUid()); |
543 final CustomTabsSessionToken token = | 578 final CustomTabsSessionToken token = |
544 CustomTabsSessionToken.createDummySessionTokenForTesting(); | 579 CustomTabsSessionToken.createDummySessionTokenForTesting(); |
545 assertTrue(mCustomTabsConnection.newSession(token)); | 580 Assert.assertTrue(mCustomTabsConnection.newSession(token)); |
546 mCustomTabsConnection.setShouldPrerenderOnCellularForSession(token, true
); | 581 mCustomTabsConnection.setShouldPrerenderOnCellularForSession(token, true
); |
547 | 582 |
548 assertTrue(mCustomTabsConnection.mayLaunchUrl(token, Uri.parse(URL), nul
l, null)); | 583 Assert.assertTrue(mCustomTabsConnection.mayLaunchUrl(token, Uri.parse(UR
L), null, null)); |
549 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 584 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
550 @Override | 585 @Override |
551 public void run() { | 586 public void run() { |
552 assertNull(WarmupManager.getInstance().takeSpareWebContents(fals
e, false)); | 587 Assert.assertNull(WarmupManager.getInstance().takeSpareWebConten
ts(false, false)); |
553 String referrer = mCustomTabsConnection.getReferrerForSession(to
ken).getUrl(); | 588 String referrer = mCustomTabsConnection.getReferrerForSession(to
ken).getUrl(); |
554 WebContents prerender = mCustomTabsConnection.takePrerenderedUrl
( | 589 WebContents prerender = mCustomTabsConnection.takePrerenderedUrl
( |
555 token, URL, referrer); | 590 token, URL, referrer); |
556 assertNotNull(prerender); | 591 Assert.assertNotNull(prerender); |
557 prerender.destroy(); | 592 prerender.destroy(); |
558 } | 593 } |
559 }); | 594 }); |
560 } | 595 } |
561 | 596 |
| 597 @Test |
562 @SmallTest | 598 @SmallTest |
563 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) | 599 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) |
564 public void testCellularPrerenderingDoesntOverrideSettings() throws Exceptio
n { | 600 public void testCellularPrerenderingDoesntOverrideSettings() throws Exceptio
n { |
565 CustomTabsSessionToken token = CustomTabsSessionToken.createDummySession
TokenForTesting(); | 601 CustomTabsSessionToken token = CustomTabsSessionToken.createDummySession
TokenForTesting(); |
566 assertTrue(mCustomTabsConnection.newSession(token)); | 602 Assert.assertTrue(mCustomTabsConnection.newSession(token)); |
567 mCustomTabsConnection.setShouldPrerenderOnCellularForSession(token, true
); | 603 mCustomTabsConnection.setShouldPrerenderOnCellularForSession(token, true
); |
568 mCustomTabsConnection.warmup(0); | 604 mCustomTabsConnection.warmup(0); |
569 | 605 |
570 // Needs the browser process to be initialized. | 606 // Needs the browser process to be initialized. |
571 FutureTask<Boolean> result = ThreadUtils.runOnUiThread(new Callable<Bool
ean>() { | 607 FutureTask<Boolean> result = ThreadUtils.runOnUiThread(new Callable<Bool
ean>() { |
572 @Override | 608 @Override |
573 public Boolean call() { | 609 public Boolean call() { |
574 PrefServiceBridge prefs = PrefServiceBridge.getInstance(); | 610 PrefServiceBridge prefs = PrefServiceBridge.getInstance(); |
575 boolean result = prefs.getNetworkPredictionEnabled(); | 611 boolean result = prefs.getNetworkPredictionEnabled(); |
576 prefs.setNetworkPredictionEnabled(false); | 612 prefs.setNetworkPredictionEnabled(false); |
577 return result; | 613 return result; |
578 }}); | 614 }}); |
579 final boolean enabled = result.get(); | 615 final boolean enabled = result.get(); |
580 | 616 |
581 try { | 617 try { |
582 assertTrue(mCustomTabsConnection.mayLaunchUrl(token, Uri.parse(URL),
null, null)); | 618 Assert.assertTrue( |
| 619 mCustomTabsConnection.mayLaunchUrl(token, Uri.parse(URL), nu
ll, null)); |
583 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 620 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
584 @Override | 621 @Override |
585 public void run() { | 622 public void run() { |
586 assertSpareWebContentsNotNullAndDestroy(); | 623 assertSpareWebContentsNotNullAndDestroy(); |
587 } | 624 } |
588 }); | 625 }); |
589 } finally { | 626 } finally { |
590 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 627 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
591 @Override | 628 @Override |
592 public void run() { | 629 public void run() { |
593 PrefServiceBridge.getInstance().setNetworkPredictionEnabled(
enabled); | 630 PrefServiceBridge.getInstance().setNetworkPredictionEnabled(
enabled); |
594 } | 631 } |
595 }); | 632 }); |
596 } | 633 } |
597 } | 634 } |
598 } | 635 } |
OLD | NEW |