Index: telemetry/telemetry/internal/actions/repeatable_scroll_unittest.py |
diff --git a/telemetry/telemetry/internal/actions/repeatable_scroll_unittest.py b/telemetry/telemetry/internal/actions/repeatable_scroll_unittest.py |
index f5341e9897e1f072e7004c8b5bb832e80bb7a6a0..2c720ec519fb8a4a8229a0412f75ce000c81d122 100644 |
--- a/telemetry/telemetry/internal/actions/repeatable_scroll_unittest.py |
+++ b/telemetry/telemetry/internal/actions/repeatable_scroll_unittest.py |
@@ -2,7 +2,11 @@ |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
+from telemetry import decorators |
+ |
+from telemetry.internal.actions import page_action |
from telemetry.internal.actions import repeatable_scroll |
+from telemetry.internal.actions import utils |
from telemetry.internal.browser import browser_info as browser_info_module |
from telemetry.testing import tab_test_case |
@@ -12,18 +16,18 @@ class RepeatableScrollActionTest(tab_test_case.TabTestCase): |
def setUp(self): |
tab_test_case.TabTestCase.setUp(self) |
self.Navigate('blank.html') |
+ utils.InjectJavaScript(self._tab, 'gesture_common.js') |
- # Make page bigger than window so it's scrollable. |
- self._tab.ExecuteJavaScript('document.body.style.height = ' |
- ' (3 * window.innerHeight + 1) + "px";') |
+ # Make page taller than window so it's scrollable. |
+ self._tab.ExecuteJavaScript('document.body.style.height =' |
+ '(3 * __GestureCommon_GetWindowHeight() + 1) + "px";') |
self.assertEquals( |
- self._tab.EvaluateJavaScript('document.documentElement.scrollTop ' |
- '|| document.body.scrollTop'), 0) |
+ self._tab.EvaluateJavaScript('document.scrollingElement.scrollTop'), 0) |
self._browser_info = browser_info_module.BrowserInfo(self._tab.browser) |
- self._window_height = int( |
- self._tab.EvaluateJavaScript('window.innerHeight')) |
+ self._window_height = int(self._tab.EvaluateJavaScript( |
+ '__GestureCommon_GetWindowHeight()')) |
def testRepeatableScrollActionNoRepeats(self): |
if not self._browser_info.HasRepeatableSynthesizeScrollGesture(): |
@@ -37,7 +41,7 @@ class RepeatableScrollActionTest(tab_test_case.TabTestCase): |
i.RunAction(self._tab) |
scroll_position = self._tab.EvaluateJavaScript( |
- '(document.documentElement.scrollTop || document.body.scrollTop)') |
+ 'document.scrollingElement.scrollTop') |
# We can only expect the final scroll position to be approximatly equal. |
self.assertTrue(abs(scroll_position - expected_scroll) < 20, |
msg='scroll_position=%d;expected %d' % (scroll_position, |
@@ -57,8 +61,33 @@ class RepeatableScrollActionTest(tab_test_case.TabTestCase): |
i.RunAction(self._tab) |
scroll_position = self._tab.EvaluateJavaScript( |
- '(document.documentElement.scrollTop || document.body.scrollTop)') |
+ 'document.scrollingElement.scrollTop') |
# We can only expect the final scroll position to be approximatly equal. |
self.assertTrue(abs(scroll_position - expected_scroll) < 20, |
msg='scroll_position=%d;expected %d' % (scroll_position, |
expected_scroll)) |
+ |
+ # Regression test for crbug.com/627166 |
+ # TODO(ulan): enable for Android after catapult:#2475 is fixed. |
+ @decorators.Disabled('all') |
+ def testRepeatableScrollActionNoRepeatsZoomed(self): |
+ if (not self._browser_info.HasRepeatableSynthesizeScrollGesture() or |
+ not page_action.IsGestureSourceTypeSupported(self._tab, 'touch')): |
+ return |
+ |
+ self._tab.action_runner.PinchPage(scale_factor=0.1) |
+ |
+ inner_height = self._tab.EvaluateJavaScript('window.innerHeight') |
+ outer_height = self._tab.EvaluateJavaScript('window.outerHeight') |
+ |
+ self.assertGreater(inner_height, outer_height) |
+ |
+ i = repeatable_scroll.RepeatableScrollAction(y_scroll_distance_ratio=0.5) |
+ i.WillRunAction(self._tab) |
+ i.RunAction(self._tab) |
+ # If scroll coordinates are computed incorrectly Chrome will crash with |
+ # [FATAL:synthetic_gesture_target_base.cc(62)] Check failed: |
+ # web_touch.touches[i].state != WebTouchPoint::StatePressed || |
+ # PointIsWithinContents(web_touch.touches[i].position.x, |
+ # web_touch.touches[i].position.y). Touch coordinates are not within content |
+ # bounds on TouchStart. |