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];