WebKit Bugzilla
Attachment 369490 Details for
Bug 197738
: pointerevents/ios/touch-action-none-in-overflow-scrolling-touch.html is a timeout
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-197738-20190509160427.patch (text/plain), 7.79 KB, created by
Antoine Quint
on 2019-05-09 07:04:28 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Antoine Quint
Created:
2019-05-09 07:04:28 PDT
Size:
7.79 KB
patch
obsolete
>Subversion Revision: 245127 >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index b8082181010baea60ae247624c9165dbcad66457..edc33b3822f0814e14899be63bbac40a1654c694 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,27 @@ >+2019-05-09 Antoine Quint <graouts@apple.com> >+ >+ pointerevents/ios/touch-action-none-in-overflow-scrolling-touch.html is a timeout >+ https://bugs.webkit.org/show_bug.cgi?id=197738 >+ <rdar://problem/50588613> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ We clear the touch actions for a given touch identifier when the matching touch is released in -[WKContentViewInteraction _handleTouchActionsForTouchEvent:]. >+ This happens before -[WKScrollingNodeScrollViewDelegate scrollViewWillEndDragging:withVelocity:targetContentOffset:] is called and thus, which we correctly >+ respected the touch actions during the panning gesture, we would not be able to respect them during the deceleration animation. This caused the test to fail >+ because it would check that no scrolling happened after the panning gesture completed, ie. during the deceleration animation. >+ >+ To work around this, we now store the touch actions for a given UIScrollView interaction in the ScrollingTreeScrollingNodeDelegateIOS object when the interaction >+ starts. >+ >+ * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h: >+ (WebKit::ScrollingTreeScrollingNodeDelegateIOS::activeTouchActions const): >+ * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm: >+ (-[WKScrollingNodeScrollViewDelegate scrollViewWillEndDragging:withVelocity:targetContentOffset:]): >+ (-[WKScrollingNodeScrollViewDelegate _scrollView:adjustedOffsetForOffset:translation:startPoint:locationInView:horizontalVelocity:verticalVelocity:]): >+ (WebKit::ScrollingTreeScrollingNodeDelegateIOS::computeActiveTouchActionsForGestureRecognizer): >+ (WebKit::ScrollingTreeScrollingNodeDelegateIOS::activeTouchActionsForGestureRecognizer const): Deleted. >+ > 2019-05-08 Antoine Quint <graouts@apple.com> > > [iOS] Correctly handle overlapping regions for elements with a touch-action property >diff --git a/Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h b/Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h >index 0656656ffba7099703da15b9ad8a3faafb573632..9b4786401dce6d7fb8257b8c4d2b605a1ff1a71e 100644 >--- a/Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h >+++ b/Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h >@@ -66,7 +66,8 @@ public: > void repositionScrollingLayers(); > > #if ENABLE(POINTER_EVENTS) >- OptionSet<TouchAction> activeTouchActionsForGestureRecognizer(UIGestureRecognizer*) const; >+ OptionSet<TouchAction> activeTouchActions() const { return m_activeTouchActions; } >+ void computeActiveTouchActionsForGestureRecognizer(UIGestureRecognizer*); > void cancelPointersForGestureRecognizer(UIGestureRecognizer*); > #endif > >@@ -74,6 +75,9 @@ private: > RetainPtr<CALayer> m_scrollLayer; > RetainPtr<CALayer> m_scrolledContentsLayer; > RetainPtr<WKScrollingNodeScrollViewDelegate> m_scrollViewDelegate; >+#if ENABLE(POINTER_EVENTS) >+ OptionSet<TouchAction> m_activeTouchActions { }; >+#endif > bool m_updatingFromStateNode { false }; > }; > >diff --git a/Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm b/Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm >index ac685f213eec973002801720df829a2ed4b95ce8..9c489c8ff48505c296b4db5893a844ffc35cb7b2 100644 >--- a/Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm >+++ b/Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm >@@ -79,7 +79,7 @@ - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoi > { > #if ENABLE(POINTER_EVENTS) > if (![scrollView isZooming]) { >- auto touchActions = _scrollingTreeNodeDelegate->activeTouchActionsForGestureRecognizer(scrollView.panGestureRecognizer); >+ auto touchActions = _scrollingTreeNodeDelegate->activeTouchActions(); > if (touchActions && !touchActions.containsAny({ WebCore::TouchAction::Auto, WebCore::TouchAction::Manipulation })) { > bool canPanX = true; > bool canPanY = true; >@@ -147,7 +147,9 @@ - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView > - (CGPoint)_scrollView:(UIScrollView *)scrollView adjustedOffsetForOffset:(CGPoint)offset translation:(CGPoint)translation startPoint:(CGPoint)start locationInView:(CGPoint)locationInView horizontalVelocity:(inout double *)hv verticalVelocity:(inout double *)vv > { > auto* panGestureRecognizer = scrollView.panGestureRecognizer; >- auto touchActions = _scrollingTreeNodeDelegate->activeTouchActionsForGestureRecognizer(panGestureRecognizer); >+ _scrollingTreeNodeDelegate->computeActiveTouchActionsForGestureRecognizer(panGestureRecognizer); >+ auto touchActions = _scrollingTreeNodeDelegate->activeTouchActions(); >+ > if (!touchActions) { > [self cancelPointersForGestureRecognizer:panGestureRecognizer]; > return offset; >@@ -336,12 +338,11 @@ void ScrollingTreeScrollingNodeDelegateIOS::currentSnapPointIndicesDidChange(uns > } > > #if ENABLE(POINTER_EVENTS) >-OptionSet<TouchAction> ScrollingTreeScrollingNodeDelegateIOS::activeTouchActionsForGestureRecognizer(UIGestureRecognizer* gestureRecognizer) const >+void ScrollingTreeScrollingNodeDelegateIOS::computeActiveTouchActionsForGestureRecognizer(UIGestureRecognizer* gestureRecognizer) > { > auto& scrollingCoordinatorProxy = downcast<RemoteScrollingTree>(scrollingTree()).scrollingCoordinatorProxy(); > if (auto touchIdentifier = scrollingCoordinatorProxy.webPageProxy().pageClient().activeTouchIdentifierForGestureRecognizer(gestureRecognizer)) >- return scrollingCoordinatorProxy.activeTouchActionsForTouchIdentifier(*touchIdentifier); >- return { }; >+ m_activeTouchActions = scrollingCoordinatorProxy.activeTouchActionsForTouchIdentifier(*touchIdentifier); > } > > void ScrollingTreeScrollingNodeDelegateIOS::cancelPointersForGestureRecognizer(UIGestureRecognizer* gestureRecognizer) >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index f6ed76be796e9022a101e7412947d2896e7b39d2..7d89aeb87b4b31f787bf4e9902237e43bb27f5a5 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,15 @@ >+2019-05-09 Antoine Quint <graouts@apple.com> >+ >+ pointerevents/ios/touch-action-none-in-overflow-scrolling-touch.html is a timeout >+ https://bugs.webkit.org/show_bug.cgi?id=197738 >+ <rdar://problem/50588613> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ To pass, this test must also disable the legacy "-webkit-overflow-scrolling: touch" behavior. >+ >+ * pointerevents/ios/touch-action-none-in-overflow-scrolling-touch.html: >+ > 2019-05-09 Antti Koivisto <antti@apple.com> > > Elements with "display: inline-block" don't have a touch-action region >diff --git a/LayoutTests/pointerevents/ios/touch-action-none-in-overflow-scrolling-touch.html b/LayoutTests/pointerevents/ios/touch-action-none-in-overflow-scrolling-touch.html >index 567551bef1cb3b718e11306947fc6c9113abb8ea..f7c9d30593b0dda4fe055cbeacc5cb9ae8341a71 100644 >--- a/LayoutTests/pointerevents/ios/touch-action-none-in-overflow-scrolling-touch.html >+++ b/LayoutTests/pointerevents/ios/touch-action-none-in-overflow-scrolling-touch.html >@@ -1,4 +1,4 @@ >-<!DOCTYPE html> <!-- webkit-test-runner [ internal:AsyncOverflowScrollingEnabled=true ] --> >+<!DOCTYPE html> <!-- webkit-test-runner [ internal:AsyncOverflowScrollingEnabled=true internal:LegacyOverflowScrollingTouchEnabled=false ] --> > <html> > <head> > <meta name="viewport" content="width=device-width, initial-scale=1">
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
koivisto
:
review+
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 197738
: 369490