[webkit-changes] [WebKit/WebKit] dc3e66: [iOS] Scrolling snaps to previous snap point when ...

Wenson Hsieh noreply at github.com
Wed Apr 19 18:54:17 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: dc3e66efee5b3ab0c2be1def4e3539a9dd178c66
      https://github.com/WebKit/WebKit/commit/dc3e66efee5b3ab0c2be1def4e3539a9dd178c66
  Author: Wenson Hsieh <wenson_hsieh at apple.com>
  Date:   2023-04-19 (Wed, 19 Apr 2023)

  Changed paths:
    M LayoutTests/TestExpectations
    A LayoutTests/css3/scroll-snap/ios/scroll-snap-mainframe-scroll-deceleration-with-obscured-inset-expected.txt
    A LayoutTests/css3/scroll-snap/ios/scroll-snap-mainframe-scroll-deceleration-with-obscured-inset.html
    M LayoutTests/platform/ios-wk2/TestExpectations
    M Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm
    M Tools/WebKitTestRunner/TestOptions.cpp
    M Tools/WebKitTestRunner/TestOptions.h
    M Tools/WebKitTestRunner/ios/TestControllerIOS.mm

  Log Message:
  -----------
  [iOS] Scrolling snaps to previous snap point when tapping during a scroll snap in mainframe
https://bugs.webkit.org/show_bug.cgi?id=255670
rdar://108008480

Reviewed by Tim Horton.

When interrupting scroll view deceleration with a tap gesture, we re-run logic to retarget the snap
offset given the current scroll offset and the projected (original) scroll offset where we would've
ended up scrolling. In an overflow region where this bug does *not* reproduce, the current offset is
equal to the projected offset, so we simply retarget to the closest snap point.

However, in a mainframe scroll snapping context where the bug reproduces, the projected snap offset
is off by an amount equal to the top obscured inset, which means that instead of defaulting to the
closest snap position, we'll instead always retarget the previous snap point. To fix this, we simply
apply this same adjustment to this projected offset.

Test: css3/scroll-snap/ios/scroll-snap-mainframe-scroll-deceleration-with-obscured-inset.html

* LayoutTests/TestExpectations:
* LayoutTests/css3/scroll-snap/ios/scroll-snap-mainframe-scroll-deceleration-with-obscured-inset-expected.txt: Added.
* LayoutTests/css3/scroll-snap/ios/scroll-snap-mainframe-scroll-deceleration-with-obscured-inset.html: Added.

Add a layout test to exercise this change, by scrolling via a swipe gesture, tapping, and verifying
that we don't snap back to the start.

* LayoutTests/platform/ios-wk2/TestExpectations:
* Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm:
(WebKit::RemoteScrollingCoordinatorProxyIOS::adjustTargetContentOffsetForSnapping):

Offset the projected offset by the top obscured inset, for consistency with the current offset.

* Tools/WebKitTestRunner/TestOptions.cpp:
(WTR::TestOptions::defaults):
(WTR::TestOptions::keyTypeMapping):
* Tools/WebKitTestRunner/TestOptions.h:
(WTR::TestOptions::obscuredInsetTop const):
* Tools/WebKitTestRunner/ios/TestControllerIOS.mm:
(WTR::TestController::platformResetStateToConsistentValues):

Add a new test option to specify a top obscured inset value on the web view.

Canonical link: https://commits.webkit.org/263158@main




More information about the webkit-changes mailing list