Title: [274245] branches/safari-611.1.21.0-branch/Source/WebKit

Diff

Modified: branches/safari-611.1.21.0-branch/Source/WebKit/ChangeLog (274244 => 274245)


--- branches/safari-611.1.21.0-branch/Source/WebKit/ChangeLog	2021-03-10 23:33:49 UTC (rev 274244)
+++ branches/safari-611.1.21.0-branch/Source/WebKit/ChangeLog	2021-03-10 23:38:53 UTC (rev 274245)
@@ -1,5 +1,9 @@
 2021-03-10  Ruben Turcios  <[email protected]>
 
+        Revert r271193. rdar://problem/75273221
+
+2021-03-10  Ruben Turcios  <[email protected]>
+
         Cherry-pick r274231. rdar://problem/75279800
 
     [iOS] Add additional telemetry to WebContent sandbox 

Modified: branches/safari-611.1.21.0-branch/Source/WebKit/UIProcess/PageClient.h (274244 => 274245)


--- branches/safari-611.1.21.0-branch/Source/WebKit/UIProcess/PageClient.h	2021-03-10 23:33:49 UTC (rev 274244)
+++ branches/safari-611.1.21.0-branch/Source/WebKit/UIProcess/PageClient.h	2021-03-10 23:38:53 UTC (rev 274245)
@@ -339,7 +339,7 @@
     virtual void doneWithTouchEvent(const NativeWebTouchEvent&, bool wasEventHandled) = 0;
 #endif
 #if ENABLE(IOS_TOUCH_EVENTS)
-    virtual void doneDeferringTouchStart(bool preventNativeGestures) = 0;
+    virtual void doneDeferringNativeGestures(bool preventNativeGestures) = 0;
 #endif
 
     virtual RefPtr<WebPopupMenuProxy> createPopupMenuProxy(WebPageProxy&) = 0;

Modified: branches/safari-611.1.21.0-branch/Source/WebKit/UIProcess/WebPageProxy.cpp (274244 => 274245)


--- branches/safari-611.1.21.0-branch/Source/WebKit/UIProcess/WebPageProxy.cpp	2021-03-10 23:33:49 UTC (rev 274244)
+++ branches/safari-611.1.21.0-branch/Source/WebKit/UIProcess/WebPageProxy.cpp	2021-03-10 23:38:53 UTC (rev 274245)
@@ -2914,7 +2914,7 @@
     TrackingType touchEventsTrackingType = touchEventTrackingType(event);
     if (touchEventsTrackingType == TrackingType::NotTracking) {
         if (!isHandlingPreventableTouchStart())
-            pageClient().doneDeferringTouchStart(false);
+            pageClient().doneDeferringNativeGestures(false);
         return;
     }
 
@@ -2929,7 +2929,7 @@
         handleUnpreventableTouchEvent(event);
         didReceiveEvent(event.type(), false);
         if (!isHandlingPreventableTouchStart())
-            pageClient().doneDeferringTouchStart(false);
+            pageClient().doneDeferringNativeGestures(false);
         return;
     }
 
@@ -2936,10 +2936,9 @@
     if (event.type() == WebEvent::TouchStart) {
         ++m_handlingPreventableTouchStartCount;
         Function<void(bool, CallbackBase::Error)> completionHandler = [this, protectedThis = makeRef(*this), event](bool handled, CallbackBase::Error error) {
-            bool didFinishDeferringTouchStart = false;
-            ASSERT_IMPLIES(event.type() == WebEvent::TouchStart, m_handlingPreventableTouchStartCount);
-            if (event.type() == WebEvent::TouchStart && m_handlingPreventableTouchStartCount)
-                didFinishDeferringTouchStart = !--m_handlingPreventableTouchStartCount;
+            ASSERT(m_handlingPreventableTouchStartCount);
+            if (m_handlingPreventableTouchStartCount)
+                --m_handlingPreventableTouchStartCount;
 
             bool handledOrFailedWithError = handled || error != CallbackBase::Error::None || m_handledSynchronousTouchEventWhileDispatchingPreventableTouchStart;
             if (!isHandlingPreventableTouchStart())
@@ -2950,9 +2949,8 @@
 
             didReceiveEvent(event.type(), handledOrFailedWithError);
             pageClient().doneWithTouchEvent(event, handledOrFailedWithError);
-
-            if (didFinishDeferringTouchStart)
-                pageClient().doneDeferringTouchStart(handledOrFailedWithError);
+            if (!isHandlingPreventableTouchStart())
+                pageClient().doneDeferringNativeGestures(handledOrFailedWithError);
         };
 
         auto callbackID = m_callbacks.put(WTFMove(completionHandler), m_process->throttler().backgroundActivity("WebPageProxy::handlePreventableTouchEvent"_s));
@@ -2969,7 +2967,7 @@
     didReceiveEvent(event.type(), handled);
     pageClient().doneWithTouchEvent(event, handled);
     if (!isHandlingPreventableTouchStart())
-        pageClient().doneDeferringTouchStart(handled);
+        pageClient().doneDeferringNativeGestures(handled);
     else if (handled)
         m_handledSynchronousTouchEventWhileDispatchingPreventableTouchStart = true;
     m_process->stopResponsivenessTimer();

Modified: branches/safari-611.1.21.0-branch/Source/WebKit/UIProcess/ios/PageClientImplIOS.h (274244 => 274245)


--- branches/safari-611.1.21.0-branch/Source/WebKit/UIProcess/ios/PageClientImplIOS.h	2021-03-10 23:33:49 UTC (rev 274244)
+++ branches/safari-611.1.21.0-branch/Source/WebKit/UIProcess/ios/PageClientImplIOS.h	2021-03-10 23:38:53 UTC (rev 274245)
@@ -112,7 +112,7 @@
     void doneWithTouchEvent(const NativeWebTouchEvent&, bool wasEventHandled) override;
 #endif
 #if ENABLE(IOS_TOUCH_EVENTS)
-    void doneDeferringTouchStart(bool preventNativeGestures) override;
+    void doneDeferringNativeGestures(bool preventNativeGestures) override;
 #endif
     RefPtr<WebPopupMenuProxy> createPopupMenuProxy(WebPageProxy&) override;
     Ref<WebCore::ValidationBubble> createValidationBubble(const String& message, const WebCore::ValidationBubble::Settings&) final;

Modified: branches/safari-611.1.21.0-branch/Source/WebKit/UIProcess/ios/PageClientImplIOS.mm (274244 => 274245)


--- branches/safari-611.1.21.0-branch/Source/WebKit/UIProcess/ios/PageClientImplIOS.mm	2021-03-10 23:33:49 UTC (rev 274244)
+++ branches/safari-611.1.21.0-branch/Source/WebKit/UIProcess/ios/PageClientImplIOS.mm	2021-03-10 23:38:53 UTC (rev 274245)
@@ -447,9 +447,9 @@
 
 #if ENABLE(IOS_TOUCH_EVENTS)
 
-void PageClientImpl::doneDeferringTouchStart(bool preventNativeGestures)
+void PageClientImpl::doneDeferringNativeGestures(bool preventNativeGestures)
 {
-    [m_contentView _doneDeferringTouchStart:preventNativeGestures];
+    [m_contentView _doneDeferringNativeGestures:preventNativeGestures];
 }
 
 #endif // ENABLE(IOS_TOUCH_EVENTS)

Modified: branches/safari-611.1.21.0-branch/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h (274244 => 274245)


--- branches/safari-611.1.21.0-branch/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h	2021-03-10 23:33:49 UTC (rev 274244)
+++ branches/safari-611.1.21.0-branch/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h	2021-03-10 23:38:53 UTC (rev 274245)
@@ -242,9 +242,9 @@
 
 @interface WKContentView () {
 #if ENABLE(IOS_TOUCH_EVENTS)
-    RetainPtr<WKDeferringGestureRecognizer> _touchStartDeferringGestureRecognizerForImmediatelyResettableGestures;
-    RetainPtr<WKDeferringGestureRecognizer> _touchStartDeferringGestureRecognizerForDelayedResettableGestures;
-    RetainPtr<WKDeferringGestureRecognizer> _touchStartDeferringGestureRecognizerForSyntheticTapGestures;
+    RetainPtr<WKDeferringGestureRecognizer> _deferringGestureRecognizerForImmediatelyResettableGestures;
+    RetainPtr<WKDeferringGestureRecognizer> _deferringGestureRecognizerForDelayedResettableGestures;
+    RetainPtr<WKDeferringGestureRecognizer> _deferringGestureRecognizerForSyntheticTapGestures;
 #endif
     RetainPtr<UIWebTouchEventsGestureRecognizer> _touchEventGestureRecognizer;
 
@@ -539,7 +539,7 @@
 - (void)_webTouchEvent:(const WebKit::NativeWebTouchEvent&)touchEvent preventsNativeGestures:(BOOL)preventsDefault;
 #endif
 #if ENABLE(IOS_TOUCH_EVENTS)
-- (void)_doneDeferringTouchStart:(BOOL)preventNativeGestures;
+- (void)_doneDeferringNativeGestures:(BOOL)preventNativeGestures;
 #endif
 - (void)_commitPotentialTapFailed;
 - (void)_didNotHandleTapAsClick:(const WebCore::IntPoint&)point;

Modified: branches/safari-611.1.21.0-branch/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm (274244 => 274245)


--- branches/safari-611.1.21.0-branch/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm	2021-03-10 23:33:49 UTC (rev 274244)
+++ branches/safari-611.1.21.0-branch/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm	2021-03-10 23:38:53 UTC (rev 274245)
@@ -764,20 +764,20 @@
     [self addGestureRecognizer:_touchActionDownSwipeGestureRecognizer.get()];
 
 #if ENABLE(IOS_TOUCH_EVENTS)
-    _touchStartDeferringGestureRecognizerForImmediatelyResettableGestures = adoptNS([[WKDeferringGestureRecognizer alloc] initWithDeferringGestureDelegate:self]);
-    [_touchStartDeferringGestureRecognizerForImmediatelyResettableGestures setName:@"Touch start deferrer (immediate reset)"];
+    _deferringGestureRecognizerForImmediatelyResettableGestures = adoptNS([[WKDeferringGestureRecognizer alloc] initWithDeferringGestureDelegate:self]);
+    [_deferringGestureRecognizerForImmediatelyResettableGestures setName:@"Touch event deferrer (immediate reset)"];
 
-    _touchStartDeferringGestureRecognizerForDelayedResettableGestures = adoptNS([[WKDeferringGestureRecognizer alloc] initWithDeferringGestureDelegate:self]);
-    [_touchStartDeferringGestureRecognizerForDelayedResettableGestures setName:@"Touch start deferrer (delayed reset)"];
+    _deferringGestureRecognizerForDelayedResettableGestures = adoptNS([[WKDeferringGestureRecognizer alloc] initWithDeferringGestureDelegate:self]);
+    [_deferringGestureRecognizerForDelayedResettableGestures setName:@"Touch event deferrer (delayed reset)"];
 
-    _touchStartDeferringGestureRecognizerForSyntheticTapGestures = adoptNS([[WKDeferringGestureRecognizer alloc] initWithDeferringGestureDelegate:self]);
-    [_touchStartDeferringGestureRecognizerForSyntheticTapGestures setName:@"Touch start deferrer (synthetic tap)"];
+    _deferringGestureRecognizerForSyntheticTapGestures = adoptNS([[WKDeferringGestureRecognizer alloc] initWithDeferringGestureDelegate:self]);
+    [_deferringGestureRecognizerForSyntheticTapGestures setName:@"Touch event deferrer (synthetic tap)"];
 
-    for (WKDeferringGestureRecognizer *gesture in self._touchStartDeferringGestures) {
+    for (WKDeferringGestureRecognizer *gesture in self._deferringGestureRecognizers) {
         gesture.delegate = self;
         [self addGestureRecognizer:gesture];
     }
-#endif // ENABLE(IOS_TOUCH_EVENTS)
+#endif
 
     _touchEventGestureRecognizer = adoptNS([[UIWebTouchEventsGestureRecognizer alloc] initWithTarget:self action:@selector(_webTouchEventsRecognized:) touchDelegate:self]);
     [_touchEventGestureRecognizer setDelegate:self];
@@ -953,7 +953,7 @@
     [self removeGestureRecognizer:_touchEventGestureRecognizer.get()];
 
 #if ENABLE(IOS_TOUCH_EVENTS)
-    for (WKDeferringGestureRecognizer *gesture in self._touchStartDeferringGestures) {
+    for (WKDeferringGestureRecognizer *gesture in self._deferringGestureRecognizers) {
         gesture.delegate = nil;
         [self removeGestureRecognizer:gesture];
     }
@@ -1084,7 +1084,7 @@
 - (void)_removeDefaultGestureRecognizers
 {
 #if ENABLE(IOS_TOUCH_EVENTS)
-    for (WKDeferringGestureRecognizer *gesture in self._touchStartDeferringGestures)
+    for (WKDeferringGestureRecognizer *gesture in self._deferringGestureRecognizers)
         [self removeGestureRecognizer:gesture];
 #endif
     [self removeGestureRecognizer:_touchEventGestureRecognizer.get()];
@@ -1111,7 +1111,7 @@
 - (void)_addDefaultGestureRecognizers
 {
 #if ENABLE(IOS_TOUCH_EVENTS)
-    for (WKDeferringGestureRecognizer *gesture in self._touchStartDeferringGestures)
+    for (WKDeferringGestureRecognizer *gesture in self._deferringGestureRecognizers)
         [self addGestureRecognizer:gesture];
 #endif
     [self addGestureRecognizer:_touchEventGestureRecognizer.get()];
@@ -1548,17 +1548,8 @@
 
         if (nativeWebTouchEvent.isPotentialTap() && self.hasHiddenContentEditable && self._hasFocusedElement && !self.window.keyWindow)
             [self.window makeKeyWindow];
-
-#if ENABLE(IOS_TOUCH_EVENTS)
-        if (!_page->isHandlingPreventableTouchStart()) {
-            for (WKDeferringGestureRecognizer *gesture in self._touchStartDeferringGestures) {
-                if (gesture.state == UIGestureRecognizerStatePossible)
-                    gesture.state = UIGestureRecognizerStateFailed;
-            }
-        }
-#endif // ENABLE(IOS_TOUCH_EVENTS)
     }
-#endif // ENABLE(TOUCH_EVENTS)
+#endif
 }
 
 #if ENABLE(TOUCH_EVENTS)
@@ -1736,7 +1727,7 @@
 
 #if ENABLE(IOS_TOUCH_EVENTS)
 
-- (NSArray<WKDeferringGestureRecognizer *> *)_touchStartDeferringGestures
+- (NSArray<WKDeferringGestureRecognizer *> *)_deferringGestureRecognizers
 {
     WKDeferringGestureRecognizer *recognizers[3];
     NSUInteger count = 0;
@@ -1744,15 +1735,15 @@
         if (recognizer)
             recognizers[count++] = recognizer.get();
     };
-    add(_touchStartDeferringGestureRecognizerForImmediatelyResettableGestures);
-    add(_touchStartDeferringGestureRecognizerForDelayedResettableGestures);
-    add(_touchStartDeferringGestureRecognizerForSyntheticTapGestures);
+    add(_deferringGestureRecognizerForImmediatelyResettableGestures);
+    add(_deferringGestureRecognizerForDelayedResettableGestures);
+    add(_deferringGestureRecognizerForSyntheticTapGestures);
     return [NSArray arrayWithObjects:recognizers count:count];
 }
 
-- (void)_doneDeferringTouchStart:(BOOL)preventNativeGestures
+- (void)_doneDeferringNativeGestures:(BOOL)preventNativeGestures
 {
-    for (WKDeferringGestureRecognizer *gesture in self._touchStartDeferringGestures)
+    for (WKDeferringGestureRecognizer *gesture in self._deferringGestureRecognizers)
         [gesture setDefaultPrevented:preventNativeGestures];
 }
 
@@ -2153,7 +2144,7 @@
 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer*)otherGestureRecognizer
 {
 #if ENABLE(IOS_TOUCH_EVENTS)
-    for (WKDeferringGestureRecognizer *gesture in self._touchStartDeferringGestures) {
+    for (WKDeferringGestureRecognizer *gesture in self._deferringGestureRecognizers) {
         if (isSamePair(gestureRecognizer, otherGestureRecognizer, _touchEventGestureRecognizer.get(), gesture))
             return YES;
     }
@@ -7288,6 +7279,11 @@
     return ![self gestureRecognizer:deferringGestureRecognizer isInterruptingMomentumScrollingWithEvent:event];
 }
 
+- (BOOL)deferringGestureRecognizer:(WKDeferringGestureRecognizer *)deferringGestureRecognizer shouldDeferGesturesAfterEndingTouchesWithEvent:(UIEvent *)event
+{
+    return _page->isHandlingPreventableTouchStart();
+}
+
 - (BOOL)deferringGestureRecognizer:(WKDeferringGestureRecognizer *)deferringGestureRecognizer shouldDeferOtherGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
 {
 #if ENABLE(IOS_TOUCH_EVENTS)
@@ -7339,13 +7335,13 @@
         return NO;
     };
 
-    if ([gestureRecognizer isKindOfClass:WKSyntheticTapGestureRecognizer.class])
-        return deferringGestureRecognizer == _touchStartDeferringGestureRecognizerForSyntheticTapGestures;
+    if (gestureRecognizer == _doubleTapGestureRecognizer || gestureRecognizer == _singleTapGestureRecognizer)
+        return deferringGestureRecognizer == _deferringGestureRecognizerForSyntheticTapGestures;
 
     if (mayDelayResetOfContainingSubgraph(gestureRecognizer))
-        return deferringGestureRecognizer == _touchStartDeferringGestureRecognizerForDelayedResettableGestures;
+        return deferringGestureRecognizer == _deferringGestureRecognizerForDelayedResettableGestures;
 
-    return deferringGestureRecognizer == _touchStartDeferringGestureRecognizerForImmediatelyResettableGestures;
+    return deferringGestureRecognizer == _deferringGestureRecognizerForImmediatelyResettableGestures;
 #else
     UNUSED_PARAM(deferringGestureRecognizer);
     UNUSED_PARAM(gestureRecognizer);

Modified: branches/safari-611.1.21.0-branch/Source/WebKit/UIProcess/ios/WKDeferringGestureRecognizer.h (274244 => 274245)


--- branches/safari-611.1.21.0-branch/Source/WebKit/UIProcess/ios/WKDeferringGestureRecognizer.h	2021-03-10 23:33:49 UTC (rev 274244)
+++ branches/safari-611.1.21.0-branch/Source/WebKit/UIProcess/ios/WKDeferringGestureRecognizer.h	2021-03-10 23:38:53 UTC (rev 274245)
@@ -30,6 +30,7 @@
 @class WKDeferringGestureRecognizer;
 
 @protocol WKDeferringGestureRecognizerDelegate
+- (BOOL)deferringGestureRecognizer:(WKDeferringGestureRecognizer *)deferringGestureRecognizer shouldDeferGesturesAfterEndingTouchesWithEvent:(UIEvent *)event;
 - (BOOL)deferringGestureRecognizer:(WKDeferringGestureRecognizer *)deferringGestureRecognizer shouldDeferGesturesAfterBeginningTouchesWithEvent:(UIEvent *)event;
 - (BOOL)deferringGestureRecognizer:(WKDeferringGestureRecognizer *)deferringGestureRecognizer shouldDeferOtherGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer;
 @end

Modified: branches/safari-611.1.21.0-branch/Source/WebKit/UIProcess/ios/WKDeferringGestureRecognizer.mm (274244 => 274245)


--- branches/safari-611.1.21.0-branch/Source/WebKit/UIProcess/ios/WKDeferringGestureRecognizer.mm	2021-03-10 23:33:49 UTC (rev 274244)
+++ branches/safari-611.1.21.0-branch/Source/WebKit/UIProcess/ios/WKDeferringGestureRecognizer.mm	2021-03-10 23:38:53 UTC (rev 274245)
@@ -55,6 +55,19 @@
     self.state = UIGestureRecognizerStateFailed;
 }
 
+- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
+{
+    [super touchesEnded:touches withEvent:event];
+
+    if (self.state != UIGestureRecognizerStatePossible)
+        return;
+
+    if ([_deferringGestureDelegate deferringGestureRecognizer:self shouldDeferGesturesAfterEndingTouchesWithEvent:event])
+        return;
+
+    self.state = UIGestureRecognizerStateFailed;
+}
+
 - (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
 {
     [super touchesCancelled:touches withEvent:event];
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to