WebKit Bugzilla
Attachment 368416 Details for
Bug 197347
: [iOS]Double-tapping a post to like doesn't work on Instagram.com (needs 'dblclick' event)
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-197347-20190427164800.patch (text/plain), 16.01 KB, created by
zalan
on 2019-04-27 16:48:01 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
zalan
Created:
2019-04-27 16:48:01 PDT
Size:
16.01 KB
patch
obsolete
>Subversion Revision: 244649 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 5ac42cac99b1d94d81d6acd37fd2ec161914793a..d7a902679d10eaaa021d844fa10016ea05c90926 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,17 @@ >+2019-04-27 Zalan Bujtas <zalan@apple.com> >+ >+ Double-tapping a post to like doesn't work on Instagram.com (needs 'dblclick' event) >+ https://bugs.webkit.org/show_bug.cgi?id=197347 >+ <rdar://problem/49393423> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ WIP patch. >+ >+ * page/Frame.h: >+ * page/ios/FrameIOS.mm: >+ (WebCore::Frame::nodeRespondingToDoubleClickEvent): >+ > 2019-04-25 Commit Queue <commit-queue@webkit.org> > > Unreviewed, rolling out r244627. >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index bfe4309378de27f0991f0f332f25ac5d0be99665..37ccf94627f8df06873259bde8c756818bbb343b 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,30 @@ >+2019-04-27 Zalan Bujtas <zalan@apple.com> >+ >+ Double-tapping a post to like doesn't work on Instagram.com (needs 'dblclick' event) >+ https://bugs.webkit.org/show_bug.cgi?id=197347 >+ <rdar://problem/49393423> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ WIP patch. >+ >+ * UIProcess/WebPageProxy.h: >+ * UIProcess/ios/WKContentViewInteraction.h: >+ * UIProcess/ios/WKContentViewInteraction.mm: >+ (-[WKContentView setupInteraction]): >+ (-[WKContentView cleanupInteraction]): >+ (-[WKContentView _removeDefaultGestureRecognizers]): >+ (-[WKContentView _addDefaultGestureRecognizers]): >+ (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]): >+ (-[WKContentView gestureRecognizerShouldBegin:]): >+ (-[WKContentView _doubleTapRecognizedForDoubleClick:]): >+ * UIProcess/ios/WebPageProxyIOS.mm: >+ (WebKit::WebPageProxy::handleDoubleTapForDoubleClickAtPoint): >+ * WebProcess/WebPage/WebPage.h: >+ * WebProcess/WebPage/WebPage.messages.in: >+ * WebProcess/WebPage/ios/WebPageIOS.mm: >+ (WebKit::WebPage::handleDoubleTapForDoubleClickAtPoint): >+ > 2019-04-25 Alexander Mikhaylenko <exalm7659@gmail.com> > > [GTK] Back/Forward gesture interferes with scrolling >diff --git a/Source/WebCore/page/Frame.h b/Source/WebCore/page/Frame.h >index b33bde3f7700109f06f0e01854b8ecd48b491e1d..69a248fe157a17498bb11d8a3afa0a90c55ae31c 100644 >--- a/Source/WebCore/page/Frame.h >+++ b/Source/WebCore/page/Frame.h >@@ -219,6 +219,7 @@ public: > > WEBCORE_EXPORT Node* deepestNodeAtLocation(const FloatPoint& viewportLocation); > WEBCORE_EXPORT Node* nodeRespondingToClickEvents(const FloatPoint& viewportLocation, FloatPoint& adjustedViewportLocation, SecurityOrigin* = nullptr); >+ WEBCORE_EXPORT Node* nodeRespondingToDoubleClickEvent(const FloatPoint& viewportLocation, FloatPoint& adjustedViewportLocation); > WEBCORE_EXPORT Node* nodeRespondingToScrollWheelEvents(const FloatPoint& viewportLocation); > > WEBCORE_EXPORT NSArray *wordsInCurrentParagraph() const; >diff --git a/Source/WebCore/page/ios/FrameIOS.mm b/Source/WebCore/page/ios/FrameIOS.mm >index 40db2deaef51b420ea05df225ce02cc9068bb537..b2251ae729ceebc10d362412afeed54a120caeff 100644 >--- a/Source/WebCore/page/ios/FrameIOS.mm >+++ b/Source/WebCore/page/ios/FrameIOS.mm >@@ -418,6 +418,33 @@ Node* Frame::nodeRespondingToClickEvents(const FloatPoint& viewportLocation, Flo > return qualifyingNodeAtViewportLocation(viewportLocation, adjustedViewportLocation, WTFMove(ancestorRespondingToClickEvents), true); > } > >+Node* Frame::nodeRespondingToDoubleClickEvent(const FloatPoint& viewportLocation, FloatPoint& adjustedViewportLocation) >+{ >+ auto&& ancestorRespondingToDoubleClickEvent = [](const HitTestResult& hitTestResult, Node* terminationNode, IntRect* nodeBounds) -> Node* { >+ if (nodeBounds) >+ *nodeBounds = IntRect(); >+ >+ auto node = hitTestResult.innerNode(); >+ if (!node) >+ return nullptr; >+ >+ for (; node && node != terminationNode; node = node->parentInComposedTree()) { >+ if (!node->hasEventListeners(eventNames().dblclickEvent)) >+ continue; >+#if ENABLE(TOUCH_EVENTS) >+ if (!node->allowsDoubleTapGesture()) >+ continue; >+#endif >+ if (nodeBounds && node->renderer()) >+ *nodeBounds = node->renderer()->absoluteBoundingBoxRect(true); >+ return node; >+ } >+ return nullptr; >+ }; >+ >+ return qualifyingNodeAtViewportLocation(viewportLocation, adjustedViewportLocation, WTFMove(ancestorRespondingToDoubleClickEvent), true); >+} >+ > Node* Frame::nodeRespondingToScrollWheelEvents(const FloatPoint& viewportLocation) > { > auto&& ancestorRespondingToScrollWheelEvents = [](const HitTestResult& hitTestResult, Node* terminationNode, IntRect* nodeBounds) -> Node* { >diff --git a/Source/WebKit/UIProcess/WebPageProxy.h b/Source/WebKit/UIProcess/WebPageProxy.h >index 7c277b6d84c665055918f08e2bd264f69bc5c686..91611eed525327557a2336465174996ef8720811 100644 >--- a/Source/WebKit/UIProcess/WebPageProxy.h >+++ b/Source/WebKit/UIProcess/WebPageProxy.h >@@ -1210,6 +1210,7 @@ public: > void tapHighlightAtPosition(const WebCore::FloatPoint&, uint64_t& requestID); > void handleTap(const WebCore::FloatPoint&, OptionSet<WebKit::WebEvent::Modifier>, uint64_t layerTreeTransactionIdAtLastTouchStart); > void didRecognizeLongPress(); >+ void handleDoubleTapForDoubleClickAtPoint(const WebCore::IntPoint&, OptionSet<WebEvent::Modifier>, uint64_t layerTreeTransactionIdAtLastTouchStart); > > void inspectorNodeSearchMovedToPosition(const WebCore::FloatPoint&); > void inspectorNodeSearchEndedAtPosition(const WebCore::FloatPoint&); >diff --git a/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h b/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h >index 107a27976d9df7286b3659eacc070c8dd95825dd..566270287378b8817483aa7c96fce99e429af909 100644 >--- a/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h >+++ b/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h >@@ -220,6 +220,7 @@ struct WKAutoCorrectionData { > RetainPtr<UILongPressGestureRecognizer> _longPressGestureRecognizer; > RetainPtr<WKSyntheticTapGestureRecognizer> _doubleTapGestureRecognizer; > RetainPtr<UITapGestureRecognizer> _nonBlockingDoubleTapGestureRecognizer; >+ RetainPtr<UITapGestureRecognizer> _doubleTapGestureRecognizerForDoubleClick; > RetainPtr<UITapGestureRecognizer> _twoFingerDoubleTapGestureRecognizer; > RetainPtr<UITapGestureRecognizer> _twoFingerSingleTapGestureRecognizer; > RetainPtr<UITapGestureRecognizer> _stylusSingleTapGestureRecognizer; >diff --git a/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm b/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm >index 0cfad5f7b3a705d8c2d6e21c0ed14a89a25e9925..daf3f8415efa0244df46529cbdd1990211852ed3 100644 >--- a/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm >+++ b/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm >@@ -734,6 +734,12 @@ - (void)setupInteraction > [_nonBlockingDoubleTapGestureRecognizer setEnabled:NO]; > [self addGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()]; > >+ _doubleTapGestureRecognizerForDoubleClick = adoptNS([[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_doubleTapRecognizedForDoubleClick:)]); >+ [_doubleTapGestureRecognizerForDoubleClick setNumberOfTapsRequired:2]; >+ [_doubleTapGestureRecognizerForDoubleClick setDelegate:self]; >+ [_doubleTapGestureRecognizerForDoubleClick setEnabled:YES]; >+ [self addGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()]; >+ > [self _createAndConfigureDoubleTapGestureRecognizer]; > > _twoFingerDoubleTapGestureRecognizer = adoptNS([[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_twoFingerDoubleTapRecognized:)]); >@@ -867,6 +873,9 @@ - (void)cleanupInteraction > [_nonBlockingDoubleTapGestureRecognizer setDelegate:nil]; > [self removeGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()]; > >+ [_doubleTapGestureRecognizerForDoubleClick setDelegate:nil]; >+ [self removeGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()]; >+ > [_twoFingerDoubleTapGestureRecognizer setDelegate:nil]; > [self removeGestureRecognizer:_twoFingerDoubleTapGestureRecognizer.get()]; > >@@ -940,6 +949,7 @@ - (void)_removeDefaultGestureRecognizers > [self removeGestureRecognizer:_highlightLongPressGestureRecognizer.get()]; > [self removeGestureRecognizer:_doubleTapGestureRecognizer.get()]; > [self removeGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()]; >+ [self removeGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()]; > [self removeGestureRecognizer:_twoFingerDoubleTapGestureRecognizer.get()]; > [self removeGestureRecognizer:_twoFingerSingleTapGestureRecognizer.get()]; > [self removeGestureRecognizer:_stylusSingleTapGestureRecognizer.get()]; >@@ -956,6 +966,7 @@ - (void)_addDefaultGestureRecognizers > [self addGestureRecognizer:_highlightLongPressGestureRecognizer.get()]; > [self addGestureRecognizer:_doubleTapGestureRecognizer.get()]; > [self addGestureRecognizer:_nonBlockingDoubleTapGestureRecognizer.get()]; >+ [self addGestureRecognizer:_doubleTapGestureRecognizerForDoubleClick.get()]; > [self addGestureRecognizer:_twoFingerDoubleTapGestureRecognizer.get()]; > [self addGestureRecognizer:_twoFingerSingleTapGestureRecognizer.get()]; > [self addGestureRecognizer:_stylusSingleTapGestureRecognizer.get()]; >@@ -1779,6 +1790,12 @@ - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecogni > if (isSamePair(gestureRecognizer, otherGestureRecognizer, _highlightLongPressGestureRecognizer.get(), _nonBlockingDoubleTapGestureRecognizer.get())) > return YES; > >+ if (isSamePair(gestureRecognizer, otherGestureRecognizer, _nonBlockingDoubleTapGestureRecognizer.get(), _doubleTapGestureRecognizerForDoubleClick.get())) >+ return YES; >+ >+ if (isSamePair(gestureRecognizer, otherGestureRecognizer, _doubleTapGestureRecognizer.get(), _doubleTapGestureRecognizerForDoubleClick.get())) >+ return YES; >+ > if (isSamePair(gestureRecognizer, otherGestureRecognizer, _highlightLongPressGestureRecognizer.get(), _previewSecondaryGestureRecognizer.get())) > return YES; > >@@ -1975,6 +1992,7 @@ - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer > if (gestureRecognizer == _highlightLongPressGestureRecognizer > || gestureRecognizer == _doubleTapGestureRecognizer > || gestureRecognizer == _nonBlockingDoubleTapGestureRecognizer >+ || gestureRecognizer == _doubleTapGestureRecognizerForDoubleClick > || gestureRecognizer == _twoFingerDoubleTapGestureRecognizer) { > > if (hasFocusedElement(_focusedElementInformation)) { >@@ -2377,6 +2395,11 @@ - (void)_nonBlockingDoubleTapRecognized:(UITapGestureRecognizer *)gestureRecogni > _isDoubleTapPending = YES; > } > >+- (void)_doubleTapRecognizedForDoubleClick:(UITapGestureRecognizer *)gestureRecognizer >+{ >+ _page->handleDoubleTapForDoubleClickAtPoint(WebCore::IntPoint(gestureRecognizer.location), WebKit::webEventModifierFlags(gestureRecognizerModifierFlags(gestureRecognizer)), _layerTreeTransactionIdAtLastTouchStart); >+} >+ > - (void)_twoFingerDoubleTapRecognized:(UITapGestureRecognizer *)gestureRecognizer > { > [self _resetIsDoubleTapPending]; >diff --git a/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm b/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm >index c682fda34246ff9d721f84063b27a20eb221d45b..7f55adb1b002192c9d1c1e0f63beb7152d0270e9 100644 >--- a/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm >+++ b/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm >@@ -867,6 +867,11 @@ void WebPageProxy::didRecognizeLongPress() > process().send(Messages::WebPage::DidRecognizeLongPress(), m_pageID); > } > >+void WebPageProxy::handleDoubleTapForDoubleClickAtPoint(const WebCore::IntPoint& point, OptionSet<WebEvent::Modifier> modifiers, uint64_t layerTreeTransactionIdAtLastTouchStart) >+{ >+ process().send(Messages::WebPage::HandleDoubleTapForDoubleClickAtPoint(point, modifiers, layerTreeTransactionIdAtLastTouchStart), m_pageID); >+} >+ > void WebPageProxy::inspectorNodeSearchMovedToPosition(const WebCore::FloatPoint& position) > { > process().send(Messages::WebPage::InspectorNodeSearchMovedToPosition(position), m_pageID); >diff --git a/Source/WebKit/WebProcess/WebPage/WebPage.h b/Source/WebKit/WebProcess/WebPage/WebPage.h >index 1f39c4379ee0bc8115ca8ab4f4c6514cb2e42c68..30f9e421235a3f52fec28cb4e32f3564add13398 100644 >--- a/Source/WebKit/WebProcess/WebPage/WebPage.h >+++ b/Source/WebKit/WebProcess/WebPage/WebPage.h >@@ -622,6 +622,7 @@ public: > void cancelPotentialTapInFrame(WebFrame&); > void tapHighlightAtPosition(uint64_t requestID, const WebCore::FloatPoint&); > void didRecognizeLongPress(); >+ void handleDoubleTapForDoubleClickAtPoint(const WebCore::IntPoint&, OptionSet<WebKit::WebEvent::Modifier>, uint64_t lastLayerTreeTransactionId); > > void inspectorNodeSearchMovedToPosition(const WebCore::FloatPoint&); > void inspectorNodeSearchEndedAtPosition(const WebCore::FloatPoint&); >diff --git a/Source/WebKit/WebProcess/WebPage/WebPage.messages.in b/Source/WebKit/WebProcess/WebPage/WebPage.messages.in >index 3ff4e408712a47d62127d01455ec657ef2238061..15b60195234af253708f0916f2143faa4a9cb130 100644 >--- a/Source/WebKit/WebProcess/WebPage/WebPage.messages.in >+++ b/Source/WebKit/WebProcess/WebPage/WebPage.messages.in >@@ -57,6 +57,7 @@ messages -> WebPage LegacyReceiver { > CancelPotentialTap() > TapHighlightAtPosition(uint64_t requestID, WebCore::FloatPoint point) > DidRecognizeLongPress() >+ HandleDoubleTapForDoubleClickAtPoint(WebCore::IntPoint point, OptionSet<WebKit::WebEvent::Modifier> modifiers, uint64_t lastLayerTreeTransactionId) > InspectorNodeSearchMovedToPosition(WebCore::FloatPoint point) > InspectorNodeSearchEndedAtPosition(WebCore::FloatPoint point) > BlurFocusedElement() >diff --git a/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm b/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm >index d4621ea988ae83087767680990830099b64766dc..d4340e4b867d3983f4c65d304d236af95299de56 100644 >--- a/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm >+++ b/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm >@@ -720,6 +720,28 @@ void WebPage::handleTap(const IntPoint& point, OptionSet<WebEvent::Modifier> mod > handleSyntheticClick(*nodeRespondingToClick, adjustedPoint, modifiers); > } > >+void WebPage::handleDoubleTapForDoubleClickAtPoint(const IntPoint& point, OptionSet<WebEvent::Modifier> modifiers, uint64_t lastLayerTreeTransactionId) >+{ >+ FloatPoint adjustedPoint; >+ auto* nodeRespondingToDoubleClick = m_page->mainFrame().nodeRespondingToDoubleClickEvent(point, adjustedPoint); >+ if (!nodeRespondingToDoubleClick) >+ return; >+ >+ auto* frameRespondingToDoubleClick = nodeRespondingToDoubleClick->document().frame(); >+ if (!frameRespondingToDoubleClick || lastLayerTreeTransactionId < WebFrame::fromCoreFrame(*frameRespondingToDoubleClick)->firstLayerTreeTransactionIDAfterDidCommitLoad()) >+ return; >+ >+ auto shiftKey = modifiers.contains(WebEvent::Modifier::ShiftKey); >+ auto ctrlKey = modifiers.contains(WebEvent::Modifier::ControlKey); >+ auto altKey = modifiers.contains(WebEvent::Modifier::AltKey); >+ auto metaKey = modifiers.contains(WebEvent::Modifier::MetaKey); >+ auto roundedAdjustedPoint = roundedIntPoint(adjustedPoint); >+ nodeRespondingToDoubleClick->document().frame()->eventHandler().handleMousePressEvent(PlatformMouseEvent(roundedAdjustedPoint, roundedAdjustedPoint, LeftButton, PlatformEvent::MousePressed, 2, shiftKey, ctrlKey, altKey, metaKey, WallTime::now(), 0, WebCore::NoTap)); >+ if (m_isClosed) >+ return; >+ nodeRespondingToDoubleClick->document().frame()->eventHandler().handleMouseReleaseEvent(PlatformMouseEvent(roundedAdjustedPoint, roundedAdjustedPoint, LeftButton, PlatformEvent::MouseReleased, 2, shiftKey, ctrlKey, altKey, metaKey, WallTime::now(), 0, WebCore::NoTap)); >+} >+ > void WebPage::requestFocusedElementInformation(WebKit::CallbackID callbackID) > { > FocusedElementInformation info;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 197347
:
368416
|
368423
|
368424
|
368475
|
368488
|
368536