| 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 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |