Changeset 247866 in webkit
- Timestamp:
- Jul 26, 2019 11:22:06 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r247860 r247866 1 2019-07-26 Zalan Bujtas <zalan@apple.com> 2 3 Unable to tap/double tap to open files/folders in Google Drive in Safari 4 https://bugs.webkit.org/show_bug.cgi?id=200096 5 <rdar://problem/52748552> 6 7 Reviewed by Wenson Hsieh. 8 9 1. Rebaseline (progression). 10 2. Payment request tests activate elements by tapping on them at a high speed, triggering double clicks instead. Let's slow them down a bit. 11 12 * fast/events/touch/ios/double-tap-for-double-click3-expected.txt: 13 * http/tests/adClickAttribution/anchor-tag-attributes-validation.html: 14 * http/tests/resources/payment-request.js: 15 (activateThen): 16 * resources/ui-helper.js: 17 (window.UIHelper.activateElementAtHumanSpeed.return.new.Promise): 18 (window.UIHelper.activateElementAtHumanSpeed): 19 * tests-options.json: 20 1 21 2019-07-26 Rob Buis <rbuis@igalia.com> 2 22 -
trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click3-expected.txt
r247820 r247866 1 1 PASS if 'double click' text is NOT shown below. 2 [click] [click]2 [click] -
trunk/LayoutTests/http/tests/adClickAttribution/anchor-tag-attributes-validation-expected.txt
r244086 r247866 1 CONSOLE MESSAGE: line 1 65: adcampaignid must have a non-negative value less than or equal to 63 for Ad Click Attribution.2 CONSOLE MESSAGE: line 1 65: adcampaignid must have a non-negative value less than or equal to 63 for Ad Click Attribution.3 CONSOLE MESSAGE: line 1 65: adcampaignid can not be converted to a non-negative integer which is required for Ad Click Attribution.4 CONSOLE MESSAGE: line 1 65: adcampaignid can not be converted to a non-negative integer which is required for Ad Click Attribution.5 CONSOLE MESSAGE: line 1 65: adcampaignid can not be converted to a non-negative integer which is required for Ad Click Attribution.6 CONSOLE MESSAGE: line 1 65: addestination could not be converted to a valid HTTP-family URL.7 CONSOLE MESSAGE: line 1 65: addestination could not be converted to a valid HTTP-family URL.8 CONSOLE MESSAGE: line 1 65: addestination could not be converted to a valid HTTP-family URL.9 CONSOLE MESSAGE: line 1 65: Both adcampaignid and addestination need to be set for Ad Click Attribution to work.10 CONSOLE MESSAGE: line 1 65: Both adcampaignid and addestination need to be set for Ad Click Attribution to work.11 CONSOLE MESSAGE: line 1 65: addestination can not be the same site as the current website.1 CONSOLE MESSAGE: line 192: adcampaignid must have a non-negative value less than or equal to 63 for Ad Click Attribution. 2 CONSOLE MESSAGE: line 192: adcampaignid must have a non-negative value less than or equal to 63 for Ad Click Attribution. 3 CONSOLE MESSAGE: line 192: adcampaignid can not be converted to a non-negative integer which is required for Ad Click Attribution. 4 CONSOLE MESSAGE: line 192: adcampaignid can not be converted to a non-negative integer which is required for Ad Click Attribution. 5 CONSOLE MESSAGE: line 192: adcampaignid can not be converted to a non-negative integer which is required for Ad Click Attribution. 6 CONSOLE MESSAGE: line 192: addestination could not be converted to a valid HTTP-family URL. 7 CONSOLE MESSAGE: line 192: addestination could not be converted to a valid HTTP-family URL. 8 CONSOLE MESSAGE: line 192: addestination could not be converted to a valid HTTP-family URL. 9 CONSOLE MESSAGE: line 192: Both adcampaignid and addestination need to be set for Ad Click Attribution to work. 10 CONSOLE MESSAGE: line 192: Both adcampaignid and addestination need to be set for Ad Click Attribution to work. 11 CONSOLE MESSAGE: line 192: addestination can not be the same site as the current website. 12 12 Test for validity of ad click attribution attributes on anchor tags. 13 13 -
trunk/LayoutTests/http/tests/adClickAttribution/anchor-tag-attributes-validation.html
r244581 r247866 26 26 27 27 function activateElement(elementID, callback) { 28 var element = document.getElementById(elementID); 29 var centerX = element.offsetLeft + element.offsetWidth / 2; 30 var centerY = element.offsetTop + element.offsetHeight / 2; 31 UIHelper.activateAt(centerX, centerY).then( 28 UIHelper.activateElementAtHumanSpeed(document.getElementById(elementID)).then( 32 29 function () { 33 30 callback(); -
trunk/LayoutTests/http/tests/resources/payment-request.js
r237381 r247866 9 9 }; 10 10 document.body.insertBefore(button, document.body.firstChild); 11 UIHelper.activateElement (button);11 UIHelper.activateElementAtHumanSpeed(button); 12 12 }); 13 13 } -
trunk/LayoutTests/resources/ui-helper.js
r247839 r247866 182 182 } 183 183 184 static activateElementAtHumanSpeed(element) 185 { 186 const x = element.offsetLeft + element.offsetWidth / 2; 187 const y = element.offsetTop + element.offsetHeight / 2; 188 189 if (!this.isWebKit2() || !this.isIOSFamily()) { 190 eventSender.mouseMoveTo(x, y); 191 eventSender.mouseDown(); 192 eventSender.mouseUp(); 193 return Promise.resolve(); 194 } 195 196 return new Promise(async (resolve) => { 197 await new Promise(resolveAfterDelay => setTimeout(resolveAfterDelay, 350)); 198 testRunner.runUIScript(` 199 uiController.singleTapAtPoint(${x}, ${y}, function() { 200 uiController.uiScriptComplete(); 201 });`, resolve); 202 }); 203 } 204 184 205 static async doubleActivateAt(x, y) 185 206 { -
trunk/LayoutTests/tests-options.json
r247193 r247866 1898 1898 "imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-twice.html": [ 1899 1899 "slow" 1900 ], 1901 "http/tests/paymentrequest/payment-response-reference-cycle-leak.https.html": [ 1902 "slow" 1900 1903 ] 1901 1904 } -
trunk/Source/WebKit/ChangeLog
r247864 r247866 1 2019-07-26 Zalan Bujtas <zalan@apple.com> 2 3 Unable to tap/double tap to open files/folders in Google Drive in Safari 4 https://bugs.webkit.org/show_bug.cgi?id=200096 5 <rdar://problem/52748552> 6 7 Reviewed by Wenson Hsieh. 8 9 This patch reverts to the original double-tap-for-double-click implementation (see r244775 and r246347 for more information). 10 11 * Shared/WebPageCreationParameters.cpp: 12 (WebKit::WebPageCreationParameters::encode const): 13 (WebKit::WebPageCreationParameters::decode): 14 * Shared/WebPageCreationParameters.h: 15 * UIProcess/PageClient.h: 16 * UIProcess/WebPageProxy.cpp: 17 (WebKit::WebPageProxy::creationParameters): 18 * UIProcess/WebPageProxy.h: 19 * UIProcess/ios/PageClientImplIOS.h: 20 * UIProcess/ios/PageClientImplIOS.mm: 21 (WebKit::PageClientImpl::doubleTapForDoubleClickDelay): Deleted. 22 (WebKit::PageClientImpl::doubleTapForDoubleClickRadius): Deleted. 23 * UIProcess/ios/WKContentViewInteraction.h: 24 * UIProcess/ios/WKContentViewInteraction.mm: 25 (-[WKContentView setupInteraction]): 26 (-[WKContentView cleanupInteraction]): 27 (-[WKContentView _removeDefaultGestureRecognizers]): 28 (-[WKContentView _addDefaultGestureRecognizers]): 29 (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]): Do not recognize the single and double gestures the same time. 30 (-[WKContentView gestureRecognizerShouldBegin:]): 31 (-[WKContentView _doubleTapRecognizedForDoubleClick:]): 32 (-[WKContentView _didStartProvisionalLoadForMainFrame]): 33 (-[WKContentView _ensureNonBlockingDoubleTapGestureRecognizer]): Deleted. 34 (-[WKContentView _doubleTapForDoubleClickDelay]): Deleted. 35 (-[WKContentView _doubleTapForDoubleClickRadius]): Deleted. 36 * UIProcess/ios/WebPageProxyIOS.mm: 37 (WebKit::WebPageProxy::handleDoubleTapForDoubleClickAtPoint): 38 * WebProcess/WebPage/WebPage.cpp: 39 * WebProcess/WebPage/WebPage.h: 40 * WebProcess/WebPage/WebPage.messages.in: 41 * WebProcess/WebPage/ios/WebPageIOS.mm: 42 (WebKit::WebPage::handleDoubleTapForDoubleClickAtPoint): 43 (WebKit::WebPage::commitPotentialTap): 44 (WebKit::WebPage::handlePotentialDoubleTapForDoubleClickAtPoint): Deleted. 45 1 46 2019-07-26 Eric Liang <ericliang@apple.com> 2 47 -
trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp
r247820 r247866 99 99 encoder << keyboardIsAttached; 100 100 encoder << canShowWhileLocked; 101 encoder << doubleTapForDoubleClickDelay;102 encoder << doubleTapForDoubleClickRadius;103 101 encoder << overrideViewportArguments; 104 102 #endif … … 293 291 if (!decoder.decode(parameters.canShowWhileLocked)) 294 292 return WTF::nullopt; 295 if (!decoder.decode(parameters.doubleTapForDoubleClickDelay))296 return WTF::nullopt;297 if (!decoder.decode(parameters.doubleTapForDoubleClickRadius))298 return WTF::nullopt;299 293 300 294 Optional<Optional<WebCore::ViewportArguments>> overrideViewportArguments; -
trunk/Source/WebKit/Shared/WebPageCreationParameters.h
r247820 r247866 159 159 bool keyboardIsAttached { false }; 160 160 bool canShowWhileLocked { false }; 161 Seconds doubleTapForDoubleClickDelay { 350_ms };162 float doubleTapForDoubleClickRadius { 45 };163 161 Optional<WebCore::ViewportArguments> overrideViewportArguments; 164 162 #endif -
trunk/Source/WebKit/UIProcess/PageClient.h
r247820 r247866 414 414 415 415 virtual void handleAutocorrectionContext(const WebAutocorrectionContext&) = 0; 416 417 virtual Seconds doubleTapForDoubleClickDelay() = 0;418 virtual float doubleTapForDoubleClickRadius() = 0;419 416 #endif 420 417 -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r247853 r247866 7212 7212 parameters.overrideViewportArguments = m_overrideViewportArguments; 7213 7213 parameters.canShowWhileLocked = m_configuration->canShowWhileLocked(); 7214 parameters.doubleTapForDoubleClickDelay = pageClient().doubleTapForDoubleClickDelay();7215 parameters.doubleTapForDoubleClickRadius = pageClient().doubleTapForDoubleClickRadius();7216 7214 #endif 7217 7215 -
trunk/Source/WebKit/UIProcess/WebPageProxy.h
r247820 r247866 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); 1228 1229 1229 1230 void inspectorNodeSearchMovedToPosition(const WebCore::FloatPoint&); -
trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.h
r247820 r247866 244 244 void handleAutocorrectionContext(const WebAutocorrectionContext&) final; 245 245 246 Seconds doubleTapForDoubleClickDelay() final;247 float doubleTapForDoubleClickRadius() final;248 249 246 void didFinishProcessingAllPendingMouseEvents() final { } 250 247 -
trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.mm
r247820 r247866 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 855 845 #if USE(QUICK_LOOK) 856 846 void PageClientImpl::requestPasswordForQuickLookDocument(const String& fileName, WTF::Function<void(const String&)>&& completionHandler) -
trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h
r247820 r247866 217 217 RetainPtr<WKSyntheticTapGestureRecognizer> _doubleTapGestureRecognizer; 218 218 RetainPtr<UITapGestureRecognizer> _nonBlockingDoubleTapGestureRecognizer; 219 RetainPtr<UITapGestureRecognizer> _doubleTapGestureRecognizerForDoubleClick; 219 220 RetainPtr<UITapGestureRecognizer> _twoFingerDoubleTapGestureRecognizer; 220 221 RetainPtr<UITapGestureRecognizer> _twoFingerSingleTapGestureRecognizer; … … 481 482 - (void)_becomeFirstResponderWithSelectionMovingForward:(BOOL)selectingForward completionHandler:(void (^)(BOOL didBecomeFirstResponder))completionHandler; 482 483 - (void)_setDoubleTapGesturesEnabled:(BOOL)enabled; 483 - (double)_doubleTapForDoubleClickDelay;484 - (float)_doubleTapForDoubleClickRadius;485 484 #if ENABLE(DATA_DETECTION) 486 485 - (NSArray *)_dataDetectionResults; -
trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm
r247838 r247866 689 689 } 690 690 691 - (void)_ensureNonBlockingDoubleTapGestureRecognizer692 {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 701 691 - (void)setupInteraction 702 692 { … … 745 735 [self addGestureRecognizer:_singleTapGestureRecognizer.get()]; 746 736 747 [self _ensureNonBlockingDoubleTapGestureRecognizer]; 737 _nonBlockingDoubleTapGestureRecognizer = adoptNS([[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_nonBlockingDoubleTapRecognized:)]); 738 [_nonBlockingDoubleTapGestureRecognizer setNumberOfTapsRequired:2]; 739 [_nonBlockingDoubleTapGestureRecognizer setDelegate:self]; 740 [_nonBlockingDoubleTapGestureRecognizer setEnabled:NO]; 748 741 [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()]; 749 747 750 748 [self _createAndConfigureDoubleTapGestureRecognizer]; … … 895 893 [self removeGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()]; 896 894 895 [_doubleTapGestureRecognizerForDoubleClick setDelegate:nil]; 896 [self removeGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()]; 897 897 898 [_twoFingerDoubleTapGestureRecognizer setDelegate:nil]; 898 899 [self removeGestureRecognizer:_twoFingerDoubleTapGestureRecognizer.get()]; … … 971 972 [self removeGestureRecognizer:_doubleTapGestureRecognizer.get()]; 972 973 [self removeGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()]; 974 [self removeGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()]; 973 975 [self removeGestureRecognizer:_twoFingerDoubleTapGestureRecognizer.get()]; 974 976 [self removeGestureRecognizer:_twoFingerSingleTapGestureRecognizer.get()]; … … 990 992 [self addGestureRecognizer:_doubleTapGestureRecognizer.get()]; 991 993 [self addGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()]; 994 [self addGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()]; 992 995 [self addGestureRecognizer:_twoFingerDoubleTapGestureRecognizer.get()]; 993 996 [self addGestureRecognizer:_twoFingerSingleTapGestureRecognizer.get()]; … … 1893 1896 return YES; 1894 1897 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 1895 1904 return NO; 1896 1905 } … … 2085 2094 || gestureRecognizer == _doubleTapGestureRecognizer 2086 2095 || gestureRecognizer == _nonBlockingDoubleTapGestureRecognizer 2096 || gestureRecognizer == _doubleTapGestureRecognizerForDoubleClick 2087 2097 || gestureRecognizer == _twoFingerDoubleTapGestureRecognizer) { 2088 2098 … … 2321 2331 break; 2322 2332 } 2333 } 2334 2335 - (void)_doubleTapRecognizedForDoubleClick:(UITapGestureRecognizer *)gestureRecognizer 2336 { 2337 _page->handleDoubleTapForDoubleClickAtPoint(WebCore::IntPoint(gestureRecognizer.location), WebKit::webEventModifierFlags(gestureRecognizerModifierFlags(gestureRecognizer)), _layerTreeTransactionIdAtLastTouchStart); 2323 2338 } 2324 2339 … … 3899 3914 - (void)_didStartProvisionalLoadForMainFrame 3900 3915 { 3901 // We need to disable the double-tap gesture recognizers that are enabled for double-tap-to-zoom and which 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 3902 3920 // are enabled when a single tap is first recognized. This avoids tests running in sequence and simulating taps 3903 3921 // in the same location to trigger double-tap recognition. … … 3967 3985 [_nonBlockingDoubleTapGestureRecognizer setEnabled:!enabled]; 3968 3986 [self _resetIsDoubleTapPending]; 3969 }3970 3971 - (double)_doubleTapForDoubleClickDelay3972 {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)_doubleTapForDoubleClickRadius3983 {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;3991 3987 } 3992 3988 -
trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm
r247820 r247866 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 841 846 void WebPageProxy::inspectorNodeSearchMovedToPosition(const WebCore::FloatPoint& position) 842 847 { -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp
r247822 r247866 417 417 , m_keyboardIsAttached(parameters.keyboardIsAttached) 418 418 , m_canShowWhileLocked(parameters.canShowWhileLocked) 419 , m_doubleTapForDoubleClickDelay(parameters.doubleTapForDoubleClickDelay)420 , m_doubleTapForDoubleClickRadius(parameters.doubleTapForDoubleClickRadius)421 419 #endif 422 420 , m_layerVolatilityTimer(*this, &WebPage::layerVolatilityTimerFired) -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.h
r247822 r247866 637 637 void tapHighlightAtPosition(uint64_t requestID, const WebCore::FloatPoint&); 638 638 void didRecognizeLongPress(); 639 bool handlePotentialDoubleTapForDoubleClickAtPoint(OptionSet<WebKit::WebEvent::Modifier>, uint64_t lastLayerTreeTransactionId);639 void handleDoubleTapForDoubleClickAtPoint(const WebCore::IntPoint&, OptionSet<WebKit::WebEvent::Modifier>, uint64_t lastLayerTreeTransactionId); 640 640 641 641 void inspectorNodeSearchMovedToPosition(const WebCore::FloatPoint&); … … 1869 1869 bool m_canShowWhileLocked { false }; 1870 1870 bool m_inDynamicSizeUpdate { false }; 1871 Seconds m_doubleTapForDoubleClickDelay { 350_ms };1872 float m_doubleTapForDoubleClickRadius { 45 };1873 1871 HashMap<std::pair<WebCore::IntSize, double>, WebCore::IntPoint> m_dynamicSizeUpdateHistory; 1874 1872 RefPtr<WebCore::Node> m_pendingSyntheticClickNode; … … 1881 1879 double m_lastTransactionPageScaleFactor { 0 }; 1882 1880 uint64_t m_lastTransactionIDWithScaleChange { 0 }; 1883 Optional<MonotonicTime> m_lastCommittedTapTimestamp;1884 Optional<WebCore::FloatPoint> m_lastCommittedTapLocation;1885 1881 1886 1882 CompletionHandler<void(InteractionInformationAtPosition&&)> m_pendingSynchronousPositionInformationReply; -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in
r247822 r247866 60 60 TapHighlightAtPosition(uint64_t requestID, WebCore::FloatPoint point) 61 61 DidRecognizeLongPress() 62 HandleDoubleTapForDoubleClickAtPoint(WebCore::IntPoint point, OptionSet<WebKit::WebEvent::Modifier> modifiers, uint64_t lastLayerTreeTransactionId) 62 63 InspectorNodeSearchMovedToPosition(WebCore::FloatPoint point) 63 64 InspectorNodeSearchEndedAtPosition(WebCore::FloatPoint point) -
trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
r247820 r247866 833 833 } 834 834 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 835 void WebPage::handleDoubleTapForDoubleClickAtPoint(const IntPoint& point, OptionSet<WebEvent::Modifier> modifiers, uint64_t lastLayerTreeTransactionId) 836 { 848 837 FloatPoint adjustedPoint; 849 auto* nodeRespondingToDoubleClick = m_page->mainFrame().nodeRespondingToDoubleClickEvent( m_potentialTapLocation, adjustedPoint);838 auto* nodeRespondingToDoubleClick = m_page->mainFrame().nodeRespondingToDoubleClickEvent(point, adjustedPoint); 850 839 if (!nodeRespondingToDoubleClick) 851 return false;840 return; 852 841 853 842 auto* frameRespondingToDoubleClick = nodeRespondingToDoubleClick->document().frame(); 854 843 if (!frameRespondingToDoubleClick || lastLayerTreeTransactionId < WebFrame::fromCoreFrame(*frameRespondingToDoubleClick)->firstLayerTreeTransactionIDAfterDidCommitLoad()) 855 return false;844 return; 856 845 857 846 bool shiftKey = modifiers.contains(WebEvent::Modifier::ShiftKey); … … 862 851 nodeRespondingToDoubleClick->document().frame()->eventHandler().handleMousePressEvent(PlatformMouseEvent(roundedAdjustedPoint, roundedAdjustedPoint, LeftButton, PlatformEvent::MousePressed, 2, shiftKey, ctrlKey, altKey, metaKey, WallTime::now(), 0, WebCore::NoTap)); 863 852 if (m_isClosed) 864 return false;853 return; 865 854 nodeRespondingToDoubleClick->document().frame()->eventHandler().handleMouseReleaseEvent(PlatformMouseEvent(roundedAdjustedPoint, roundedAdjustedPoint, LeftButton, PlatformEvent::MouseReleased, 2, shiftKey, ctrlKey, altKey, metaKey, WallTime::now(), 0, WebCore::NoTap)); 866 return true;867 855 } 868 856 … … 1085 1073 void WebPage::commitPotentialTap(OptionSet<WebEvent::Modifier> modifiers, uint64_t lastLayerTreeTransactionId, WebCore::PointerID pointerId) 1086 1074 { 1087 auto currentPotentialTapLocation = m_potentialTapLocation;1088 auto updateLastCommittedLocationAndTimestamp = [&] {1089 m_lastCommittedTapTimestamp = MonotonicTime::now();1090 m_lastCommittedTapLocation = currentPotentialTapLocation;1091 };1092 1093 1075 auto invalidTargetForSingleClick = !m_potentialTapNode; 1094 1076 if (!invalidTargetForSingleClick) { … … 1099 1081 } 1100 1082 if (invalidTargetForSingleClick) { 1101 // When the node has no click eventlistener, but it may have a dblclick one.1102 handlePotentialDoubleTapForDoubleClickAtPoint(modifiers, lastLayerTreeTransactionId);1103 1083 commitPotentialTapFailed(); 1104 return updateLastCommittedLocationAndTimestamp();1084 return; 1105 1085 } 1106 1086 … … 1111 1091 if (!frameRespondingToClick || lastLayerTreeTransactionId < WebFrame::fromCoreFrame(*frameRespondingToClick)->firstLayerTreeTransactionIDAfterDidCommitLoad()) { 1112 1092 commitPotentialTapFailed(); 1113 return updateLastCommittedLocationAndTimestamp();1093 return; 1114 1094 } 1115 1095 … … 1122 1102 } else 1123 1103 #endif 1124 { 1125 if (handlePotentialDoubleTapForDoubleClickAtPoint(modifiers, lastLayerTreeTransactionId)) 1126 commitPotentialTapFailed(); 1127 else 1128 handleSyntheticClick(*nodeRespondingToClick, adjustedPoint, modifiers, pointerId); 1129 } 1104 handleSyntheticClick(*nodeRespondingToClick, adjustedPoint, modifiers, pointerId); 1130 1105 } else 1131 1106 commitPotentialTapFailed(); … … 1134 1109 m_potentialTapLocation = FloatPoint(); 1135 1110 m_potentialTapSecurityOrigin = nullptr; 1136 return updateLastCommittedLocationAndTimestamp();1137 1111 } 1138 1112
Note: See TracChangeset
for help on using the changeset viewer.