Changeset 246347 in webkit
- Timestamp:
- Jun 11, 2019 9:13:36 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r246340 r246347 1 2019-06-11 Zalan Bujtas <zalan@apple.com> 2 3 LayoutTests/fast/events/touch/ios/double-tap-for-double-click* test cases are failing 4 https://bugs.webkit.org/show_bug.cgi?id=198764 5 <rdar://problem/51035459> 6 7 Reviewed by Wenson Hsieh. 8 9 * fast/events/touch/ios/double-tap-for-double-click1.html: 10 * fast/events/touch/ios/double-tap-for-double-click2.html: 11 * fast/events/touch/ios/double-tap-for-double-click3.html: 12 1 13 2019-06-11 Commit Queue <commit-queue@webkit.org> 2 14 -
trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click1.html
r244775 r246347 4 4 <meta name="viewport" content="width=device-width initial-scale=1 user-scalable=no"> 5 5 <title>This tests that we fire dblclick event on double tap</title> 6 <script src="../../../../resources/ basic-gestures.js"></script>6 <script src="../../../../resources/ui-helper.js"></script> 7 7 <style> 8 8 #doubleTapthis { … … 20 20 testRunner.dumpAsText(); 21 21 22 await doubleTapAtPoint(doubleTapthis.offsetLeft, doubleTapthis.offsetTop);22 await UIHelper.humanSpeedDoubleTapAt(doubleTapthis.offsetLeft, doubleTapthis.offsetTop); 23 23 } 24 24 </script> -
trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click2.html
r244775 r246347 4 4 <meta name="viewport" content="width=device-width initial-scale=1 user-scalable=no"> 5 5 <title>This tests that we fire dblclick event on double tap when the content is replaced</title> 6 <script src="../../../../resources/ basic-gestures.js"></script>6 <script src="../../../../resources/ui-helper.js"></script> 7 7 <style> 8 8 #doubleTapThis { … … 30 30 let y = rect.top + rect.height / 2; 31 31 32 await doubleTapAtPoint(x, y);32 await UIHelper.humanSpeedDoubleTapAt(x, y); 33 33 } 34 34 </script> -
trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click3.html
r244775 r246347 4 4 <meta name="viewport" content="width=device-width initial-scale=1 user-scalable=no"> 5 5 <title>This tests that we do not fire dblclick event on double tap on node with touch-action: none</title> 6 <script src="../../../../resources/ basic-gestures.js"></script>6 <script src="../../../../resources/ui-helper.js"></script> 7 7 <style> 8 8 #doubleTapthis { … … 13 13 } 14 14 #finishTest { 15 width: 10px;16 height: 10px;15 width: 200px; 16 height: 200px; 17 17 border: 1px solid green; 18 18 } … … 26 26 testRunner.dumpAsText(); 27 27 28 await doubleTapAtPoint(doubleTapthis.offsetLeft, doubleTapthis.offsetTop);28 await UIHelper.humanSpeedDoubleTapAt(doubleTapthis.offsetLeft, doubleTapthis.offsetTop); 29 29 30 await doubleTapAtPoint(finishTest.offsetLeft, finishTest.offsetTop);30 await UIHelper.humanSpeedDoubleTapAt(finishTest.offsetLeft + 100, finishTest.offsetTop + 100); 31 31 } 32 32 </script> -
trunk/Source/WebKit/ChangeLog
r246345 r246347 1 2019-06-11 Zalan Bujtas <zalan@apple.com> 2 3 LayoutTests/fast/events/touch/ios/double-tap-for-double-click* test cases are failing 4 https://bugs.webkit.org/show_bug.cgi?id=198764 5 <rdar://problem/51035459> 6 7 Reviewed by Wenson Hsieh. 8 9 This patch replaces the existing, _doubleTapGestureRecognizerForDoubleClick based double click handling with a WebProcess based implementation using 10 the potentialTapAtPosition/commitPotentialTap infrastructure. 11 12 * Shared/WebPageCreationParameters.cpp: 13 (WebKit::WebPageCreationParameters::encode const): 14 (WebKit::WebPageCreationParameters::decode): 15 * Shared/WebPageCreationParameters.h: 16 * UIProcess/PageClient.h: 17 * UIProcess/WebPageProxy.cpp: 18 (WebKit::WebPageProxy::creationParameters): 19 * UIProcess/WebPageProxy.h: 20 * UIProcess/ios/PageClientImplIOS.h: 21 * UIProcess/ios/PageClientImplIOS.mm: 22 (WebKit::PageClientImpl::doubleTapForDoubleClickDelay): 23 (WebKit::PageClientImpl::doubleTapForDoubleClickRadius): 24 * UIProcess/ios/WKContentViewInteraction.h: 25 * UIProcess/ios/WKContentViewInteraction.mm: 26 (-[WKContentView _ensureNonBlockingDoubleTapGestureRecognizer]): 27 (-[WKContentView setupInteraction]): 28 (-[WKContentView cleanupInteraction]): 29 (-[WKContentView _removeDefaultGestureRecognizers]): 30 (-[WKContentView _addDefaultGestureRecognizers]): 31 (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]): 32 (-[WKContentView gestureRecognizerShouldBegin:]): 33 (-[WKContentView _didStartProvisionalLoadForMainFrame]): 34 (-[WKContentView _doubleTapForDoubleClickDelay]): 35 (-[WKContentView _doubleTapForDoubleClickRadius]): 36 (-[WKContentView _doubleTapRecognizedForDoubleClick:]): Deleted. 37 * UIProcess/ios/WebPageProxyIOS.mm: 38 (WebKit::WebPageProxy::handleDoubleTapForDoubleClickAtPoint): Deleted. 39 * WebProcess/WebPage/WebPage.cpp: 40 * WebProcess/WebPage/WebPage.h: 41 * WebProcess/WebPage/WebPage.messages.in: 42 * WebProcess/WebPage/ios/WebPageIOS.mm: 43 (WebKit::WebPage::handlePotentialDoubleTapForDoubleClickAtPoint): 44 (WebKit::WebPage::commitPotentialTap): 45 (WebKit::WebPage::handleDoubleTapForDoubleClickAtPoint): Deleted. 46 1 47 2019-06-11 Andy Estes <aestes@apple.com> 2 48 -
trunk/Source/WebKit/Platform/spi/ios/UIKitSPI.h
r246331 r246347 375 375 @property (nonatomic) CGFloat allowableMovement; 376 376 @property (nonatomic, readonly) CGPoint centroid; 377 @property (nonatomic) CFTimeInterval maximumIntervalBetweenSuccessiveTaps; 377 378 @end 378 379 -
trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp
r246136 r246347 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
r246136 r246347 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
r245807 r246347 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
r246188 r246347 7174 7174 parameters.overrideViewportArguments = m_overrideViewportArguments; 7175 7175 parameters.canShowWhileLocked = m_configuration->canShowWhileLocked(); 7176 parameters.doubleTapForDoubleClickDelay = pageClient().doubleTapForDoubleClickDelay(); 7177 parameters.doubleTapForDoubleClickRadius = pageClient().doubleTapForDoubleClickRadius(); 7176 7178 #endif 7177 7179 -
trunk/Source/WebKit/UIProcess/WebPageProxy.h
r246236 r246347 1228 1228 void handleTap(const WebCore::FloatPoint&, OptionSet<WebKit::WebEvent::Modifier>, uint64_t layerTreeTransactionIdAtLastTouchStart); 1229 1229 void didRecognizeLongPress(); 1230 void handleDoubleTapForDoubleClickAtPoint(const WebCore::IntPoint&, OptionSet<WebEvent::Modifier>, uint64_t layerTreeTransactionIdAtLastTouchStart);1231 1230 1232 1231 void inspectorNodeSearchMovedToPosition(const WebCore::FloatPoint&); -
trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.h
r246270 r246347 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
r246270 r246347 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
r246229 r246347 214 214 RetainPtr<WKSyntheticTapGestureRecognizer> _doubleTapGestureRecognizer; 215 215 RetainPtr<UITapGestureRecognizer> _nonBlockingDoubleTapGestureRecognizer; 216 RetainPtr<UITapGestureRecognizer> _doubleTapGestureRecognizerForDoubleClick;217 216 RetainPtr<UITapGestureRecognizer> _twoFingerDoubleTapGestureRecognizer; 218 217 RetainPtr<UITapGestureRecognizer> _twoFingerSingleTapGestureRecognizer; … … 458 457 - (void)_becomeFirstResponderWithSelectionMovingForward:(BOOL)selectingForward completionHandler:(void (^)(BOOL didBecomeFirstResponder))completionHandler; 459 458 - (void)_setDoubleTapGesturesEnabled:(BOOL)enabled; 459 - (double)_doubleTapForDoubleClickDelay; 460 - (float)_doubleTapForDoubleClickRadius; 460 461 #if ENABLE(DATA_DETECTION) 461 462 - (NSArray *)_dataDetectionResults; -
trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm
r246342 r246347 694 694 } 695 695 696 - (void)_ensureNonBlockingDoubleTapGestureRecognizer 697 { 698 if (_nonBlockingDoubleTapGestureRecognizer) 699 return; 700 _nonBlockingDoubleTapGestureRecognizer = adoptNS([[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_nonBlockingDoubleTapRecognized:)]); 701 [_nonBlockingDoubleTapGestureRecognizer setNumberOfTapsRequired:2]; 702 [_nonBlockingDoubleTapGestureRecognizer setDelegate:self]; 703 [_nonBlockingDoubleTapGestureRecognizer setEnabled:NO]; 704 } 705 696 706 - (void)setupInteraction 697 707 { … … 740 750 [self addGestureRecognizer:_singleTapGestureRecognizer.get()]; 741 751 742 _nonBlockingDoubleTapGestureRecognizer = adoptNS([[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_nonBlockingDoubleTapRecognized:)]); 743 [_nonBlockingDoubleTapGestureRecognizer setNumberOfTapsRequired:2]; 744 [_nonBlockingDoubleTapGestureRecognizer setDelegate:self]; 745 [_nonBlockingDoubleTapGestureRecognizer setEnabled:NO]; 752 [self _ensureNonBlockingDoubleTapGestureRecognizer]; 746 753 [self addGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()]; 747 748 _doubleTapGestureRecognizerForDoubleClick = adoptNS([[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_doubleTapRecognizedForDoubleClick:)]);749 [_doubleTapGestureRecognizerForDoubleClick setNumberOfTapsRequired:2];750 [_doubleTapGestureRecognizerForDoubleClick setDelegate:self];751 [self addGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()];752 754 753 755 [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()]; … … 968 967 [self removeGestureRecognizer:_doubleTapGestureRecognizer.get()]; 969 968 [self removeGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()]; 970 [self removeGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()];971 969 [self removeGestureRecognizer:_twoFingerDoubleTapGestureRecognizer.get()]; 972 970 [self removeGestureRecognizer:_twoFingerSingleTapGestureRecognizer.get()]; … … 985 983 [self addGestureRecognizer:_doubleTapGestureRecognizer.get()]; 986 984 [self addGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()]; 987 [self addGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()];988 985 [self addGestureRecognizer:_twoFingerDoubleTapGestureRecognizer.get()]; 989 986 [self addGestureRecognizer:_twoFingerSingleTapGestureRecognizer.get()]; … … 1835 1832 return YES; 1836 1833 1837 if (isSamePair(gestureRecognizer, otherGestureRecognizer, _singleTapGestureRecognizer.get(), _doubleTapGestureRecognizerForDoubleClick.get()))1838 return YES;1839 1840 if (isSamePair(gestureRecognizer, otherGestureRecognizer, _nonBlockingDoubleTapGestureRecognizer.get(), _doubleTapGestureRecognizerForDoubleClick.get()))1841 return YES;1842 1843 if (isSamePair(gestureRecognizer, otherGestureRecognizer, _doubleTapGestureRecognizer.get(), _doubleTapGestureRecognizerForDoubleClick.get()))1844 return YES;1845 1846 1834 if (isSamePair(gestureRecognizer, otherGestureRecognizer, _highlightLongPressGestureRecognizer.get(), _previewSecondaryGestureRecognizer.get())) 1847 1835 return YES; … … 2040 2028 || gestureRecognizer == _doubleTapGestureRecognizer 2041 2029 || gestureRecognizer == _nonBlockingDoubleTapGestureRecognizer 2042 || gestureRecognizer == _doubleTapGestureRecognizerForDoubleClick2043 2030 || gestureRecognizer == _twoFingerDoubleTapGestureRecognizer) { 2044 2031 … … 2444 2431 _lastInteractionLocation = gestureRecognizer.location; 2445 2432 _isDoubleTapPending = YES; 2446 }2447 2448 - (void)_doubleTapRecognizedForDoubleClick:(UITapGestureRecognizer *)gestureRecognizer2449 {2450 _page->handleDoubleTapForDoubleClickAtPoint(WebCore::IntPoint(gestureRecognizer.location), WebKit::webEventModifierFlags(gestureRecognizerModifierFlags(gestureRecognizer)), _layerTreeTransactionIdAtLastTouchStart);2451 2433 } 2452 2434 … … 3826 3808 - (void)_didStartProvisionalLoadForMainFrame 3827 3809 { 3828 // Reset the double tap gesture recognizer to prevent any double click that is in the process of being recognized. 3829 [_doubleTapGestureRecognizerForDoubleClick setEnabled:NO]; 3830 [_doubleTapGestureRecognizerForDoubleClick setEnabled:YES]; 3831 // We also need to disable the double-tap gesture recognizers that are enabled for double-tap-to-zoom and which 3810 // We need to disable the double-tap gesture recognizers that are enabled for double-tap-to-zoom and which 3832 3811 // are enabled when a single tap is first recognized. This avoids tests running in sequence and simulating taps 3833 3812 // in the same location to trigger double-tap recognition. … … 3887 3866 [_nonBlockingDoubleTapGestureRecognizer setEnabled:!enabled]; 3888 3867 [self _resetIsDoubleTapPending]; 3868 } 3869 3870 - (double)_doubleTapForDoubleClickDelay 3871 { 3872 static double doubleTapForDoubleClickDelay = 350; 3873 static dispatch_once_t onceToken; 3874 dispatch_once(&onceToken, ^{ 3875 [self _ensureNonBlockingDoubleTapGestureRecognizer]; 3876 doubleTapForDoubleClickDelay = [_nonBlockingDoubleTapGestureRecognizer maximumIntervalBetweenSuccessiveTaps]; 3877 }); 3878 return doubleTapForDoubleClickDelay; 3879 } 3880 3881 - (float)_doubleTapForDoubleClickRadius 3882 { 3883 static float doubleTapForDoubleClickRadius = 45; 3884 static dispatch_once_t onceToken; 3885 dispatch_once(&onceToken, ^{ 3886 [self _ensureNonBlockingDoubleTapGestureRecognizer]; 3887 doubleTapForDoubleClickRadius = [_nonBlockingDoubleTapGestureRecognizer allowableMovement]; 3888 }); 3889 return doubleTapForDoubleClickRadius; 3889 3890 } 3890 3891 -
trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm
r246236 r246347 846 846 } 847 847 848 void WebPageProxy::handleDoubleTapForDoubleClickAtPoint(const WebCore::IntPoint& point, OptionSet<WebEvent::Modifier> modifiers, uint64_t layerTreeTransactionIdAtLastTouchStart)849 {850 process().send(Messages::WebPage::HandleDoubleTapForDoubleClickAtPoint(point, modifiers, layerTreeTransactionIdAtLastTouchStart), m_pageID);851 }852 853 848 void WebPageProxy::inspectorNodeSearchMovedToPosition(const WebCore::FloatPoint& position) 854 849 { -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp
r246276 r246347 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
r246308 r246347 635 635 void tapHighlightAtPosition(uint64_t requestID, const WebCore::FloatPoint&); 636 636 void didRecognizeLongPress(); 637 void handleDoubleTapForDoubleClickAtPoint(const WebCore::IntPoint&,OptionSet<WebKit::WebEvent::Modifier>, uint64_t lastLayerTreeTransactionId);637 bool handlePotentialDoubleTapForDoubleClickAtPoint(OptionSet<WebKit::WebEvent::Modifier>, uint64_t lastLayerTreeTransactionId); 638 638 639 639 void inspectorNodeSearchMovedToPosition(const WebCore::FloatPoint&); … … 1849 1849 bool m_canShowWhileLocked { false }; 1850 1850 bool m_inDynamicSizeUpdate { false }; 1851 Seconds m_doubleTapForDoubleClickDelay { 350_ms }; 1852 float m_doubleTapForDoubleClickRadius { 45 }; 1851 1853 HashMap<std::pair<WebCore::IntSize, double>, WebCore::IntPoint> m_dynamicSizeUpdateHistory; 1852 1854 RefPtr<WebCore::Node> m_pendingSyntheticClickNode; … … 1859 1861 double m_lastTransactionPageScaleFactor { 0 }; 1860 1862 uint64_t m_lastTransactionIDWithScaleChange { 0 }; 1863 Optional<MonotonicTime> m_lastCommittedTapTimestamp; 1864 Optional<WebCore::FloatPoint> m_lastCommittedTapLocation; 1861 1865 1862 1866 CompletionHandler<void(InteractionInformationAtPosition&&)> m_pendingSynchronousPositionInformationReply; -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in
r245998 r246347 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
r246311 r246347 801 801 } 802 802 803 void WebPage::handleDoubleTapForDoubleClickAtPoint(const IntPoint& point, OptionSet<WebEvent::Modifier> modifiers, uint64_t lastLayerTreeTransactionId) 804 { 803 bool WebPage::handlePotentialDoubleTapForDoubleClickAtPoint(OptionSet<WebEvent::Modifier> modifiers, uint64_t lastLayerTreeTransactionId) 804 { 805 if (!m_lastCommittedTapTimestamp || !m_lastCommittedTapLocation) 806 return false; 807 808 auto millisecondsSinceLastTap = (MonotonicTime::now() - *m_lastCommittedTapTimestamp).milliseconds(); 809 if (millisecondsSinceLastTap > m_doubleTapForDoubleClickDelay.milliseconds()) 810 return false; 811 812 auto distanceBetweenTaps = sqrtf(pow(m_potentialTapLocation.x() - m_lastCommittedTapLocation->x(), 2) + pow(m_potentialTapLocation.y() - m_lastCommittedTapLocation->y(), 2)); 813 if (distanceBetweenTaps > m_doubleTapForDoubleClickRadius) 814 return false; 815 805 816 FloatPoint adjustedPoint; 806 auto* nodeRespondingToDoubleClick = m_page->mainFrame().nodeRespondingToDoubleClickEvent( point, adjustedPoint);817 auto* nodeRespondingToDoubleClick = m_page->mainFrame().nodeRespondingToDoubleClickEvent(m_potentialTapLocation, adjustedPoint); 807 818 if (!nodeRespondingToDoubleClick) 808 return ;819 return false; 809 820 810 821 auto* frameRespondingToDoubleClick = nodeRespondingToDoubleClick->document().frame(); 811 822 if (!frameRespondingToDoubleClick || lastLayerTreeTransactionId < WebFrame::fromCoreFrame(*frameRespondingToDoubleClick)->firstLayerTreeTransactionIDAfterDidCommitLoad()) 812 return ;823 return false; 813 824 814 825 bool shiftKey = modifiers.contains(WebEvent::Modifier::ShiftKey); … … 819 830 nodeRespondingToDoubleClick->document().frame()->eventHandler().handleMousePressEvent(PlatformMouseEvent(roundedAdjustedPoint, roundedAdjustedPoint, LeftButton, PlatformEvent::MousePressed, 2, shiftKey, ctrlKey, altKey, metaKey, WallTime::now(), 0, WebCore::NoTap)); 820 831 if (m_isClosed) 821 return ;832 return false; 822 833 nodeRespondingToDoubleClick->document().frame()->eventHandler().handleMouseReleaseEvent(PlatformMouseEvent(roundedAdjustedPoint, roundedAdjustedPoint, LeftButton, PlatformEvent::MouseReleased, 2, shiftKey, ctrlKey, altKey, metaKey, WallTime::now(), 0, WebCore::NoTap)); 834 return true; 823 835 } 824 836 … … 1041 1053 void WebPage::commitPotentialTap(OptionSet<WebEvent::Modifier> modifiers, uint64_t lastLayerTreeTransactionId, WebCore::PointerID pointerId) 1042 1054 { 1043 if (!m_potentialTapNode || (!m_potentialTapNode->renderer() && !is<HTMLAreaElement>(m_potentialTapNode.get()))) { 1055 auto currentPotentialTapLocation = m_potentialTapLocation; 1056 auto updateLastCommittedLocationAndTimestamp = [&] { 1057 m_lastCommittedTapTimestamp = MonotonicTime::now(); 1058 m_lastCommittedTapLocation = currentPotentialTapLocation; 1059 }; 1060 1061 auto invalidTargetForSingleClick = !m_potentialTapNode || (!m_potentialTapNode->renderer() && !is<HTMLAreaElement>(m_potentialTapNode.get())); 1062 if (invalidTargetForSingleClick) { 1063 // When the node has no click eventlistener, but it may have a dblclick one. 1064 handlePotentialDoubleTapForDoubleClickAtPoint(modifiers, lastLayerTreeTransactionId); 1044 1065 commitPotentialTapFailed(); 1045 return ;1066 return updateLastCommittedLocationAndTimestamp(); 1046 1067 } 1047 1068 … … 1052 1073 if (!frameRespondingToClick || lastLayerTreeTransactionId < WebFrame::fromCoreFrame(*frameRespondingToClick)->firstLayerTreeTransactionIDAfterDidCommitLoad()) { 1053 1074 commitPotentialTapFailed(); 1054 return ;1075 return updateLastCommittedLocationAndTimestamp(); 1055 1076 } 1056 1077 … … 1063 1084 } else 1064 1085 #endif 1065 handleSyntheticClick(*nodeRespondingToClick, adjustedPoint, modifiers, pointerId); 1086 { 1087 if (handlePotentialDoubleTapForDoubleClickAtPoint(modifiers, lastLayerTreeTransactionId)) 1088 commitPotentialTapFailed(); 1089 else 1090 handleSyntheticClick(*nodeRespondingToClick, adjustedPoint, modifiers, pointerId); 1091 } 1066 1092 } else 1067 1093 commitPotentialTapFailed(); … … 1070 1096 m_potentialTapLocation = FloatPoint(); 1071 1097 m_potentialTapSecurityOrigin = nullptr; 1098 return updateLastCommittedLocationAndTimestamp(); 1072 1099 } 1073 1100
Note: See TracChangeset
for help on using the changeset viewer.