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

Side by Side Diff: chrome/android/javatests/src/org/chromium/chrome/browser/fullscreen/FullscreenManagerTest.java

Issue 1598433004: Deflake Android fullscreen tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Make function to disable browser overrides Created 4 years, 11 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
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.fullscreen; 5 package org.chromium.chrome.browser.fullscreen;
6 6
7 import static org.chromium.base.test.util.Restriction.RESTRICTION_TYPE_NON_LOW_E ND_DEVICE;
8
7 import android.graphics.Rect; 9 import android.graphics.Rect;
8 import android.graphics.Region; 10 import android.graphics.Region;
9 import android.os.Build; 11 import android.os.Build;
10 import android.os.SystemClock; 12 import android.os.SystemClock;
11 import android.test.FlakyTest;
12 import android.test.suitebuilder.annotation.LargeTest; 13 import android.test.suitebuilder.annotation.LargeTest;
13 import android.test.suitebuilder.annotation.MediumTest; 14 import android.test.suitebuilder.annotation.MediumTest;
14 import android.view.View; 15 import android.view.View;
15 import android.view.ViewGroup; 16 import android.view.ViewGroup;
16 import android.view.ViewTreeObserver; 17 import android.view.ViewTreeObserver;
17 import android.view.WindowManager; 18 import android.view.WindowManager;
18 19
19 import org.chromium.base.ThreadUtils; 20 import org.chromium.base.ThreadUtils;
20 import org.chromium.base.test.util.Feature; 21 import org.chromium.base.test.util.Feature;
22 import org.chromium.base.test.util.Restriction;
21 import org.chromium.base.test.util.UrlUtils; 23 import org.chromium.base.test.util.UrlUtils;
22 import org.chromium.chrome.R; 24 import org.chromium.chrome.R;
25 import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager.Fullscreen Listener;
23 import org.chromium.chrome.browser.omnibox.UrlBar; 26 import org.chromium.chrome.browser.omnibox.UrlBar;
24 import org.chromium.chrome.browser.tab.Tab; 27 import org.chromium.chrome.browser.tab.Tab;
25 import org.chromium.chrome.browser.tab.TabWebContentsDelegateAndroid; 28 import org.chromium.chrome.browser.tab.TabWebContentsDelegateAndroid;
26 import org.chromium.chrome.test.ChromeTabbedActivityTestBase; 29 import org.chromium.chrome.test.ChromeTabbedActivityTestBase;
27 import org.chromium.chrome.test.util.OmniboxTestUtils; 30 import org.chromium.chrome.test.util.OmniboxTestUtils;
28 import org.chromium.chrome.test.util.PrerenderTestHelper; 31 import org.chromium.chrome.test.util.PrerenderTestHelper;
29 import org.chromium.chrome.test.util.TestHttpServerClient; 32 import org.chromium.chrome.test.util.TestHttpServerClient;
30 import org.chromium.content.browser.ContentViewCore; 33 import org.chromium.content.browser.ContentViewCore;
34 import org.chromium.content.browser.test.util.CallbackHelper;
31 import org.chromium.content.browser.test.util.Criteria; 35 import org.chromium.content.browser.test.util.Criteria;
32 import org.chromium.content.browser.test.util.CriteriaHelper; 36 import org.chromium.content.browser.test.util.CriteriaHelper;
33 import org.chromium.content.browser.test.util.TestTouchUtils; 37 import org.chromium.content.browser.test.util.TestTouchUtils;
34 import org.chromium.content.browser.test.util.UiUtils; 38 import org.chromium.content.browser.test.util.UiUtils;
35 39
36 import java.util.concurrent.Callable; 40 import java.util.concurrent.TimeUnit;
37 import java.util.concurrent.ExecutionException; 41 import java.util.concurrent.TimeoutException;
38 import java.util.concurrent.atomic.AtomicInteger; 42 import java.util.concurrent.atomic.AtomicInteger;
39 43
40 /** 44 /**
41 * Test suite for verifying the behavior of various fullscreen actions. 45 * Test suite for verifying the behavior of various fullscreen actions.
42 */ 46 */
43 public class FullscreenManagerTest extends ChromeTabbedActivityTestBase { 47 public class FullscreenManagerTest extends ChromeTabbedActivityTestBase {
44 48
45 private static final String LONG_HTML_WITH_AUTO_FOCUS_INPUT_TEST_PAGE = 49 private static final String LONG_HTML_WITH_AUTO_FOCUS_INPUT_TEST_PAGE =
46 UrlUtils.encodeHtmlDataUri("<html>" 50 UrlUtils.encodeHtmlDataUri("<html>"
47 + "<body style='height:10000px;'>" 51 + "<body style='height:10000px;'>"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 view.setSystemUiVisibility( 129 view.setSystemUiVisibility(
126 view.getSystemUiVisibility() & ~View.SYSTEM_UI_FLAG_FULL SCREEN); 130 view.getSystemUiVisibility() & ~View.SYSTEM_UI_FLAG_FULL SCREEN);
127 } 131 }
128 }); 132 });
129 waitForFullscreenFlag(tab, true); 133 waitForFullscreenFlag(tab, true);
130 waitForPersistentFullscreen(delegate, true); 134 waitForPersistentFullscreen(delegate, true);
131 } 135 }
132 136
133 @LargeTest 137 @LargeTest
134 @Feature({"Fullscreen"}) 138 @Feature({"Fullscreen"})
135 public void testExitPersistentFullscreenAllowsManualFullscreen() 139 public void testExitPersistentFullscreenAllowsManualFullscreen() throws Inte rruptedException {
136 throws InterruptedException, ExecutionException {
137 startMainActivityWithURL(LONG_FULLSCREEN_API_HTML_TEST_PAGE); 140 startMainActivityWithURL(LONG_FULLSCREEN_API_HTML_TEST_PAGE);
138 141
139 ChromeFullscreenManager fullscreenManager = getActivity().getFullscreenM anager(); 142 ChromeFullscreenManager fullscreenManager = getActivity().getFullscreenM anager();
140 fullscreenManager.setAnimationDurationsForTest(1, 1); 143 fullscreenManager.setAnimationDurationsForTest(1, 1);
141 int topControlsHeight = fullscreenManager.getTopControlsHeight(); 144 int topControlsHeight = fullscreenManager.getTopControlsHeight();
142 145
143 Tab tab = getActivity().getActivityTab(); 146 Tab tab = getActivity().getActivityTab();
144 View view = tab.getView(); 147 View view = tab.getView();
145 final TabWebContentsDelegateAndroid delegate = 148 final TabWebContentsDelegateAndroid delegate =
146 tab.getTabWebContentsDelegateAndroid(); 149 tab.getTabWebContentsDelegateAndroid();
147 150
148 singleClickView(view); 151 singleClickView(view);
149 waitForPersistentFullscreen(delegate, true); 152 waitForPersistentFullscreen(delegate, true);
150 assertEquals((float) -topControlsHeight, waitForTopControlsPosition(-top ControlsHeight)); 153 waitForTopControlsPosition(-topControlsHeight);
151 154
152 TestTouchUtils.sleepForDoubleTapTimeout(getInstrumentation()); 155 TestTouchUtils.sleepForDoubleTapTimeout(getInstrumentation());
153 singleClickView(view); 156 singleClickView(view);
154 waitForPersistentFullscreen(delegate, false); 157 waitForPersistentFullscreen(delegate, false);
155 waitForNoBrowserTopControlsOffset(); 158 waitForNoBrowserTopControlsOffset();
156 assertEquals((float) 0, waitForTopControlsPosition(0)); 159 waitForTopControlsPosition(0);
157 160
158 scrollTopControls(false); 161 scrollTopControls(false);
159 scrollTopControls(true); 162 scrollTopControls(true);
160 } 163 }
161 164
162 /** 165 @LargeTest
163 * Marked flaky on 2015-05-15: http://crbug.com/488393 166 @Feature({"Fullscreen"})
164 * @LargeTest 167 public void testManualHidingShowingTopControls() throws InterruptedException {
165 * @Feature({"Fullscreen"})
166 */
167 @FlakyTest
168 public void testManualHidingShowingTopControls()
169 throws InterruptedException, ExecutionException {
170 startMainActivityWithURL(LONG_HTML_TEST_PAGE); 168 startMainActivityWithURL(LONG_HTML_TEST_PAGE);
171 169
172 ChromeFullscreenManager fullscreenManager = getActivity().getFullscreenM anager(); 170 final ChromeFullscreenManager fullscreenManager = getActivity().getFulls creenManager();
173 fullscreenManager.disableBrowserOverrideForTest(); 171 disableBrowserOverrides();
174 172
175 assertEquals(fullscreenManager.getControlOffset(), 0f); 173 assertEquals(fullscreenManager.getControlOffset(), 0f);
176 174
177 scrollTopControls(false); 175 waitForTopControlsToBeMoveable(getActivity().getActivityTab());
178 // Reverse the scroll and ensure the controls come back into view. 176
179 scrollTopControls(true);
180 // Check that the URL bar has not grabbed focus (http://crbug/236365) 177 // Check that the URL bar has not grabbed focus (http://crbug/236365)
181 UrlBar urlBar = (UrlBar) getActivity().findViewById(R.id.url_bar); 178 UrlBar urlBar = (UrlBar) getActivity().findViewById(R.id.url_bar);
182 assertFalse("Url bar grabbed focus", urlBar.hasFocus()); 179 assertFalse("Url bar grabbed focus", urlBar.hasFocus());
183 } 180 }
184 181
185 @LargeTest 182 @LargeTest
186 @Feature({"Fullscreen"}) 183 @Feature({"Fullscreen"})
187 public void testHidingTopControlsRemovesSurfaceFlingerOverlay() 184 public void testHidingTopControlsRemovesSurfaceFlingerOverlay() throws Inter ruptedException {
188 throws InterruptedException, ExecutionException {
189 startMainActivityWithURL(LONG_HTML_TEST_PAGE); 185 startMainActivityWithURL(LONG_HTML_TEST_PAGE);
190 186
191 ChromeFullscreenManager fullscreenManager = getActivity().getFullscreenM anager(); 187 final ChromeFullscreenManager fullscreenManager = getActivity().getFulls creenManager();
192 fullscreenManager.disableBrowserOverrideForTest(); 188 disableBrowserOverrides();
193 189
194 assertEquals(fullscreenManager.getControlOffset(), 0f); 190 assertEquals(fullscreenManager.getControlOffset(), 0f);
195 191
196 // Detect layouts. Note this doesn't actually need to be atomic (just fi nal). 192 // Detect layouts. Note this doesn't actually need to be atomic (just fi nal).
197 final AtomicInteger layoutCount = new AtomicInteger(); 193 final AtomicInteger layoutCount = new AtomicInteger();
198 getActivity().getWindow().getDecorView().getViewTreeObserver().addOnGlob alLayoutListener( 194 getActivity().getWindow().getDecorView().getViewTreeObserver().addOnGlob alLayoutListener(
199 new ViewTreeObserver.OnGlobalLayoutListener() { 195 new ViewTreeObserver.OnGlobalLayoutListener() {
200 @Override 196 @Override
201 public void onGlobalLayout() { 197 public void onGlobalLayout() {
202 layoutCount.incrementAndGet(); 198 layoutCount.incrementAndGet();
203 } 199 }
204 }); 200 });
205 201
206 // When the top-controls are removed, we need a layout to trigger the 202 // When the top-controls are removed, we need a layout to trigger the
207 // transparent region for the app to be updated. 203 // transparent region for the app to be updated.
208 scrollTopControls(false); 204 scrollTopControls(false);
209 CriteriaHelper.pollForUIThreadCriteria( 205 CriteriaHelper.pollForUIThreadCriteria(
210 new Criteria() { 206 new Criteria() {
211 @Override 207 @Override
212 public boolean isSatisfied() { 208 public boolean isSatisfied() {
213 return layoutCount.get() > 0; 209 return layoutCount.get() > 0;
214 } 210 }
215 }); 211 });
216 212
217 getInstrumentation().runOnMainSync(new Runnable() { 213 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
218 @Override 214 @Override
219 public void run() { 215 public void run() {
220 // Check that when the top controls are gone, the entire decorVi ew is contained 216 // Check that when the top controls are gone, the entire decorVi ew is contained
221 // in the transparent region of the app. 217 // in the transparent region of the app.
222 Rect visibleDisplayFrame = new Rect(); 218 Rect visibleDisplayFrame = new Rect();
223 Region transparentRegion = new Region(); 219 Region transparentRegion = new Region();
224 ViewGroup decorView = (ViewGroup) getActivity().getWindow().get DecorView(); 220 ViewGroup decorView = (ViewGroup) getActivity().getWindow().get DecorView();
225 decorView.getWindowVisibleDisplayFrame(visibleDisplayFrame); 221 decorView.getWindowVisibleDisplayFrame(visibleDisplayFrame);
226 decorView.gatherTransparentRegion(transparentRegion); 222 decorView.gatherTransparentRegion(transparentRegion);
227 assertTrue(transparentRegion.quickContains(visibleDisplayFrame)) ; 223 assertTrue(transparentRegion.quickContains(visibleDisplayFrame)) ;
228 } 224 }
229 }); 225 });
230 226
231 // Additional manual test that this is working: 227 // Additional manual test that this is working:
232 // - adb shell dumpsys SurfaceFlinger 228 // - adb shell dumpsys SurfaceFlinger
233 // - Observe that there is no 'Chrome' related overlay listed, only 'Sur faceview'. 229 // - Observe that there is no 'Chrome' related overlay listed, only 'Sur faceview'.
234 } 230 }
235 231
236 @LargeTest 232 @LargeTest
237 @Feature({"Fullscreen"}) 233 @Feature({"Fullscreen"})
238 public void testManualFullscreenDisabledForChromePages() 234 public void testManualFullscreenDisabledForChromePages() throws InterruptedE xception {
239 throws InterruptedException, ExecutionException {
240 // The credits page was chosen as it is a chrome:// page that is long an d would support 235 // The credits page was chosen as it is a chrome:// page that is long an d would support
241 // manual fullscreen if it were supported. 236 // manual fullscreen if it were supported.
242 startMainActivityWithURL("chrome://credits"); 237 startMainActivityWithURL("chrome://credits");
243 238
244 ChromeFullscreenManager fullscreenManager = getActivity().getFullscreenM anager(); 239 final ChromeFullscreenManager fullscreenManager = getActivity().getFulls creenManager();
245 fullscreenManager.disableBrowserOverrideForTest(); 240 disableBrowserOverrides();
246 int topControlsHeight = fullscreenManager.getTopControlsHeight(); 241 int topControlsHeight = fullscreenManager.getTopControlsHeight();
247 242
248 assertEquals(fullscreenManager.getControlOffset(), 0f); 243 assertEquals(fullscreenManager.getControlOffset(), 0f);
249 244
250 float dragX = 50f; 245 float dragX = 50f;
251 float dragStartY = topControlsHeight * 2; 246 float dragStartY = topControlsHeight * 2;
252 float dragFullY = dragStartY - topControlsHeight; 247 float dragFullY = dragStartY - topControlsHeight;
253 248
254 long downTime = SystemClock.uptimeMillis(); 249 long downTime = SystemClock.uptimeMillis();
255 dragStart(dragX, dragStartY, downTime); 250 dragStart(dragX, dragStartY, downTime);
256 dragTo(dragX, dragX, dragStartY, dragFullY, 100, downTime); 251 dragTo(dragX, dragX, dragStartY, dragFullY, 100, downTime);
257 assertEquals(0f, waitForTopControlsPosition(0f)); 252 waitForTopControlsPosition(0f);
258 dragEnd(dragX, dragFullY, downTime); 253 dragEnd(dragX, dragFullY, downTime);
259 assertEquals(0f, waitForTopControlsPosition(0f)); 254 waitForTopControlsPosition(0f);
260 } 255 }
261 256
262 @LargeTest 257 @LargeTest
263 @Feature({"Fullscreen"}) 258 @Feature({"Fullscreen"})
264 public void testControlsShownOnUnresponsiveRenderer() 259 public void testControlsShownOnUnresponsiveRenderer() throws InterruptedExce ption {
265 throws InterruptedException, ExecutionException {
266 startMainActivityWithURL(LONG_HTML_TEST_PAGE); 260 startMainActivityWithURL(LONG_HTML_TEST_PAGE);
267 261
268 ChromeFullscreenManager fullscreenManager = getActivity().getFullscreenM anager(); 262 ChromeFullscreenManager fullscreenManager = getActivity().getFullscreenM anager();
269 fullscreenManager.setAnimationDurationsForTest(1, 1); 263 fullscreenManager.setAnimationDurationsForTest(1, 1);
270 waitForNoBrowserTopControlsOffset(); 264 waitForNoBrowserTopControlsOffset();
271 assertEquals(fullscreenManager.getControlOffset(), 0f); 265 assertEquals(fullscreenManager.getControlOffset(), 0f);
272 266
273 scrollTopControls(false); 267 scrollTopControls(false);
274 268
275 Tab tab = getActivity().getActivityTab(); 269 Tab tab = getActivity().getActivityTab();
276 final TabWebContentsDelegateAndroid delegate = 270 final TabWebContentsDelegateAndroid delegate =
277 tab.getTabWebContentsDelegateAndroid(); 271 tab.getTabWebContentsDelegateAndroid();
278 ThreadUtils.runOnUiThread(new Runnable() { 272 ThreadUtils.runOnUiThread(new Runnable() {
279 @Override 273 @Override
280 public void run() { 274 public void run() {
281 delegate.rendererUnresponsive(); 275 delegate.rendererUnresponsive();
282 } 276 }
283 }); 277 });
284 assertEquals(0f, waitForTopControlsPosition(0f)); 278 waitForTopControlsPosition(0f);
285 279
286 ThreadUtils.runOnUiThread(new Runnable() { 280 ThreadUtils.runOnUiThread(new Runnable() {
287 @Override 281 @Override
288 public void run() { 282 public void run() {
289 delegate.rendererResponsive(); 283 delegate.rendererResponsive();
290 } 284 }
291 }); 285 });
292 waitForNoBrowserTopControlsOffset(); 286 waitForNoBrowserTopControlsOffset();
293 } 287 }
294 288
295 /*
296 @LargeTest 289 @LargeTest
297 @Feature({"Fullscreen"}) 290 @Feature({"Fullscreen"})
298 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) 291 @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE)
299 crbug.com/339668 292 public void testPrerenderedPageSupportsManualHiding() throws InterruptedExce ption {
300 */
301 @FlakyTest
302 public void testPrerenderedPageSupportsManualHiding()
303 throws InterruptedException, ExecutionException {
304 startMainActivityOnBlankPage(); 293 startMainActivityOnBlankPage();
305 294 disableBrowserOverrides();
306 ChromeFullscreenManager fullscreenManager = getActivity().getFullscreenM anager();
307 fullscreenManager.disableBrowserOverrideForTest();
308 295
309 final Tab tab = getActivity().getActivityTab(); 296 final Tab tab = getActivity().getActivityTab();
310 final String testUrl = TestHttpServerClient.getUrl( 297 final String testUrl = TestHttpServerClient.getUrl(
311 "chrome/test/data/android/very_long_google.html"); 298 "chrome/test/data/android/very_long_google.html");
312 PrerenderTestHelper.prerenderUrlAndFocusOmnibox(testUrl, this); 299 PrerenderTestHelper.prerenderUrlAndFocusOmnibox(testUrl, this);
313 assertTrue("loadUrl did not use pre-rendered page.", 300 assertTrue("loadUrl did not use pre-rendered page.",
314 PrerenderTestHelper.isLoadUrlResultPrerendered(loadUrl(testUrl)) ); 301 PrerenderTestHelper.isLoadUrlResultPrerendered(loadUrl(testUrl)) );
315 302
316 UrlBar urlBar = (UrlBar) getActivity().findViewById(R.id.url_bar); 303 UrlBar urlBar = (UrlBar) getActivity().findViewById(R.id.url_bar);
317 OmniboxTestUtils.toggleUrlBarFocus(urlBar, false); 304 OmniboxTestUtils.toggleUrlBarFocus(urlBar, false);
305 OmniboxTestUtils.waitForFocusAndKeyboardActive(urlBar, false);
306
318 ThreadUtils.runOnUiThreadBlocking(new Runnable() { 307 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
319 @Override 308 @Override
320 public void run() { 309 public void run() {
321 tab.processEnableFullscreenRunnableForTest(); 310 tab.processEnableFullscreenRunnableForTest();
322 } 311 }
323 }); 312 });
324 313
325 scrollTopControls(false); 314 waitForTopControlsToBeMoveable(tab);
326 } 315 }
327 316
328 /*
329 Marked flaky on 2015-07-20: http://crbug.com/512299
330 @LargeTest 317 @LargeTest
331 @Feature({"Fullscreen"}) 318 @Feature({"Fullscreen"})
332 */ 319 public void testTopControlsShownWhenInputIsFocused() throws InterruptedExcep tion {
333 @FlakyTest
334 public void testTopControlsShownWhenInputIsFocused()
335 throws InterruptedException, ExecutionException {
336 startMainActivityWithURL(LONG_HTML_WITH_AUTO_FOCUS_INPUT_TEST_PAGE); 320 startMainActivityWithURL(LONG_HTML_WITH_AUTO_FOCUS_INPUT_TEST_PAGE);
337 321
338 ChromeFullscreenManager fullscreenManager = getActivity().getFullscreenM anager(); 322 ChromeFullscreenManager fullscreenManager = getActivity().getFullscreenM anager();
339 assertEquals(fullscreenManager.getControlOffset(), 0f); 323 assertEquals(fullscreenManager.getControlOffset(), 0f);
340 324
341 fullscreenManager.setAnimationDurationsForTest(1, 1); 325 fullscreenManager.setAnimationDurationsForTest(1, 1);
342 326
343 int topControlsHeight = fullscreenManager.getTopControlsHeight(); 327 int topControlsHeight = fullscreenManager.getTopControlsHeight();
344 float dragX = 50f; 328 float dragX = 50f;
345 float dragStartY = topControlsHeight * 3; 329 float dragStartY = topControlsHeight * 3;
346 float dragEndY = dragStartY - topControlsHeight * 2; 330 float dragEndY = dragStartY - topControlsHeight * 2;
347 long downTime = SystemClock.uptimeMillis(); 331 long downTime = SystemClock.uptimeMillis();
348 dragStart(dragX, dragStartY, downTime); 332 dragStart(dragX, dragStartY, downTime);
349 dragTo(dragX, dragX, dragStartY, dragEndY, 100, downTime); 333 dragTo(dragX, dragX, dragStartY, dragEndY, 100, downTime);
350 dragEnd(dragX, dragEndY, downTime); 334 dragEnd(dragX, dragEndY, downTime);
351 waitForNoBrowserTopControlsOffset(); 335 waitForNoBrowserTopControlsOffset();
352 assertEquals(fullscreenManager.getControlOffset(), 0f); 336 assertEquals(fullscreenManager.getControlOffset(), 0f);
353 337
354 Tab tab = getActivity().getActivityTab(); 338 Tab tab = getActivity().getActivityTab();
355 singleClickView(tab.getView()); 339 singleClickView(tab.getView());
356 waitForEditableNodeToLoseFocus(tab); 340 waitForEditableNodeToLoseFocus(tab);
357 scrollTopControls(false); 341
358 scrollTopControls(true); 342 waitForTopControlsToBeMoveable(getActivity().getActivityTab());
359 } 343 }
360 344
361 private void scrollTopControls(boolean show) throws InterruptedException, Ex ecutionException { 345 private void scrollTopControls(boolean show) throws InterruptedException {
362 ChromeFullscreenManager fullscreenManager = getActivity().getFullscreenM anager(); 346 ChromeFullscreenManager fullscreenManager = getActivity().getFullscreenM anager();
363 int topControlsHeight = fullscreenManager.getTopControlsHeight(); 347 int topControlsHeight = fullscreenManager.getTopControlsHeight();
364 348
365 waitForPageToBeScrollable(getActivity().getActivityTab()); 349 waitForPageToBeScrollable(getActivity().getActivityTab());
366 350
367 float dragX = 50f; 351 float dragX = 50f;
368 // Use a larger scroll range than the height of the top controls to ensu re we overcome 352 // Use a larger scroll range than the height of the top controls to ensu re we overcome
369 // the delay in a scroll start being sent. 353 // the delay in a scroll start being sent.
370 float dragStartY = topControlsHeight * 3; 354 float dragStartY = topControlsHeight * 3;
371 float dragEndY = dragStartY - topControlsHeight * 2; 355 float dragEndY = dragStartY - topControlsHeight * 2;
372 float expectedPosition = -topControlsHeight; 356 float expectedPosition = -topControlsHeight;
373 if (show) { 357 if (show) {
374 expectedPosition = 0f; 358 expectedPosition = 0f;
375 float tempDragStartY = dragStartY; 359 float tempDragStartY = dragStartY;
376 dragStartY = dragEndY; 360 dragStartY = dragEndY;
377 dragEndY = tempDragStartY; 361 dragEndY = tempDragStartY;
378 } 362 }
379 long downTime = SystemClock.uptimeMillis(); 363 long downTime = SystemClock.uptimeMillis();
380 dragStart(dragX, dragStartY, downTime); 364 dragStart(dragX, dragStartY, downTime);
381 dragTo(dragX, dragX, dragStartY, dragEndY, 100, downTime); 365 dragTo(dragX, dragX, dragStartY, dragEndY, 100, downTime);
382 assertEquals(expectedPosition, waitForTopControlsPosition(expectedPositi on));
383 dragEnd(dragX, dragEndY, downTime); 366 dragEnd(dragX, dragEndY, downTime);
384 assertEquals(expectedPosition, waitForTopControlsPosition(expectedPositi on)); 367 waitForTopControlsPosition(expectedPosition);
385 } 368 }
386 369
387 private void togglePersistentFullscreen(final TabWebContentsDelegateAndroid delegate, 370 private void togglePersistentFullscreen(final TabWebContentsDelegateAndroid delegate,
388 final boolean state) { 371 final boolean state) {
389 ThreadUtils.runOnUiThread(new Runnable() { 372 ThreadUtils.runOnUiThread(new Runnable() {
390 @Override 373 @Override
391 public void run() { 374 public void run() {
392 delegate.toggleFullscreenModeForTab(state); 375 delegate.toggleFullscreenModeForTab(state);
393 } 376 }
394 }); 377 });
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 private void waitForPersistentFullscreen(final TabWebContentsDelegateAndroid delegate, 411 private void waitForPersistentFullscreen(final TabWebContentsDelegateAndroid delegate,
429 final boolean state) throws InterruptedException { 412 final boolean state) throws InterruptedException {
430 CriteriaHelper.pollForUIThreadCriteria(new Criteria() { 413 CriteriaHelper.pollForUIThreadCriteria(new Criteria() {
431 @Override 414 @Override
432 public boolean isSatisfied() { 415 public boolean isSatisfied() {
433 return state == delegate.isFullscreenForTabOrPending(); 416 return state == delegate.isFullscreenForTabOrPending();
434 } 417 }
435 }); 418 });
436 } 419 }
437 420
438 private float waitForTopControlsPosition(final float position) 421 private void waitForTopControlsPosition(final float position)
439 throws InterruptedException, ExecutionException { 422 throws InterruptedException {
440 final ChromeFullscreenManager fullscreenManager = getActivity().getFulls creenManager(); 423 final ChromeFullscreenManager fullscreenManager = getActivity().getFulls creenManager();
441 CriteriaHelper.pollForUIThreadCriteria(new Criteria() { 424 CriteriaHelper.pollForUIThreadCriteria(new Criteria() {
442 @Override 425 @Override
443 public boolean isSatisfied() { 426 public boolean isSatisfied() {
427 updateFailureReason("Top controls did not reach expected positio n. Expected: "
428 + position + ", Actual: " + fullscreenManager.getControl Offset());
444 return position == fullscreenManager.getControlOffset(); 429 return position == fullscreenManager.getControlOffset();
445 } 430 }
446 }); 431 });
447 return ThreadUtils.runOnUiThreadBlocking(new Callable<Float>() {
448 @Override
449 public Float call() throws Exception {
450 return fullscreenManager.getControlOffset();
451 }
452 });
453 } 432 }
454 433
455 private void waitForNoBrowserTopControlsOffset() throws InterruptedException { 434 private void waitForNoBrowserTopControlsOffset() throws InterruptedException {
456 final ChromeFullscreenManager fullscreenManager = getActivity().getFulls creenManager(); 435 final ChromeFullscreenManager fullscreenManager = getActivity().getFulls creenManager();
457 CriteriaHelper.pollForUIThreadCriteria(new Criteria() { 436 CriteriaHelper.pollForUIThreadCriteria(new Criteria() {
458 @Override 437 @Override
459 public boolean isSatisfied() { 438 public boolean isSatisfied() {
460 return !fullscreenManager.hasBrowserControlOffsetOverride(); 439 return !fullscreenManager.hasBrowserControlOffsetOverride();
461 } 440 }
462 }); 441 });
463 } 442 }
464 443
465 private void waitForPageToBeScrollable(final Tab tab) throws InterruptedExce ption { 444 private void waitForPageToBeScrollable(final Tab tab) throws InterruptedExce ption {
466 CriteriaHelper.pollForUIThreadCriteria(new Criteria() { 445 CriteriaHelper.pollForUIThreadCriteria(new Criteria() {
467 @Override 446 @Override
468 public boolean isSatisfied() { 447 public boolean isSatisfied() {
469 ContentViewCore contentViewCore = tab.getContentViewCore(); 448 ContentViewCore contentViewCore = tab.getContentViewCore();
470 return contentViewCore.computeVerticalScrollRange() 449 return contentViewCore.computeVerticalScrollRange()
471 > contentViewCore.getContainerView().getHeight(); 450 > contentViewCore.getContainerView().getHeight();
472 } 451 }
473 }); 452 });
474 } 453 }
475 454
455 /**
456 * Waits for the top controls to be moveable by user gesture.
457 * <p>
458 * This function requires the top controls to start fully visible. It till then ensure that at
459 * some point the controls can be moved by user gesture. It will then fully cycle the top
460 * controls to entirely hidden and back to fully shown.
461 */
462 private void waitForTopControlsToBeMoveable(final Tab tab) throws Interrupte dException {
463 waitForTopControlsPosition(0f);
464
465 final CallbackHelper contentMovedCallback = new CallbackHelper();
466 final ChromeFullscreenManager fullscreenManager = getActivity().getFulls creenManager();
467 final float initialVisibleContentOffset = fullscreenManager.getVisibleCo ntentOffset();
468
469 fullscreenManager.addListener(new FullscreenListener() {
470 @Override
471 public void onVisibleContentOffsetChanged(float offset) {
472 if (offset != initialVisibleContentOffset) {
473 contentMovedCallback.notifyCalled();
474 fullscreenManager.removeListener(this);
475 }
476 }
477
478 @Override
479 public void onToggleOverlayVideoMode(boolean enabled) {
480 }
481
482 @Override
483 public void onContentOffsetChanged(float offset) {
484 }
485 });
486
487 float dragX = 50f;
488 float dragStartY = tab.getView().getHeight() - 50f;
489
490 for (int i = 0; i < 10; i++) {
491 float dragEndY = dragStartY - fullscreenManager.getTopControlsHeight ();
492
493 long downTime = SystemClock.uptimeMillis();
494 dragStart(dragX, dragStartY, downTime);
495 dragTo(dragX, dragX, dragStartY, dragEndY, 100, downTime);
496 dragEnd(dragX, dragEndY, downTime);
497
498 try {
499 contentMovedCallback.waitForCallback(0, 1, 500, TimeUnit.MILLISE CONDS);
500
501 scrollTopControls(false);
502 scrollTopControls(true);
503
504 return;
505 } catch (TimeoutException e) {
506 // Ignore and retry
507 }
508 }
509
510 fail("Visible content never moved as expected.");
511 }
512
476 private void waitForEditableNodeToLoseFocus(final Tab tab) throws Interrupte dException { 513 private void waitForEditableNodeToLoseFocus(final Tab tab) throws Interrupte dException {
477 CriteriaHelper.pollForUIThreadCriteria(new Criteria() { 514 CriteriaHelper.pollForUIThreadCriteria(new Criteria() {
478 @Override 515 @Override
479 public boolean isSatisfied() { 516 public boolean isSatisfied() {
480 ContentViewCore contentViewCore = tab.getContentViewCore(); 517 ContentViewCore contentViewCore = tab.getContentViewCore();
481 return !contentViewCore.isFocusedNodeEditable(); 518 return !contentViewCore.isFocusedNodeEditable();
482 } 519 }
483 }); 520 });
484 } 521 }
485 522
523 private void disableBrowserOverrides() {
524 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
525 @Override
526 public void run() {
527 getActivity().getFullscreenManager().disableBrowserOverrideForTe st();
528 }
529 });
530 }
531
486 @Override 532 @Override
487 protected void startMainActivityWithURL(String url) throws InterruptedExcept ion { 533 protected void startMainActivityWithURL(String url) throws InterruptedExcept ion {
488 super.startMainActivityWithURL(url); 534 super.startMainActivityWithURL(url);
489 final Tab tab = getActivity().getActivityTab(); 535 final Tab tab = getActivity().getActivityTab();
490 ThreadUtils.runOnUiThread(new Runnable() { 536 ThreadUtils.runOnUiThread(new Runnable() {
491 @Override 537 @Override
492 public void run() { 538 public void run() {
493 tab.processEnableFullscreenRunnableForTest(); 539 tab.processEnableFullscreenRunnableForTest();
494 } 540 }
495 }); 541 });
496 } 542 }
497 543
498 @Override 544 @Override
499 public void startMainActivity() throws InterruptedException { 545 public void startMainActivity() throws InterruptedException {
500 // Each test will start itself with the appropriate test page. 546 // Each test will start itself with the appropriate test page.
501 } 547 }
502 } 548 }
OLDNEW
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698