Changeset 247820 in webkit
- Timestamp:
- Jul 25, 2019 8:35:17 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r247817 r247820 1 2019-07-25 Truitt Savell <tsavell@apple.com> 2 3 Unreviewed, rolling out r247817. 4 5 Broke 14 http/tests/paymentrequest/ tests. on iOS 6 7 Reverted changeset: 8 9 "Unable to tap/double tap to open files/folders in Google 10 Drive in Safari" 11 https://bugs.webkit.org/show_bug.cgi?id=200096 12 https://trac.webkit.org/changeset/247817 13 1 14 2019-07-24 Zalan Bujtas <zalan@apple.com> 2 15 -
trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click3-expected.txt
r247817 r247820 1 1 PASS if 'double click' text is NOT shown below. 2 [click] 2 [click][click] -
trunk/Source/WebKit/ChangeLog
r247817 r247820 1 2019-07-25 Truitt Savell <tsavell@apple.com> 2 3 Unreviewed, rolling out r247817. 4 5 Broke 14 http/tests/paymentrequest/ tests. on iOS 6 7 Reverted changeset: 8 9 "Unable to tap/double tap to open files/folders in Google 10 Drive in Safari" 11 https://bugs.webkit.org/show_bug.cgi?id=200096 12 https://trac.webkit.org/changeset/247817 13 1 14 2019-07-24 Zalan Bujtas <zalan@apple.com> 2 15 -
trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp
r247817 r247820 99 99 encoder << keyboardIsAttached; 100 100 encoder << canShowWhileLocked; 101 encoder << doubleTapForDoubleClickDelay; 102 encoder << doubleTapForDoubleClickRadius; 101 103 encoder << overrideViewportArguments; 102 104 #endif … … 291 293 if (!decoder.decode(parameters.canShowWhileLocked)) 292 294 return WTF::nullopt; 295 if (!decoder.decode(parameters.doubleTapForDoubleClickDelay)) 296 return WTF::nullopt; 297 if (!decoder.decode(parameters.doubleTapForDoubleClickRadius)) 298 return WTF::nullopt; 293 299 294 300 Optional<Optional<WebCore::ViewportArguments>> overrideViewportArguments; -
trunk/Source/WebKit/Shared/WebPageCreationParameters.h
r247817 r247820 159 159 bool keyboardIsAttached { false }; 160 160 bool canShowWhileLocked { false }; 161 Seconds doubleTapForDoubleClickDelay { 350_ms }; 162 float doubleTapForDoubleClickRadius { 45 }; 161 163 Optional<WebCore::ViewportArguments> overrideViewportArguments; 162 164 #endif -
trunk/Source/WebKit/UIProcess/PageClient.h
r247817 r247820 414 414 415 415 virtual void handleAutocorrectionContext(const WebAutocorrectionContext&) = 0; 416 417 virtual Seconds doubleTapForDoubleClickDelay() = 0; 418 virtual float doubleTapForDoubleClickRadius() = 0; 416 419 #endif 417 420 -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r247817 r247820 7205 7205 parameters.overrideViewportArguments = m_overrideViewportArguments; 7206 7206 parameters.canShowWhileLocked = m_configuration->canShowWhileLocked(); 7207 parameters.doubleTapForDoubleClickDelay = pageClient().doubleTapForDoubleClickDelay(); 7208 parameters.doubleTapForDoubleClickRadius = pageClient().doubleTapForDoubleClickRadius(); 7207 7209 #endif 7208 7210 -
trunk/Source/WebKit/UIProcess/WebPageProxy.h
r247817 r247820 1226 1226 void handleTap(const WebCore::FloatPoint&, OptionSet<WebKit::WebEvent::Modifier>, uint64_t layerTreeTransactionIdAtLastTouchStart); 1227 1227 void didRecognizeLongPress(); 1228 void handleDoubleTapForDoubleClickAtPoint(const WebCore::IntPoint&, OptionSet<WebEvent::Modifier>, uint64_t layerTreeTransactionIdAtLastTouchStart);1229 1228 1230 1229 void inspectorNodeSearchMovedToPosition(const WebCore::FloatPoint&); -
trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.h
r247817 r247820 244 244 void handleAutocorrectionContext(const WebAutocorrectionContext&) final; 245 245 246 Seconds doubleTapForDoubleClickDelay() final; 247 float doubleTapForDoubleClickRadius() final; 248 246 249 void didFinishProcessingAllPendingMouseEvents() final { } 247 250 -
trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.mm
r247817 r247820 843 843 #endif 844 844 845 Seconds PageClientImpl::doubleTapForDoubleClickDelay() 846 { 847 return Seconds { [m_contentView _doubleTapForDoubleClickDelay] }; 848 } 849 850 float PageClientImpl::doubleTapForDoubleClickRadius() 851 { 852 return [m_contentView _doubleTapForDoubleClickRadius]; 853 } 854 845 855 #if USE(QUICK_LOOK) 846 856 void PageClientImpl::requestPasswordForQuickLookDocument(const String& fileName, WTF::Function<void(const String&)>&& completionHandler) -
trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h
r247817 r247820 217 217 RetainPtr<WKSyntheticTapGestureRecognizer> _doubleTapGestureRecognizer; 218 218 RetainPtr<UITapGestureRecognizer> _nonBlockingDoubleTapGestureRecognizer; 219 RetainPtr<UITapGestureRecognizer> _doubleTapGestureRecognizerForDoubleClick;220 219 RetainPtr<UITapGestureRecognizer> _twoFingerDoubleTapGestureRecognizer; 221 220 RetainPtr<UITapGestureRecognizer> _twoFingerSingleTapGestureRecognizer; … … 482 481 - (void)_becomeFirstResponderWithSelectionMovingForward:(BOOL)selectingForward completionHandler:(void (^)(BOOL didBecomeFirstResponder))completionHandler; 483 482 - (void)_setDoubleTapGesturesEnabled:(BOOL)enabled; 483 - (double)_doubleTapForDoubleClickDelay; 484 - (float)_doubleTapForDoubleClickRadius; 484 485 #if ENABLE(DATA_DETECTION) 485 486 - (NSArray *)_dataDetectionResults; -
trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm
r247817 r247820 689 689 } 690 690 691 - (void)_ensureNonBlockingDoubleTapGestureRecognizer 692 { 693 if (_nonBlockingDoubleTapGestureRecognizer) 694 return; 695 _nonBlockingDoubleTapGestureRecognizer = adoptNS([[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_nonBlockingDoubleTapRecognized:)]); 696 [_nonBlockingDoubleTapGestureRecognizer setNumberOfTapsRequired:2]; 697 [_nonBlockingDoubleTapGestureRecognizer setDelegate:self]; 698 [_nonBlockingDoubleTapGestureRecognizer setEnabled:NO]; 699 } 700 691 701 - (void)setupInteraction 692 702 { … … 735 745 [self addGestureRecognizer:_singleTapGestureRecognizer.get()]; 736 746 737 _nonBlockingDoubleTapGestureRecognizer = adoptNS([[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_nonBlockingDoubleTapRecognized:)]); 738 [_nonBlockingDoubleTapGestureRecognizer setNumberOfTapsRequired:2]; 739 [_nonBlockingDoubleTapGestureRecognizer setDelegate:self]; 740 [_nonBlockingDoubleTapGestureRecognizer setEnabled:NO]; 747 [self _ensureNonBlockingDoubleTapGestureRecognizer]; 741 748 [self addGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()]; 742 743 _doubleTapGestureRecognizerForDoubleClick = adoptNS([[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_doubleTapRecognizedForDoubleClick:)]);744 [_doubleTapGestureRecognizerForDoubleClick setNumberOfTapsRequired:2];745 [_doubleTapGestureRecognizerForDoubleClick setDelegate:self];746 [self addGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()];747 749 748 750 [self _createAndConfigureDoubleTapGestureRecognizer]; … … 893 895 [self removeGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()]; 894 896 895 [_doubleTapGestureRecognizerForDoubleClick setDelegate:nil];896 [self removeGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()];897 898 897 [_twoFingerDoubleTapGestureRecognizer setDelegate:nil]; 899 898 [self removeGestureRecognizer:_twoFingerDoubleTapGestureRecognizer.get()]; … … 972 971 [self removeGestureRecognizer:_doubleTapGestureRecognizer.get()]; 973 972 [self removeGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()]; 974 [self removeGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()];975 973 [self removeGestureRecognizer:_twoFingerDoubleTapGestureRecognizer.get()]; 976 974 [self removeGestureRecognizer:_twoFingerSingleTapGestureRecognizer.get()]; … … 992 990 [self addGestureRecognizer:_doubleTapGestureRecognizer.get()]; 993 991 [self addGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()]; 994 [self addGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()];995 992 [self addGestureRecognizer:_twoFingerDoubleTapGestureRecognizer.get()]; 996 993 [self addGestureRecognizer:_twoFingerSingleTapGestureRecognizer.get()]; … … 1896 1893 return YES; 1897 1894 1898 if (isSamePair(gestureRecognizer, otherGestureRecognizer, _nonBlockingDoubleTapGestureRecognizer.get(), _doubleTapGestureRecognizerForDoubleClick.get()))1899 return YES;1900 1901 if (isSamePair(gestureRecognizer, otherGestureRecognizer, _doubleTapGestureRecognizer.get(), _doubleTapGestureRecognizerForDoubleClick.get()))1902 return YES;1903 1904 1895 return NO; 1905 1896 } … … 2094 2085 || gestureRecognizer == _doubleTapGestureRecognizer 2095 2086 || gestureRecognizer == _nonBlockingDoubleTapGestureRecognizer 2096 || gestureRecognizer == _doubleTapGestureRecognizerForDoubleClick2097 2087 || gestureRecognizer == _twoFingerDoubleTapGestureRecognizer) { 2098 2088 … … 2331 2321 break; 2332 2322 } 2333 }2334 2335 - (void)_doubleTapRecognizedForDoubleClick:(UITapGestureRecognizer *)gestureRecognizer2336 {2337 _page->handleDoubleTapForDoubleClickAtPoint(WebCore::IntPoint(gestureRecognizer.location), WebKit::webEventModifierFlags(gestureRecognizerModifierFlags(gestureRecognizer)), _layerTreeTransactionIdAtLastTouchStart);2338 2323 } 2339 2324 … … 3914 3899 - (void)_didStartProvisionalLoadForMainFrame 3915 3900 { 3916 // Reset the double tap gesture recognizer to prevent any double click that is in the process of being recognized. 3917 [_doubleTapGestureRecognizerForDoubleClick setEnabled:NO]; 3918 [_doubleTapGestureRecognizerForDoubleClick setEnabled:YES]; 3919 // We also need to disable the double-tap gesture recognizers that are enabled for double-tap-to-zoom and which 3901 // We need to disable the double-tap gesture recognizers that are enabled for double-tap-to-zoom and which 3920 3902 // are enabled when a single tap is first recognized. This avoids tests running in sequence and simulating taps 3921 3903 // in the same location to trigger double-tap recognition. … … 3985 3967 [_nonBlockingDoubleTapGestureRecognizer setEnabled:!enabled]; 3986 3968 [self _resetIsDoubleTapPending]; 3969 } 3970 3971 - (double)_doubleTapForDoubleClickDelay 3972 { 3973 static double doubleTapForDoubleClickDelay = 350; 3974 static dispatch_once_t onceToken; 3975 dispatch_once(&onceToken, ^{ 3976 [self _ensureNonBlockingDoubleTapGestureRecognizer]; 3977 doubleTapForDoubleClickDelay = [_nonBlockingDoubleTapGestureRecognizer maximumIntervalBetweenSuccessiveTaps]; 3978 }); 3979 return doubleTapForDoubleClickDelay; 3980 } 3981 3982 - (float)_doubleTapForDoubleClickRadius 3983 { 3984 static float doubleTapForDoubleClickRadius = 45; 3985 static dispatch_once_t onceToken; 3986 dispatch_once(&onceToken, ^{ 3987 [self _ensureNonBlockingDoubleTapGestureRecognizer]; 3988 doubleTapForDoubleClickRadius = [_nonBlockingDoubleTapGestureRecognizer allowableMovement]; 3989 }); 3990 return doubleTapForDoubleClickRadius; 3987 3991 } 3988 3992 -
trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm
r247817 r247820 839 839 } 840 840 841 void WebPageProxy::handleDoubleTapForDoubleClickAtPoint(const WebCore::IntPoint& point, OptionSet<WebEvent::Modifier> modifiers, uint64_t layerTreeTransactionIdAtLastTouchStart)842 {843 process().send(Messages::WebPage::HandleDoubleTapForDoubleClickAtPoint(point, modifiers, layerTreeTransactionIdAtLastTouchStart), m_pageID);844 }845 846 841 void WebPageProxy::inspectorNodeSearchMovedToPosition(const WebCore::FloatPoint& position) 847 842 { -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp
r247817 r247820 417 417 , m_keyboardIsAttached(parameters.keyboardIsAttached) 418 418 , m_canShowWhileLocked(parameters.canShowWhileLocked) 419 , m_doubleTapForDoubleClickDelay(parameters.doubleTapForDoubleClickDelay) 420 , m_doubleTapForDoubleClickRadius(parameters.doubleTapForDoubleClickRadius) 419 421 #endif 420 422 , m_layerVolatilityTimer(*this, &WebPage::layerVolatilityTimerFired) -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.h
r247817 r247820 636 636 void tapHighlightAtPosition(uint64_t requestID, const WebCore::FloatPoint&); 637 637 void didRecognizeLongPress(); 638 void handleDoubleTapForDoubleClickAtPoint(const WebCore::IntPoint&,OptionSet<WebKit::WebEvent::Modifier>, uint64_t lastLayerTreeTransactionId);638 bool handlePotentialDoubleTapForDoubleClickAtPoint(OptionSet<WebKit::WebEvent::Modifier>, uint64_t lastLayerTreeTransactionId); 639 639 640 640 void inspectorNodeSearchMovedToPosition(const WebCore::FloatPoint&); … … 1866 1866 bool m_canShowWhileLocked { false }; 1867 1867 bool m_inDynamicSizeUpdate { false }; 1868 Seconds m_doubleTapForDoubleClickDelay { 350_ms }; 1869 float m_doubleTapForDoubleClickRadius { 45 }; 1868 1870 HashMap<std::pair<WebCore::IntSize, double>, WebCore::IntPoint> m_dynamicSizeUpdateHistory; 1869 1871 RefPtr<WebCore::Node> m_pendingSyntheticClickNode; … … 1876 1878 double m_lastTransactionPageScaleFactor { 0 }; 1877 1879 uint64_t m_lastTransactionIDWithScaleChange { 0 }; 1880 Optional<MonotonicTime> m_lastCommittedTapTimestamp; 1881 Optional<WebCore::FloatPoint> m_lastCommittedTapLocation; 1878 1882 1879 1883 CompletionHandler<void(InteractionInformationAtPosition&&)> m_pendingSynchronousPositionInformationReply; -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in
r247817 r247820 58 58 TapHighlightAtPosition(uint64_t requestID, WebCore::FloatPoint point) 59 59 DidRecognizeLongPress() 60 HandleDoubleTapForDoubleClickAtPoint(WebCore::IntPoint point, OptionSet<WebKit::WebEvent::Modifier> modifiers, uint64_t lastLayerTreeTransactionId)61 60 InspectorNodeSearchMovedToPosition(WebCore::FloatPoint point) 62 61 InspectorNodeSearchEndedAtPosition(WebCore::FloatPoint point) -
trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
r247817 r247820 833 833 } 834 834 835 void WebPage::handleDoubleTapForDoubleClickAtPoint(const IntPoint& point, OptionSet<WebEvent::Modifier> modifiers, uint64_t lastLayerTreeTransactionId) 836 { 835 bool WebPage::handlePotentialDoubleTapForDoubleClickAtPoint(OptionSet<WebEvent::Modifier> modifiers, uint64_t lastLayerTreeTransactionId) 836 { 837 if (!m_lastCommittedTapTimestamp || !m_lastCommittedTapLocation) 838 return false; 839 840 auto millisecondsSinceLastTap = (MonotonicTime::now() - *m_lastCommittedTapTimestamp).milliseconds(); 841 if (millisecondsSinceLastTap > m_doubleTapForDoubleClickDelay.milliseconds()) 842 return false; 843 844 auto distanceBetweenTaps = sqrtf(pow(m_potentialTapLocation.x() - m_lastCommittedTapLocation->x(), 2) + pow(m_potentialTapLocation.y() - m_lastCommittedTapLocation->y(), 2)); 845 if (distanceBetweenTaps > m_doubleTapForDoubleClickRadius) 846 return false; 847 837 848 FloatPoint adjustedPoint; 838 auto* nodeRespondingToDoubleClick = m_page->mainFrame().nodeRespondingToDoubleClickEvent( point, adjustedPoint);849 auto* nodeRespondingToDoubleClick = m_page->mainFrame().nodeRespondingToDoubleClickEvent(m_potentialTapLocation, adjustedPoint); 839 850 if (!nodeRespondingToDoubleClick) 840 return ;851 return false; 841 852 842 853 auto* frameRespondingToDoubleClick = nodeRespondingToDoubleClick->document().frame(); 843 854 if (!frameRespondingToDoubleClick || lastLayerTreeTransactionId < WebFrame::fromCoreFrame(*frameRespondingToDoubleClick)->firstLayerTreeTransactionIDAfterDidCommitLoad()) 844 return ;855 return false; 845 856 846 857 bool shiftKey = modifiers.contains(WebEvent::Modifier::ShiftKey); … … 851 862 nodeRespondingToDoubleClick->document().frame()->eventHandler().handleMousePressEvent(PlatformMouseEvent(roundedAdjustedPoint, roundedAdjustedPoint, LeftButton, PlatformEvent::MousePressed, 2, shiftKey, ctrlKey, altKey, metaKey, WallTime::now(), 0, WebCore::NoTap)); 852 863 if (m_isClosed) 853 return ;864 return false; 854 865 nodeRespondingToDoubleClick->document().frame()->eventHandler().handleMouseReleaseEvent(PlatformMouseEvent(roundedAdjustedPoint, roundedAdjustedPoint, LeftButton, PlatformEvent::MouseReleased, 2, shiftKey, ctrlKey, altKey, metaKey, WallTime::now(), 0, WebCore::NoTap)); 866 return true; 855 867 } 856 868 … … 1073 1085 void WebPage::commitPotentialTap(OptionSet<WebEvent::Modifier> modifiers, uint64_t lastLayerTreeTransactionId, WebCore::PointerID pointerId) 1074 1086 { 1087 auto currentPotentialTapLocation = m_potentialTapLocation; 1088 auto updateLastCommittedLocationAndTimestamp = [&] { 1089 m_lastCommittedTapTimestamp = MonotonicTime::now(); 1090 m_lastCommittedTapLocation = currentPotentialTapLocation; 1091 }; 1092 1075 1093 auto invalidTargetForSingleClick = !m_potentialTapNode; 1076 1094 if (!invalidTargetForSingleClick) { … … 1081 1099 } 1082 1100 if (invalidTargetForSingleClick) { 1101 // When the node has no click eventlistener, but it may have a dblclick one. 1102 handlePotentialDoubleTapForDoubleClickAtPoint(modifiers, lastLayerTreeTransactionId); 1083 1103 commitPotentialTapFailed(); 1084 return ;1104 return updateLastCommittedLocationAndTimestamp(); 1085 1105 } 1086 1106 … … 1091 1111 if (!frameRespondingToClick || lastLayerTreeTransactionId < WebFrame::fromCoreFrame(*frameRespondingToClick)->firstLayerTreeTransactionIDAfterDidCommitLoad()) { 1092 1112 commitPotentialTapFailed(); 1093 return ;1113 return updateLastCommittedLocationAndTimestamp(); 1094 1114 } 1095 1115 … … 1102 1122 } else 1103 1123 #endif 1104 handleSyntheticClick(*nodeRespondingToClick, adjustedPoint, modifiers, pointerId); 1124 { 1125 if (handlePotentialDoubleTapForDoubleClickAtPoint(modifiers, lastLayerTreeTransactionId)) 1126 commitPotentialTapFailed(); 1127 else 1128 handleSyntheticClick(*nodeRespondingToClick, adjustedPoint, modifiers, pointerId); 1129 } 1105 1130 } else 1106 1131 commitPotentialTapFailed(); … … 1109 1134 m_potentialTapLocation = FloatPoint(); 1110 1135 m_potentialTapSecurityOrigin = nullptr; 1136 return updateLastCommittedLocationAndTimestamp(); 1111 1137 } 1112 1138
Note: See TracChangeset
for help on using the changeset viewer.