Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 41a2db639391c73e7eba6df8c136705c213b1276 https://github.com/WebKit/WebKit/commit/41a2db639391c73e7eba6df8c136705c213b1276 Author: Wenson Hsieh <wenson_hs...@apple.com> Date: 2023-07-17 (Mon, 17 Jul 2023)
Changed paths: M Source/WebKit/Platform/spi/ios/UIKitSPI.h M Source/WebKit/UIProcess/API/ios/WKWebViewIOS.mm M Source/WebKit/UIProcess/ios/UIKitUtilities.h M Source/WebKit/UIProcess/ios/UIKitUtilities.mm M Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm Log Message: ----------- [iOS] Stop using -[UIScrollView _isInterruptingDeceleration] in WebKit https://bugs.webkit.org/show_bug.cgi?id=259252 rdar://112334670 Reviewed by Megan Gardner. Replace uses of `-[UIScrollView _isInterruptingDeceleration]` with a combination of `-isTracking` and `-isDecelerating` instead. We currently use this SPI for two purposes: determining view stability and preventing some gestures from firing when tapping to interrupt momentum scrolling. Note that the only case I found where `decelerating && tracking` yields different results than `_isInterruptingDeceleration` is the case where, after interrupting scroll view decleration with a tap, `tracking` will be `NO` while `_isInterruptingDeceleration` is still `YES`. However, this shouldn't matter to WebKit because `-gestureRecognizerShouldBegin:` has already been invoked on the gesture recognizers that care about scroll view deceleration (i.e. touch events, synthetic click), and `decelerating` is still set to `YES` so the view stability heuristic would still report unstable state. * Source/WebKit/Platform/spi/ios/UIKitSPI.h: * Source/WebKit/UIProcess/API/ios/WKWebViewIOS.mm: (-[WKWebView scrollViewWillBeginDecelerating:]): (-[WKWebView _viewStabilityState:]): When determining view stability, we currently return YES if `-_isInterruptingDeceleration` is set. This is actually redundant since: 1. The resulting view stability `OptionSet` is only checked to see whether or not it's empty, so the actual values of the flags returned don't influence any behavior (i.e. it's just for debugging and readability). 2. We already consult `-isDecelerating` right below, which is set to `YES` over the course of `-_isInterruptingDeceleration`, so in all cases where we would've considered the view to be in unstable state due to `-_isInterruptingDeceleration`, we would also consider it to be in unstable state regardless, due to the fact that the scroll view is decelerating. * Source/WebKit/UIProcess/ios/UIKitUtilities.h: * Source/WebKit/UIProcess/ios/UIKitUtilities.mm: (-[UIScrollView _wk_isInterruptingDeceleration]): Add a new category method that implements a helper method `-_wk_isInterruptingDeceleration`; this acts as a drop-in replacement for `-_isInterruptingDeceleration`, that's suitable for current uses within WebKit. * Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView _isInterruptingDecelerationForScrollViewOrAncestor:]): (-[WKContentView gestureRecognizer:isInterruptingMomentumScrollingWithEvent:]): Take care of the second use of this SPI property, which prevents certain gestures (touch events and synthetic click) from firing if the user is interrupting a momentum scroll; see comment above for an explanation about why this should not change behavior. Canonical link: https://commits.webkit.org/266111@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes