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.fullscreen; | 5 package org.chromium.chrome.browser.fullscreen; |
6 | 6 |
7 import android.graphics.Rect; | 7 import android.graphics.Rect; |
8 import android.graphics.Region; | 8 import android.graphics.Region; |
9 import android.os.Build; | 9 import android.os.Build; |
10 import android.os.SystemClock; | 10 import android.os.SystemClock; |
(...skipping 25 matching lines...) Expand all Loading... |
36 | 36 |
37 import java.util.concurrent.Callable; | 37 import java.util.concurrent.Callable; |
38 import java.util.concurrent.ExecutionException; | 38 import java.util.concurrent.ExecutionException; |
39 import java.util.concurrent.atomic.AtomicInteger; | 39 import java.util.concurrent.atomic.AtomicInteger; |
40 | 40 |
41 /** | 41 /** |
42 * Test suite for verifying the behavior of various fullscreen actions. | 42 * Test suite for verifying the behavior of various fullscreen actions. |
43 */ | 43 */ |
44 public class FullscreenManagerTest extends ChromeTabbedActivityTestBase { | 44 public class FullscreenManagerTest extends ChromeTabbedActivityTestBase { |
45 | 45 |
| 46 private static final String LONG_HTML_WITH_AUTO_FOCUS_INPUT_TEST_PAGE = |
| 47 UrlUtils.encodeHtmlDataUri("<html>" |
| 48 + "<body style='height:10000px;'>" |
| 49 + "<p>The text input is focused automatically on load." |
| 50 + " The top controls should not hide when page is scrolled.<
/p><br/>" |
| 51 + "<input id=\"input_text\" type=\"text\" autofocus/>" |
| 52 + "</body>" |
| 53 + "</html>"); |
| 54 |
46 private static final String LONG_HTML_TEST_PAGE = UrlUtils.encodeHtmlDataUri
( | 55 private static final String LONG_HTML_TEST_PAGE = UrlUtils.encodeHtmlDataUri
( |
47 "<html><body style='height:10000px;'></body></html>"); | 56 "<html><body style='height:10000px;'></body></html>"); |
48 private static final String LONG_FULLSCREEN_API_HTML_TEST_PAGE = UrlUtils.en
codeHtmlDataUri( | 57 private static final String LONG_FULLSCREEN_API_HTML_TEST_PAGE = UrlUtils.en
codeHtmlDataUri( |
49 "<html>" | 58 "<html>" |
50 + "<head>" | 59 + "<head>" |
51 + " <meta name=\"viewport\" " | 60 + " <meta name=\"viewport\" " |
52 + " content=\"width=device-width, initial-scale=1.0, maximum-scal
e=1.0\" />" | 61 + " content=\"width=device-width, initial-scale=1.0, maximum-scal
e=1.0\" />" |
53 + " <script>" | 62 + " <script>" |
54 + " function toggleFullScreen() {" | 63 + " function toggleFullScreen() {" |
55 + " if (document.webkitIsFullScreen) {" | 64 + " if (document.webkitIsFullScreen) {" |
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
313 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 322 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
314 @Override | 323 @Override |
315 public void run() { | 324 public void run() { |
316 ChromeTab.fromTab(tab).processEnableFullscreenRunnableForTest(); | 325 ChromeTab.fromTab(tab).processEnableFullscreenRunnableForTest(); |
317 } | 326 } |
318 }); | 327 }); |
319 | 328 |
320 scrollTopControls(false); | 329 scrollTopControls(false); |
321 } | 330 } |
322 | 331 |
| 332 @LargeTest |
| 333 @Feature({"Fullscreen"}) |
| 334 public void testTopControlsShownWhenInputIsFocused() |
| 335 throws InterruptedException, ExecutionException { |
| 336 startMainActivityWithURL(LONG_HTML_WITH_AUTO_FOCUS_INPUT_TEST_PAGE); |
| 337 |
| 338 ChromeFullscreenManager fullscreenManager = getActivity().getFullscreenM
anager(); |
| 339 assertEquals(fullscreenManager.getControlOffset(), 0f); |
| 340 |
| 341 fullscreenManager.setAnimationDurationsForTest(1, 1); |
| 342 |
| 343 int topControlsHeight = fullscreenManager.getTopControlsHeight(); |
| 344 float dragX = 50f; |
| 345 float dragStartY = topControlsHeight * 3; |
| 346 float dragEndY = dragStartY - topControlsHeight * 2; |
| 347 long downTime = SystemClock.uptimeMillis(); |
| 348 dragStart(dragX, dragStartY, downTime); |
| 349 dragTo(dragX, dragX, dragStartY, dragEndY, 100, downTime); |
| 350 dragEnd(dragX, dragEndY, downTime); |
| 351 assertTrue(waitForNoBrowserTopControlsOffset()); |
| 352 assertEquals(fullscreenManager.getControlOffset(), 0f); |
| 353 |
| 354 Tab tab = getActivity().getActivityTab(); |
| 355 singleClickView(tab.getView()); |
| 356 waitForEditableNodeToLoseFocus(tab); |
| 357 scrollTopControls(false); |
| 358 scrollTopControls(true); |
| 359 } |
| 360 |
323 private void scrollTopControls(boolean show) throws InterruptedException, Ex
ecutionException { | 361 private void scrollTopControls(boolean show) throws InterruptedException, Ex
ecutionException { |
324 ChromeFullscreenManager fullscreenManager = getActivity().getFullscreenM
anager(); | 362 ChromeFullscreenManager fullscreenManager = getActivity().getFullscreenM
anager(); |
325 int topControlsHeight = fullscreenManager.getTopControlsHeight(); | 363 int topControlsHeight = fullscreenManager.getTopControlsHeight(); |
326 | 364 |
327 waitForPageToBeScrollable(getActivity().getActivityTab()); | 365 waitForPageToBeScrollable(getActivity().getActivityTab()); |
328 | 366 |
329 float dragX = 50f; | 367 float dragX = 50f; |
330 // Use a larger scroll range than the height of the top controls to ensu
re we overcome | 368 // Use a larger scroll range than the height of the top controls to ensu
re we overcome |
331 // the delay in a scroll start being sent. | 369 // the delay in a scroll start being sent. |
332 float dragStartY = topControlsHeight * 3; | 370 float dragStartY = topControlsHeight * 3; |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
478 } | 516 } |
479 }).get(); | 517 }).get(); |
480 } catch (Exception e) { | 518 } catch (Exception e) { |
481 fail(e.getMessage()); | 519 fail(e.getMessage()); |
482 return false; | 520 return false; |
483 } | 521 } |
484 } | 522 } |
485 }); | 523 }); |
486 } | 524 } |
487 | 525 |
| 526 private boolean waitForEditableNodeToLoseFocus(final Tab tab) throws Interru
ptedException { |
| 527 return CriteriaHelper.pollForUIThreadCriteria(new Criteria() { |
| 528 @Override |
| 529 public boolean isSatisfied() { |
| 530 ContentViewCore contentViewCore = tab.getContentViewCore(); |
| 531 return !contentViewCore.isFocusedNodeEditable(); |
| 532 } |
| 533 }); |
| 534 } |
| 535 |
488 @Override | 536 @Override |
489 protected void startMainActivityWithURL(String url) throws InterruptedExcept
ion { | 537 protected void startMainActivityWithURL(String url) throws InterruptedExcept
ion { |
490 super.startMainActivityWithURL(url); | 538 super.startMainActivityWithURL(url); |
491 final Tab tab = getActivity().getActivityTab(); | 539 final Tab tab = getActivity().getActivityTab(); |
492 ThreadUtils.runOnUiThread(new Runnable() { | 540 ThreadUtils.runOnUiThread(new Runnable() { |
493 @Override | 541 @Override |
494 public void run() { | 542 public void run() { |
495 ChromeTab.fromTab(tab).processEnableFullscreenRunnableForTest(); | 543 ChromeTab.fromTab(tab).processEnableFullscreenRunnableForTest(); |
496 } | 544 } |
497 }); | 545 }); |
498 } | 546 } |
499 | 547 |
500 @Override | 548 @Override |
501 public void startMainActivity() throws InterruptedException { | 549 public void startMainActivity() throws InterruptedException { |
502 // Each test will start itself with the appropriate test page. | 550 // Each test will start itself with the appropriate test page. |
503 } | 551 } |
504 } | 552 } |
OLD | NEW |