Diff
Modified: trunk/LayoutTests/ChangeLog (244774 => 244775)
--- trunk/LayoutTests/ChangeLog 2019-04-30 15:17:07 UTC (rev 244774)
+++ trunk/LayoutTests/ChangeLog 2019-04-30 16:07:48 UTC (rev 244775)
@@ -1,3 +1,16 @@
+2019-04-30 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-30 Youenn Fablet <[email protected]>
Reject/throw when calling AudioContext methods on a stopped AudioContext
Added: trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click1-expected.txt (0 => 244775)
--- 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-30 16:07:48 UTC (rev 244775)
@@ -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 => 244775)
--- 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-30 16:07:48 UTC (rev 244775)
@@ -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 => 244775)
--- 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-30 16:07:48 UTC (rev 244775)
@@ -0,0 +1 @@
+[double click]
Added: trunk/LayoutTests/fast/events/touch/ios/double-tap-for-double-click2.html (0 => 244775)
--- 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-30 16:07:48 UTC (rev 244775)
@@ -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 => 244775)
--- 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-30 16:07:48 UTC (rev 244775)
@@ -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 => 244775)
--- 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-30 16:07:48 UTC (rev 244775)
@@ -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 (244774 => 244775)
--- trunk/Source/WebCore/ChangeLog 2019-04-30 15:17:07 UTC (rev 244774)
+++ trunk/Source/WebCore/ChangeLog 2019-04-30 16:07:48 UTC (rev 244775)
@@ -1,3 +1,18 @@
+2019-04-30 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-30 Youenn Fablet <[email protected]>
Reject/throw when calling AudioContext methods on a stopped AudioContext
Modified: trunk/Source/WebCore/page/Frame.h (244774 => 244775)
--- trunk/Source/WebCore/page/Frame.h 2019-04-30 15:17:07 UTC (rev 244774)
+++ trunk/Source/WebCore/page/Frame.h 2019-04-30 16:07:48 UTC (rev 244775)
@@ -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 (244774 => 244775)
--- trunk/Source/WebCore/page/ios/FrameIOS.mm 2019-04-30 15:17:07 UTC (rev 244774)
+++ trunk/Source/WebCore/page/ios/FrameIOS.mm 2019-04-30 16:07:48 UTC (rev 244775)
@@ -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 (244774 => 244775)
--- trunk/Source/WebKit/ChangeLog 2019-04-30 15:17:07 UTC (rev 244774)
+++ trunk/Source/WebKit/ChangeLog 2019-04-30 16:07:48 UTC (rev 244775)
@@ -1,3 +1,33 @@
+2019-04-30 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-30 Antti Koivisto <[email protected]>
Tighten type of ScrollingTree:rootNode() to ScrollingTreeFrameScrollingNode
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (244774 => 244775)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.h 2019-04-30 15:17:07 UTC (rev 244774)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h 2019-04-30 16:07:48 UTC (rev 244775)
@@ -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 (244774 => 244775)
--- trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h 2019-04-30 15:17:07 UTC (rev 244774)
+++ trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h 2019-04-30 16:07:48 UTC (rev 244775)
@@ -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 (244774 => 244775)
--- trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm 2019-04-30 15:17:07 UTC (rev 244774)
+++ trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm 2019-04-30 16:07:48 UTC (rev 244775)
@@ -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,15 @@
if (isSamePair(gestureRecognizer, otherGestureRecognizer, _highlightLongPressGestureRecognizer.get(), _nonBlockingDoubleTapGestureRecognizer.get()))
return YES;
+ if (isSamePair(gestureRecognizer, otherGestureRecognizer, _singleTapGestureRecognizer.get(), _doubleTapGestureRecognizerForDoubleClick.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 +1995,7 @@
if (gestureRecognizer == _highlightLongPressGestureRecognizer
|| gestureRecognizer == _doubleTapGestureRecognizer
|| gestureRecognizer == _nonBlockingDoubleTapGestureRecognizer
+ || gestureRecognizer == _doubleTapGestureRecognizerForDoubleClick
|| gestureRecognizer == _twoFingerDoubleTapGestureRecognizer) {
if (hasFocusedElement(_focusedElementInformation)) {
@@ -2377,6 +2398,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 (244774 => 244775)
--- trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm 2019-04-30 15:17:07 UTC (rev 244774)
+++ trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm 2019-04-30 16:07:48 UTC (rev 244775)
@@ -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 (244774 => 244775)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2019-04-30 15:17:07 UTC (rev 244774)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2019-04-30 16:07:48 UTC (rev 244775)
@@ -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 (244774 => 244775)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in 2019-04-30 15:17:07 UTC (rev 244774)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in 2019-04-30 16:07:48 UTC (rev 244775)
@@ -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 (244774 => 244775)
--- trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm 2019-04-30 15:17:07 UTC (rev 244774)
+++ trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm 2019-04-30 16:07:48 UTC (rev 244775)
@@ -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;