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; | |
8 | |
7 import android.app.Application; | 9 import android.app.Application; |
8 import android.content.Context; | 10 import android.content.Context; |
9 import android.net.Uri; | 11 import android.net.Uri; |
10 import android.os.Build; | 12 import android.os.Build; |
13 import android.os.Bundle; | |
11 import android.os.Process; | 14 import android.os.Process; |
12 import android.support.customtabs.ICustomTabsCallback; | 15 import android.support.customtabs.ICustomTabsCallback; |
13 import android.test.InstrumentationTestCase; | 16 import android.test.InstrumentationTestCase; |
14 import android.test.suitebuilder.annotation.SmallTest; | 17 import android.test.suitebuilder.annotation.SmallTest; |
15 | 18 |
19 import org.chromium.base.ThreadUtils; | |
20 import org.chromium.base.test.util.Restriction; | |
21 import org.chromium.content_public.browser.WebContents; | |
22 | |
16 /** Tests for CustomTabsConnection. */ | 23 /** Tests for CustomTabsConnection. */ |
17 public class CustomTabsConnectionTest extends InstrumentationTestCase { | 24 public class CustomTabsConnectionTest extends InstrumentationTestCase { |
18 private CustomTabsConnection mCustomTabsConnection; | 25 private CustomTabsConnection mCustomTabsConnection; |
19 private static final String URL = "http://www.google.com"; | 26 private static final String URL = "http://www.google.com"; |
20 private static final String URL2 = "https://www.android.com"; | 27 private static final String URL2 = "https://www.android.com"; |
21 private static final String INVALID_SCHEME_URL = "intent://www.google.com"; | 28 private static final String INVALID_SCHEME_URL = "intent://www.google.com"; |
22 | 29 |
23 private Context mContext; | 30 private Context mContext; |
24 | 31 |
25 @Override | 32 @Override |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
61 /** | 68 /** |
62 * Tests that {@link CustomTabsConnection#warmup(long)} succeeds and can | 69 * Tests that {@link CustomTabsConnection#warmup(long)} succeeds and can |
63 * be issued multiple times. | 70 * be issued multiple times. |
64 */ | 71 */ |
65 @SmallTest | 72 @SmallTest |
66 public void testCanWarmup() { | 73 public void testCanWarmup() { |
67 assertEquals(true, mCustomTabsConnection.warmup(0)); | 74 assertEquals(true, mCustomTabsConnection.warmup(0)); |
68 assertEquals(true, mCustomTabsConnection.warmup(0)); | 75 assertEquals(true, mCustomTabsConnection.warmup(0)); |
69 } | 76 } |
70 | 77 |
78 @SmallTest | |
79 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) | |
80 public void testCreateSpareRenderer() { | |
81 assertTrue(mCustomTabsConnection.warmup(0)); | |
82 // On UI thread because: | |
83 // 1. takeSpareWebContents needs to be called from the UI thread. | |
84 // 2. warmup() is non-blocking and posts tasks to the UI thread, it ensu res proper ordering. | |
85 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | |
86 @Override | |
87 public void run() { | |
88 assertNotNull(mCustomTabsConnection.takeSpareWebContents()); | |
89 assertNull(mCustomTabsConnection.takeSpareWebContents()); | |
90 } | |
91 }); | |
92 } | |
93 | |
94 @SmallTest | |
95 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) | |
96 public void testCreateSpareRendererCanBeRecreated() { | |
97 assertTrue(mCustomTabsConnection.warmup(0)); | |
98 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | |
99 @Override | |
100 public void run() { | |
101 assertSpareWebContentsNotNullAndDestroy(); | |
102 assertNull(mCustomTabsConnection.takeSpareWebContents()); | |
103 } | |
104 }); | |
105 assertTrue(mCustomTabsConnection.warmup(0)); | |
106 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | |
107 @Override | |
108 public void run() { | |
109 assertSpareWebContentsNotNullAndDestroy(); | |
110 } | |
111 }); | |
112 } | |
113 | |
114 @SmallTest | |
115 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) | |
116 public void testPrerenderDestroysSpareRenderer() { | |
117 final ICustomTabsCallback cb = assertWarmupAndMayLaunchUrl(null, URL, tr ue); | |
118 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | |
119 @Override | |
120 public void run() { | |
121 assertNull(mCustomTabsConnection.takeSpareWebContents()); | |
122 String referrer = | |
123 mCustomTabsConnection.getReferrerForSession(cb.asBinder( )).getUrl(); | |
124 WebContents webContents = | |
125 mCustomTabsConnection.takePrerenderedUrl(cb.asBinder(), URL, referrer); | |
126 assertNotNull(webContents); | |
127 webContents.destroy(); | |
128 } | |
129 }); | |
130 } | |
131 | |
132 @SmallTest | |
133 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) | |
134 public void testMayLaunchUrlKeepsSpareRendererWithoutPrerendering() { | |
135 assertTrue(mCustomTabsConnection.warmup(0)); | |
136 final ICustomTabsCallback cb = new CustomTabsTestUtils.DummyCallback(); | |
137 assertTrue(mCustomTabsConnection.newSession(cb)); | |
138 | |
139 Bundle extras = new Bundle(); | |
140 extras.putBoolean(CustomTabsConnection.NO_PRERENDERING_KEY, true); | |
141 assertTrue(mCustomTabsConnection.mayLaunchUrl(cb, Uri.parse(URL), extras , null)); | |
142 | |
143 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | |
144 @Override | |
145 public void run() { | |
146 assertSpareWebContentsNotNullAndDestroy(); | |
147 } | |
148 }); | |
149 } | |
150 | |
151 private void assertSpareWebContentsNotNullAndDestroy() { | |
pasko
2015/10/29 13:38:58
nit: s/Destroy/CanBeDestroyed/
Benoit L
2015/10/29 17:12:36
There is no assertion here that we can destroy the
| |
152 WebContents webContents = mCustomTabsConnection.takeSpareWebContents(); | |
153 assertNotNull(webContents); | |
154 webContents.destroy(); | |
155 } | |
156 | |
71 /** | 157 /** |
72 * Calls warmup() and mayLaunchUrl(), checks for the expected result | 158 * Calls warmup() and mayLaunchUrl(), checks for the expected result |
73 * (success or failure) and returns the result code. | 159 * (success or failure) and returns the result code. |
74 */ | 160 */ |
75 private ICustomTabsCallback assertWarmupAndMayLaunchUrl( | 161 private ICustomTabsCallback assertWarmupAndMayLaunchUrl( |
76 ICustomTabsCallback cb, String url, boolean shouldSucceed) { | 162 ICustomTabsCallback cb, String url, boolean shouldSucceed) { |
77 mCustomTabsConnection.warmup(0); | 163 mCustomTabsConnection.warmup(0); |
78 if (cb == null) { | 164 if (cb == null) { |
79 cb = new CustomTabsTestUtils.DummyCallback(); | 165 cb = new CustomTabsTestUtils.DummyCallback(); |
80 mCustomTabsConnection.newSession(cb); | 166 mCustomTabsConnection.newSession(cb); |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
226 ICustomTabsCallback cb = assertWarmupAndMayLaunchUrl(null, URL, true); | 312 ICustomTabsCallback cb = assertWarmupAndMayLaunchUrl(null, URL, true); |
227 mCustomTabsConnection.resetThrottling(mContext, Process.myUid()); | 313 mCustomTabsConnection.resetThrottling(mContext, Process.myUid()); |
228 ICustomTabsCallback cb2 = assertWarmupAndMayLaunchUrl(null, URL, true); | 314 ICustomTabsCallback cb2 = assertWarmupAndMayLaunchUrl(null, URL, true); |
229 mCustomTabsConnection.resetThrottling(mContext, Process.myUid()); | 315 mCustomTabsConnection.resetThrottling(mContext, Process.myUid()); |
230 for (int i = 0; i < 10; i++) { | 316 for (int i = 0; i < 10; i++) { |
231 mCustomTabsConnection.mayLaunchUrl(cb, Uri.parse(URL), null, null); | 317 mCustomTabsConnection.mayLaunchUrl(cb, Uri.parse(URL), null, null); |
232 } | 318 } |
233 assertWarmupAndMayLaunchUrl(cb2, URL, false); | 319 assertWarmupAndMayLaunchUrl(cb2, URL, false); |
234 } | 320 } |
235 } | 321 } |
OLD | NEW |