Title: [244755] trunk
Revision
244755
Author
[email protected]
Date
2019-04-29 14:31:00 -0700 (Mon, 29 Apr 2019)

Log Message

Source/WebCore:
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 Wenson Hsieh.

Tests: fast/events/touch/ios/double-tap-for-double-click1.html
       fast/events/touch/ios/double-tap-for-double-click2.html

* page/Frame.h:
* page/ios/FrameIOS.mm:
(WebCore::Frame::nodeRespondingToDoubleClickEvent):

Source/WebKit:
[iOS] 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 Wenson Hsieh.

This patch adds support for dispatching dblclick event as the result of the double tap gesture.

1. The new double tap gesture recognizer always fires regardless of what type of action the other, existing double gesture recognizers (double-tap to zoom) trigger.
2. The dblclick event is dispatched on the node with registered dblclick event handler unless the node prohibits double tap gesture (touch-action != auto).

* 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):

LayoutTests:
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 Wenson Hsieh.

* fast/events/touch/ios/double-tap-for-double-click1-expected.txt: Added.
* fast/events/touch/ios/double-tap-for-double-click1.html: Added.
* fast/events/touch/ios/double-tap-for-double-click2-expected.txt: Added.
* fast/events/touch/ios/double-tap-for-double-click2.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (244754 => 244755)


--- trunk/LayoutTests/ChangeLog	2019-04-29 21:05:33 UTC (rev 244754)
+++ trunk/LayoutTests/ChangeLog	2019-04-29 21:31:00 UTC (rev 244755)
@@ -1,3 +1,16 @@
+2019-04-29  Zalan Bujtas  <[email protected]>
+
+        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 Wenson Hsieh.
+
+        * fast/events/touch/ios/double-tap-for-double-click1-expected.txt: Added.
+        * fast/events/touch/ios/double-tap-for-double-click1.html: Added.
+        * fast/events/touch/ios/double-tap-for-double-click2-expected.txt: Added.
+        * fast/events/touch/ios/double-tap-for-double-click2.html: Added.
+
 2019-04-29  Javier Fernandez  <[email protected]>
 
         line should not be broken before the first space after a word

Added: trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click1-expected.txt (0 => 244755)


--- trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click1-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click1-expected.txt	2019-04-29 21:31:00 UTC (rev 244755)
@@ -0,0 +1,2 @@
+PASS if 'double click' text is shown below.
+[click][click][double click]

Added: trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click1.html (0 => 244755)


--- trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click1.html	                        (rev 0)
+++ trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click1.html	2019-04-29 21:31:00 UTC (rev 244755)
@@ -0,0 +1,42 @@
+<!DOCTYPE html><!-- webkit-test-runner [ useFlexibleViewport=true ] -->
+<html>
+<head>
+<meta name="viewport" content="width=device-width initial-scale=1 user-scalable=no">
+<title>This tests that we fire dblclick event on double tap</title>
+<script src=""
+<style>
+#doubleTapthis {
+    width: 400px;
+    height: 400px;
+    border: 1px solid green;
+}
+</style>
+<script>
+async function test() {
+    if (!window.testRunner || !testRunner.runUIScript)
+        return;
+
+    testRunner.waitUntilDone();
+    testRunner.dumpAsText();
+
+    await doubleTapAtPoint(doubleTapthis.offsetLeft, doubleTapthis.offsetTop);
+}
+</script>
+</head>
+<body _onload_="test()">
+<div id=doubleTapthis>PASS if 'double click' text is shown below.</div>
+<pre id=result></pre>
+<script>
+
+doubleTapthis.addEventListener("click", function( event ) {   
+    result.innerHTML = result.innerHTML + "[click]";
+}, false);
+
+doubleTapthis.addEventListener("dblclick", function( event ) {   
+    result.innerHTML = result.innerHTML + "[double click]";
+    if (window.testRunner)
+        setTimeout("testRunner.notifyDone()", 0);
+}, false);
+</script>
+</body>
+</html>

Added: trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click2-expected.txt (0 => 244755)


--- trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click2-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click2-expected.txt	2019-04-29 21:31:00 UTC (rev 244755)
@@ -0,0 +1 @@
+[double click]

Added: trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click2.html (0 => 244755)


--- trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click2.html	                        (rev 0)
+++ trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click2.html	2019-04-29 21:31:00 UTC (rev 244755)
@@ -0,0 +1,57 @@
+<!DOCTYPE html><!-- webkit-test-runner [ useFlexibleViewport=true ] -->
+<html>
+<head>
+<meta name="viewport" content="width=device-width initial-scale=1 user-scalable=no">
+<title>This tests that we fire dblclick event on double tap when the content is replaced</title>
+<script src=""
+<style>
+#doubleTapThis {
+    width: 400px;
+    height: 400px;
+    border: 1px solid green;
+}
+
+#newDoubleTapThis {
+    width: 400px;
+    height: 400px;
+    border: 1px solid green;
+}
+</style>
+<script>
+async function test() {
+    if (!window.testRunner || !testRunner.runUIScript)
+        return;
+
+    testRunner.waitUntilDone();
+    testRunner.dumpAsText();
+
+    let rect = doubleTapThis.getBoundingClientRect();
+    let x = rect.left + rect.width / 2;
+    let y = rect.top + rect.height / 2;
+
+    await doubleTapAtPoint(x, y);
+}
+</script>
+</head>
+<body _onload_="test()">
+<div id=doubleTapThis>PASS if 'double click' text is shown below.</div>
+<pre id=result></pre>
+<script>
+
+doubleTapThis.addEventListener('click', function (e) {
+    doubleTapThis.remove();
+
+    let newDoubleTapThis = document.createElement("div");
+    newDoubleTapThis.id="newDoubleTapThis";
+    document.body.insertBefore(newDoubleTapThis, result);
+
+    newDoubleTapThis.addEventListener('dblclick', function (e) {
+        result.innerHTML = result.innerHTML + "[double click]";
+        if (window.testRunner)
+            setTimeout("testRunner.notifyDone()", 0);
+    });
+});
+
+</script>
+</body>
+</html>

Added: trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click3-expected.txt (0 => 244755)


--- trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click3-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click3-expected.txt	2019-04-29 21:31:00 UTC (rev 244755)
@@ -0,0 +1,2 @@
+PASS if 'double click' text is NOT shown below.
+[click][click]

Added: trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click3.html (0 => 244755)


--- trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click3.html	                        (rev 0)
+++ trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click3.html	2019-04-29 21:31:00 UTC (rev 244755)
@@ -0,0 +1,54 @@
+<!DOCTYPE html><!-- webkit-test-runner [ useFlexibleViewport=true ] -->
+<html>
+<head>
+<meta name="viewport" content="width=device-width initial-scale=1 user-scalable=no">
+<title>This tests that we do not fire dblclick event on double tap on node with touch-action: none</title>
+<script src=""
+<style>
+#doubleTapthis {
+    width: 400px;
+    height: 400px;
+    border: 1px solid green;
+    touch-action: none;
+}
+#finishTest {
+    width: 10px;
+    height: 10px;
+    border: 1px solid green;
+}
+</style>
+<script>
+async function test() {
+    if (!window.testRunner || !testRunner.runUIScript)
+        return;
+
+    testRunner.waitUntilDone();
+    testRunner.dumpAsText();
+
+    await doubleTapAtPoint(doubleTapthis.offsetLeft, doubleTapthis.offsetTop);
+
+    await doubleTapAtPoint(finishTest.offsetLeft, finishTest.offsetTop);
+}
+</script>
+</head>
+<body _onload_="test()">
+<div id=doubleTapthis>PASS if 'double click' text is NOT shown below.</div>
+<div id=finishTest></div>
+<pre id=result></pre>
+<script>
+
+doubleTapthis.addEventListener("click", function( event ) {   
+    result.innerHTML = result.innerHTML + "[click]";
+}, false);
+
+doubleTapthis.addEventListener("dblclick", function( event ) {   
+    result.innerHTML = result.innerHTML + "[double click]";
+}, false);
+
+finishTest.addEventListener("dblclick", function( event ) {   
+    if (window.testRunner)
+        setTimeout("testRunner.notifyDone()", 0);
+}, false);
+</script>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (244754 => 244755)


--- trunk/Source/WebCore/ChangeLog	2019-04-29 21:05:33 UTC (rev 244754)
+++ trunk/Source/WebCore/ChangeLog	2019-04-29 21:31:00 UTC (rev 244755)
@@ -1,3 +1,18 @@
+2019-04-29  Zalan Bujtas  <[email protected]>
+
+        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 Wenson Hsieh.
+
+        Tests: fast/events/touch/ios/double-tap-for-double-click1.html
+               fast/events/touch/ios/double-tap-for-double-click2.html
+
+        * page/Frame.h:
+        * page/ios/FrameIOS.mm:
+        (WebCore::Frame::nodeRespondingToDoubleClickEvent):
+
 2019-04-29  Youenn Fablet  <[email protected]>
 
         getDisplayMedia should be called on user gesture

Modified: trunk/Source/WebCore/page/Frame.h (244754 => 244755)


--- trunk/Source/WebCore/page/Frame.h	2019-04-29 21:05:33 UTC (rev 244754)
+++ trunk/Source/WebCore/page/Frame.h	2019-04-29 21:31:00 UTC (rev 244755)
@@ -219,6 +219,7 @@
 
     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;

Modified: trunk/Source/WebCore/page/ios/FrameIOS.mm (244754 => 244755)


--- trunk/Source/WebCore/page/ios/FrameIOS.mm	2019-04-29 21:05:33 UTC (rev 244754)
+++ trunk/Source/WebCore/page/ios/FrameIOS.mm	2019-04-29 21:31:00 UTC (rev 244755)
@@ -418,6 +418,33 @@
     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* {

Modified: trunk/Source/WebKit/ChangeLog (244754 => 244755)


--- trunk/Source/WebKit/ChangeLog	2019-04-29 21:05:33 UTC (rev 244754)
+++ trunk/Source/WebKit/ChangeLog	2019-04-29 21:31:00 UTC (rev 244755)
@@ -1,3 +1,33 @@
+2019-04-29  Zalan Bujtas  <[email protected]>
+
+        [iOS] 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 Wenson Hsieh.
+
+        This patch adds support for dispatching dblclick event as the result of the double tap gesture.
+
+        1. The new double tap gesture recognizer always fires regardless of what type of action the other, existing double gesture recognizers (double-tap to zoom) trigger.
+        2. The dblclick event is dispatched on the node with registered dblclick event handler unless the node prohibits double tap gesture (touch-action != auto).
+
+        * 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-29  Tim Horton  <[email protected]>
 
         REGRESSION (r244142): Fandango accounts tab crashes under Color()

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (244754 => 244755)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.h	2019-04-29 21:05:33 UTC (rev 244754)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h	2019-04-29 21:31:00 UTC (rev 244755)
@@ -1210,6 +1210,7 @@
     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&);

Modified: trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h (244754 => 244755)


--- trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h	2019-04-29 21:05:33 UTC (rev 244754)
+++ trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h	2019-04-29 21:31:00 UTC (rev 244755)
@@ -221,6 +221,7 @@
     RetainPtr<UILongPressGestureRecognizer> _longPressGestureRecognizer;
     RetainPtr<WKSyntheticTapGestureRecognizer> _doubleTapGestureRecognizer;
     RetainPtr<UITapGestureRecognizer> _nonBlockingDoubleTapGestureRecognizer;
+    RetainPtr<UITapGestureRecognizer> _doubleTapGestureRecognizerForDoubleClick;
     RetainPtr<UITapGestureRecognizer> _twoFingerDoubleTapGestureRecognizer;
     RetainPtr<UITapGestureRecognizer> _twoFingerSingleTapGestureRecognizer;
     RetainPtr<UITapGestureRecognizer> _stylusSingleTapGestureRecognizer;

Modified: trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm (244754 => 244755)


--- trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm	2019-04-29 21:05:33 UTC (rev 244754)
+++ trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm	2019-04-29 21:31:00 UTC (rev 244755)
@@ -734,6 +734,12 @@
     [_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 @@
     [_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 @@
     [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 @@
     [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 @@
     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 @@
     if (gestureRecognizer == _highlightLongPressGestureRecognizer
         || gestureRecognizer == _doubleTapGestureRecognizer
         || gestureRecognizer == _nonBlockingDoubleTapGestureRecognizer
+        || gestureRecognizer == _doubleTapGestureRecognizerForDoubleClick
         || gestureRecognizer == _twoFingerDoubleTapGestureRecognizer) {
 
         if (hasFocusedElement(_focusedElementInformation)) {
@@ -2377,6 +2395,11 @@
     _isDoubleTapPending = YES;
 }
 
+- (void)_doubleTapRecognizedForDoubleClick:(UITapGestureRecognizer *)gestureRecognizer
+{
+    _page->handleDoubleTapForDoubleClickAtPoint(WebCore::IntPoint(gestureRecognizer.location), WebKit::webEventModifierFlags(gestureRecognizerModifierFlags(gestureRecognizer)), _layerTreeTransactionIdAtLastTouchStart);
+}
+
 - (void)_twoFingerDoubleTapRecognized:(UITapGestureRecognizer *)gestureRecognizer
 {
     [self _resetIsDoubleTapPending];

Modified: trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm (244754 => 244755)


--- trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm	2019-04-29 21:05:33 UTC (rev 244754)
+++ trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm	2019-04-29 21:31:00 UTC (rev 244755)
@@ -867,6 +867,11 @@
     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);

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (244754 => 244755)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2019-04-29 21:05:33 UTC (rev 244754)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2019-04-29 21:31:00 UTC (rev 244755)
@@ -622,6 +622,7 @@
     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&);

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in (244754 => 244755)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in	2019-04-29 21:05:33 UTC (rev 244754)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in	2019-04-29 21:31:00 UTC (rev 244755)
@@ -57,6 +57,7 @@
     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()

Modified: trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm (244754 => 244755)


--- trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm	2019-04-29 21:05:33 UTC (rev 244754)
+++ trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm	2019-04-29 21:31:00 UTC (rev 244755)
@@ -722,6 +722,28 @@
         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;
+
+    bool shiftKey = modifiers.contains(WebEvent::Modifier::ShiftKey);
+    bool ctrlKey = modifiers.contains(WebEvent::Modifier::ControlKey);
+    bool altKey = modifiers.contains(WebEvent::Modifier::AltKey);
+    bool 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;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to