<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[206282] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/206282">206282</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2016-09-22 16:53:33 -0700 (Thu, 22 Sep 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Add long press selection test
https://bugs.webkit.org/show_bug.cgi?id=162367

Patch by Megan Gardner &lt;megan_gardner@apple.com&gt; on 2016-09-22
Reviewed by Simon Fraser.

Tools:

Add support to UIScriptController to synthesize long press events on iOS.
This required adding long-press functionality to HIDEventGenerator.

HIDEventGenerator sends the touchDown, but must then send the touchUp with
a dispatch_after (rather than sleeping, as we do for other events) in order
for the gesture recognizers to correctly detect a long press.

Use the long press synthesis in a test that detects whether a long press
gesture triggers text selection.

Fixed incorrect constants. NSTimeInterval is in seconds, original numbers
were nanoseconds and typedefed to long without regard to the type
differences. Redid constants to be the right value, and converted upon use.

Cleaned up unused enum types.

* DumpRenderTree/ios/UIScriptControllerIOS.mm:
(WTR::UIScriptController::longPressAtPoint):
(WTR::UIScriptController::forcePressAtPoint):
(WTR::UIScriptController::dragFromPointToPoint): Deleted.
* Scripts/webkitpy/common/config/contributors.json:
* TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
* TestRunnerShared/UIScriptContext/UIScriptController.cpp:
(WTR::UIScriptController::longPressAtPoint):
(WTR::UIScriptController::forcePressAtPoint):
(WTR::UIScriptController::dragFromPointToPoint): Deleted.
* TestRunnerShared/UIScriptContext/UIScriptController.h:
* WebKitTestRunner/ios/HIDEventGenerator.h:
* WebKitTestRunner/ios/HIDEventGenerator.mm:
(-[HIDEventGenerator _createIOHIDEventType:]):
(-[HIDEventGenerator sendTaps:location:withNumberOfTouches:completionBlock:]):
(-[HIDEventGenerator clearTap:]):
(-[HIDEventGenerator longPressTimerCall:]):
(-[HIDEventGenerator longPressFinish:completionBlock:]):
(-[HIDEventGenerator longPress:completionBlock:]):
(-[HIDEventGenerator forcePress:completionBlock:]):
* WebKitTestRunner/ios/UIScriptControllerIOS.mm:
(WTR::UIScriptController::longPressAtPoint):
(WTR::UIScriptController::forcePressAtPoint):
(WTR::UIScriptController::dragFromPointToPoint): Deleted.

LayoutTests:

Added test for long press selection.

* fast/events/touch/ios/long-press-to-select-text-expected.txt: Added.
* fast/events/touch/ios/long-press-to-select-text.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsDumpRenderTreeiosUIScriptControllerIOSmm">trunk/Tools/DumpRenderTree/ios/UIScriptControllerIOS.mm</a></li>
<li><a href="#trunkToolsTestRunnerSharedUIScriptContextBindingsUIScriptControlleridl">trunk/Tools/TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl</a></li>
<li><a href="#trunkToolsTestRunnerSharedUIScriptContextUIScriptControllercpp">trunk/Tools/TestRunnerShared/UIScriptContext/UIScriptController.cpp</a></li>
<li><a href="#trunkToolsTestRunnerSharedUIScriptContextUIScriptControllerh">trunk/Tools/TestRunnerShared/UIScriptContext/UIScriptController.h</a></li>
<li><a href="#trunkToolsWebKitTestRunneriosHIDEventGeneratorh">trunk/Tools/WebKitTestRunner/ios/HIDEventGenerator.h</a></li>
<li><a href="#trunkToolsWebKitTestRunneriosHIDEventGeneratormm">trunk/Tools/WebKitTestRunner/ios/HIDEventGenerator.mm</a></li>
<li><a href="#trunkToolsWebKitTestRunneriosUIScriptControllerIOSmm">trunk/Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfasteventstouchioslongpresstoselecttextexpectedtxt">trunk/LayoutTests/fast/events/touch/ios/long-press-to-select-text-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfasteventstouchioslongpresstoselecttexthtml">trunk/LayoutTests/fast/events/touch/ios/long-press-to-select-text.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (206281 => 206282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-09-22 23:41:56 UTC (rev 206281)
+++ trunk/LayoutTests/ChangeLog        2016-09-22 23:53:33 UTC (rev 206282)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2016-09-22  Megan Gardner  &lt;megan_gardner@apple.com&gt;
+
+        Add long press selection test
+        https://bugs.webkit.org/show_bug.cgi?id=162367
+
+        Reviewed by Simon Fraser.
+
+        Added test for long press selection.
+
+        * fast/events/touch/ios/long-press-to-select-text-expected.txt: Added.
+        * fast/events/touch/ios/long-press-to-select-text.html: Added.
+
</ins><span class="cx"> 2016-09-22  Brady Eidson  &lt;beidson@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         IDBIndex.openCursor() matches indices on multiple object stores.
</span></span></pre></div>
<a id="trunkLayoutTestsfasteventstouchioslongpresstoselecttextexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/events/touch/ios/long-press-to-select-text-expected.txt (0 => 206282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/events/touch/ios/long-press-to-select-text-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/events/touch/ios/long-press-to-select-text-expected.txt        2016-09-22 23:53:33 UTC (rev 206282)
</span><span class="lines">@@ -0,0 +1,2 @@
</span><ins>+PASS: successfully selected the word PressMe
+Done
</ins></span></pre></div>
<a id="trunkLayoutTestsfasteventstouchioslongpresstoselecttexthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/events/touch/ios/long-press-to-select-text.html (0 => 206282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/events/touch/ios/long-press-to-select-text.html                                (rev 0)
+++ trunk/LayoutTests/fast/events/touch/ios/long-press-to-select-text.html        2016-09-22 23:53:33 UTC (rev 206282)
</span><span class="lines">@@ -0,0 +1,63 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+
+&lt;html&gt;
+&lt;head&gt;
+    &lt;script&gt;
+        if (window.testRunner) {
+            testRunner.dumpAsText();
+            testRunner.waitUntilDone();
+        }
+
+        function getUIScript()
+        {
+            return `
+            (function() {
+                uiController.longPressAtPoint(30, 20, function() {
+                    uiController.uiScriptComplete(&quot;Done&quot;);
+                });
+            })();`
+        }
+
+        function runTest()
+        {
+            if (!testRunner.runUIScript)
+                return;
+
+            var output = '';
+            var target = document.getElementById('target');
+            target.addEventListener('touchend', function(event) {
+                output += 'PASS: successfully selected the word ';
+            });
+            if (testRunner.runUIScript) {
+                testRunner.runUIScript(getUIScript(), function(result) {
+                    var selectionText = document.getSelection().toString();
+                    if (selectionText !== &quot;&quot;)
+                        output += selectionText;
+                    else
+                        output += 'FAIL: failed to select a word as a result of a long press';
+                    output += '&lt;br&gt;';
+                    output += result;
+                    document.getElementById('target').innerHTML = output;
+                    testRunner.notifyDone();
+                });
+            }
+        }
+
+        window.addEventListener('load', runTest, false);
+    &lt;/script&gt;
+    &lt;style&gt;
+        #target {
+            height: 100px;
+            width: 200px;
+            background-color: silver;
+        }
+    &lt;/style&gt;
+    &lt;meta name=&quot;viewport&quot; content=&quot;initial-scale=1&quot;&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;div id=&quot;target&quot;&gt;
+        &lt;p&gt;PressMe&lt;/p&gt;
+    This test requires UIScriptController to run.
+&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (206281 => 206282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2016-09-22 23:41:56 UTC (rev 206281)
+++ trunk/Tools/ChangeLog        2016-09-22 23:53:33 UTC (rev 206282)
</span><span class="lines">@@ -1,3 +1,51 @@
</span><ins>+2016-09-22  Megan Gardner  &lt;megan_gardner@apple.com&gt;
+
+        Add long press selection test
+        https://bugs.webkit.org/show_bug.cgi?id=162367
+
+        Reviewed by Simon Fraser.
+
+        Add support to UIScriptController to synthesize long press events on iOS.
+        This required adding long-press functionality to HIDEventGenerator.
+
+        HIDEventGenerator sends the touchDown, but must then send the touchUp with
+        a dispatch_after (rather than sleeping, as we do for other events) in order
+        for the gesture recognizers to correctly detect a long press.
+
+        Use the long press synthesis in a test that detects whether a long press
+        gesture triggers text selection.
+
+        Fixed incorrect constants. NSTimeInterval is in seconds, original numbers
+        were nanoseconds and typedefed to long without regard to the type
+        differences. Redid constants to be the right value, and converted upon use.
+
+        Cleaned up unused enum types.
+
+        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
+        (WTR::UIScriptController::longPressAtPoint):
+        (WTR::UIScriptController::forcePressAtPoint):
+        (WTR::UIScriptController::dragFromPointToPoint): Deleted.
+        * Scripts/webkitpy/common/config/contributors.json:
+        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
+        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
+        (WTR::UIScriptController::longPressAtPoint):
+        (WTR::UIScriptController::forcePressAtPoint):
+        (WTR::UIScriptController::dragFromPointToPoint): Deleted.
+        * TestRunnerShared/UIScriptContext/UIScriptController.h:
+        * WebKitTestRunner/ios/HIDEventGenerator.h:
+        * WebKitTestRunner/ios/HIDEventGenerator.mm:
+        (-[HIDEventGenerator _createIOHIDEventType:]):
+        (-[HIDEventGenerator sendTaps:location:withNumberOfTouches:completionBlock:]):
+        (-[HIDEventGenerator clearTap:]):
+        (-[HIDEventGenerator longPressTimerCall:]):
+        (-[HIDEventGenerator longPressFinish:completionBlock:]):
+        (-[HIDEventGenerator longPress:completionBlock:]):
+        (-[HIDEventGenerator forcePress:completionBlock:]):
+        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
+        (WTR::UIScriptController::longPressAtPoint):
+        (WTR::UIScriptController::forcePressAtPoint):
+        (WTR::UIScriptController::dragFromPointToPoint): Deleted.
+
</ins><span class="cx"> 2016-09-22  Jonathan Bedard  &lt;jbedard@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Automatic Text Replacement Testing in WebKit2
</span></span></pre></div>
<a id="trunkToolsDumpRenderTreeiosUIScriptControllerIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/DumpRenderTree/ios/UIScriptControllerIOS.mm (206281 => 206282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/DumpRenderTree/ios/UIScriptControllerIOS.mm        2016-09-22 23:41:56 UTC (rev 206281)
+++ trunk/Tools/DumpRenderTree/ios/UIScriptControllerIOS.mm        2016-09-22 23:53:33 UTC (rev 206282)
</span><span class="lines">@@ -87,6 +87,10 @@
</span><span class="cx"> void UIScriptController::dragFromPointToPoint(long startX, long startY, long endX, long endY, double durationSeconds, JSValueRef callback)
</span><span class="cx"> {
</span><span class="cx"> }
</span><ins>+    
+void UIScriptController::longPressAtPoint(long x, long y, JSValueRef)
+{
+}
</ins><span class="cx"> 
</span><span class="cx"> void UIScriptController::stylusDownAtPoint(long x, long y, float azimuthAngle, float altitudeAngle, float pressure, JSValueRef callback)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkToolsTestRunnerSharedUIScriptContextBindingsUIScriptControlleridl"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl (206281 => 206282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl        2016-09-22 23:41:56 UTC (rev 206281)
+++ trunk/Tools/TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl        2016-09-22 23:53:33 UTC (rev 206282)
</span><span class="lines">@@ -38,6 +38,8 @@
</span><span class="cx">     void doubleTapAtPoint(long x, long y, object callback);
</span><span class="cx">     void dragFromPointToPoint(long startX, long startY, long endX, long endY, double durationSeconds, object callback);
</span><span class="cx"> 
</span><ins>+    void longPressAtPoint(long x, long y, object callback);
+
</ins><span class="cx">     void stylusDownAtPoint(long x, long y, float azimuthAngle, float altitudeAngle, float pressure, object callback);
</span><span class="cx">     void stylusMoveToPoint(long x, long y, float azimuthAngle, float altitudeAngle, float pressure, object callback);
</span><span class="cx">     void stylusUpAtPoint(long x, long y, object callback);
</span></span></pre></div>
<a id="trunkToolsTestRunnerSharedUIScriptContextUIScriptControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestRunnerShared/UIScriptContext/UIScriptController.cpp (206281 => 206282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestRunnerShared/UIScriptContext/UIScriptController.cpp        2016-09-22 23:41:56 UTC (rev 206281)
+++ trunk/Tools/TestRunnerShared/UIScriptContext/UIScriptController.cpp        2016-09-22 23:53:33 UTC (rev 206282)
</span><span class="lines">@@ -159,6 +159,10 @@
</span><span class="cx"> void UIScriptController::dragFromPointToPoint(long startX, long startY, long endX, long endY, double durationSeconds, JSValueRef callback)
</span><span class="cx"> {
</span><span class="cx"> }
</span><ins>+    
+void UIScriptController::longPressAtPoint(long x, long y, JSValueRef)
+{
+}
</ins><span class="cx"> 
</span><span class="cx"> void UIScriptController::stylusDownAtPoint(long x, long y, float azimuthAngle, float altitudeAngle, float pressure, JSValueRef callback)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkToolsTestRunnerSharedUIScriptContextUIScriptControllerh"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestRunnerShared/UIScriptContext/UIScriptController.h (206281 => 206282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestRunnerShared/UIScriptContext/UIScriptController.h        2016-09-22 23:41:56 UTC (rev 206281)
+++ trunk/Tools/TestRunnerShared/UIScriptContext/UIScriptController.h        2016-09-22 23:53:33 UTC (rev 206282)
</span><span class="lines">@@ -62,6 +62,8 @@
</span><span class="cx">     void stylusUpAtPoint(long x, long y, JSValueRef callback);
</span><span class="cx">     void stylusTapAtPoint(long x, long y, float azimuthAngle, float altitudeAngle, float pressure, JSValueRef callback);
</span><span class="cx"> 
</span><ins>+    void longPressAtPoint(long x, long y, JSValueRef callback);
+    
</ins><span class="cx">     void typeCharacterUsingHardwareKeyboard(JSStringRef character, JSValueRef callback);
</span><span class="cx">     void keyDownUsingHardwareKeyboard(JSStringRef character, JSValueRef callback);
</span><span class="cx">     void keyUpUsingHardwareKeyboard(JSStringRef character, JSValueRef callback);
</span></span></pre></div>
<a id="trunkToolsWebKitTestRunneriosHIDEventGeneratorh"></a>
<div class="modfile"><h4>Modified: trunk/Tools/WebKitTestRunner/ios/HIDEventGenerator.h (206281 => 206282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebKitTestRunner/ios/HIDEventGenerator.h        2016-09-22 23:41:56 UTC (rev 206281)
+++ trunk/Tools/WebKitTestRunner/ios/HIDEventGenerator.h        2016-09-22 23:53:33 UTC (rev 206282)
</span><span class="lines">@@ -46,6 +46,9 @@
</span><span class="cx"> - (void)doubleTap:(CGPoint)location completionBlock:(void (^)(void))completionBlock;
</span><span class="cx"> - (void)twoFingerTap:(CGPoint)location completionBlock:(void (^)(void))completionBlock;
</span><span class="cx"> 
</span><ins>+// Long Press
+- (void)longPress:(CGPoint)location completionBlock:(void (^)(void))completionBlock;
+
</ins><span class="cx"> // Drags
</span><span class="cx"> - (void)dragWithStartPoint:(CGPoint)startLocation endPoint:(CGPoint)endLocation duration:(double)seconds completionBlock:(void (^)(void))completionBlock;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkToolsWebKitTestRunneriosHIDEventGeneratormm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/WebKitTestRunner/ios/HIDEventGenerator.mm (206281 => 206282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebKitTestRunner/ios/HIDEventGenerator.mm        2016-09-22 23:41:56 UTC (rev 206281)
+++ trunk/Tools/WebKitTestRunner/ios/HIDEventGenerator.mm        2016-09-22 23:53:33 UTC (rev 206282)
</span><span class="lines">@@ -31,14 +31,16 @@
</span><span class="cx"> #import &lt;WebCore/SoftLinking.h&gt;
</span><span class="cx"> #import &lt;mach/mach_time.h&gt;
</span><span class="cx"> #import &lt;wtf/Assertions.h&gt;
</span><ins>+#import &lt;wtf/BlockPtr.h&gt;
</ins><span class="cx"> #import &lt;wtf/RetainPtr.h&gt;
</span><span class="cx"> 
</span><span class="cx"> SOFT_LINK_PRIVATE_FRAMEWORK(BackBoardServices)
</span><span class="cx"> SOFT_LINK(BackBoardServices, BKSHIDEventSetDigitizerInfo, void, (IOHIDEventRef digitizerEvent, uint32_t contextID, uint8_t systemGestureisPossible, uint8_t isSystemGestureStateChangeEvent, CFStringRef displayUUID, CFTimeInterval initialTouchTimestamp, float maxForce), (digitizerEvent, contextID, systemGestureisPossible, isSystemGestureStateChangeEvent, displayUUID, initialTouchTimestamp, maxForce));
</span><span class="cx"> 
</span><del>-static const NSTimeInterval fingerLiftDelay = 5e7;
-static const NSTimeInterval multiTapInterval = 15e7;
</del><ins>+static const NSTimeInterval fingerLiftDelay = 0.05;
+static const NSTimeInterval multiTapInterval = 0.15;
</ins><span class="cx"> static const NSTimeInterval fingerMoveInterval = 0.016;
</span><ins>+static const NSTimeInterval longPressHoldDelay = 2.0;
</ins><span class="cx"> static const IOHIDFloat defaultMajorRadius = 5;
</span><span class="cx"> static const IOHIDFloat defaultPathPressure = 0;
</span><span class="cx"> static const NSUInteger maxTouchCount = 5;
</span><span class="lines">@@ -53,8 +55,6 @@
</span><span class="cx">     HandEventChordChanged,
</span><span class="cx">     HandEventLifted,
</span><span class="cx">     HandEventCanceled,
</span><del>-    HandEventInRange,
-    HandEventInRangeLift,
</del><span class="cx">     StylusEventTouched,
</span><span class="cx">     StylusEventMoved,
</span><span class="cx">     StylusEventLifted,
</span><span class="lines">@@ -158,10 +158,8 @@
</span><span class="cx">     } else if (eventType == HandEventChordChanged) {
</span><span class="cx">         eventMask |= kIOHIDDigitizerEventPosition;
</span><span class="cx">         eventMask |= kIOHIDDigitizerEventAttribute;
</span><del>-    } else if (eventType == HandEventTouched  || eventType == HandEventCanceled) {
</del><ins>+    } else if (eventType == HandEventTouched || eventType == HandEventCanceled || eventType == HandEventLifted)
</ins><span class="cx">         eventMask |= kIOHIDDigitizerEventIdentity;
</span><del>-    } else if (eventType == HandEventLifted)
-        eventMask |= kIOHIDDigitizerEventIdentity;
</del><span class="cx"> 
</span><span class="cx">     uint64_t machTime = mach_absolute_time();
</span><span class="cx">     RetainPtr&lt;IOHIDEventRef&gt; eventRef = adoptCF(IOHIDEventCreateDigitizerEvent(kCFAllocatorDefault, machTime,
</span><span class="lines">@@ -494,7 +492,7 @@
</span><span class="cx"> 
</span><span class="cx"> - (void)stylusTapAtPoint:(CGPoint)location azimuthAngle:(CGFloat)azimuthAngle altitudeAngle:(CGFloat)altitudeAngle pressure:(CGFloat)pressure completionBlock:(void (^)(void))completionBlock
</span><span class="cx"> {
</span><del>-    struct timespec pressDelay = { 0, static_cast&lt;long&gt;(fingerLiftDelay) };
</del><ins>+    struct timespec pressDelay = { 0, static_cast&lt;long&gt;(fingerLiftDelay * nanosecondsPerSecond) };
</ins><span class="cx"> 
</span><span class="cx">     [self stylusDownAtPoint:location azimuthAngle:azimuthAngle altitudeAngle:altitudeAngle pressure:pressure];
</span><span class="cx">     nanosleep(&amp;pressDelay, 0);
</span><span class="lines">@@ -505,8 +503,8 @@
</span><span class="cx"> 
</span><span class="cx"> - (void)sendTaps:(int)tapCount location:(CGPoint)location withNumberOfTouches:(int)touchCount completionBlock:(void (^)(void))completionBlock
</span><span class="cx"> {
</span><del>-    struct timespec doubleDelay = { 0, static_cast&lt;long&gt;(multiTapInterval) };
-    struct timespec pressDelay = { 0, static_cast&lt;long&gt;(fingerLiftDelay) };
</del><ins>+    struct timespec doubleDelay = { 0, static_cast&lt;long&gt;(multiTapInterval * nanosecondsPerSecond) };
+    struct timespec pressDelay = { 0, static_cast&lt;long&gt;(fingerLiftDelay * nanosecondsPerSecond) };
</ins><span class="cx"> 
</span><span class="cx">     for (int i = 0; i &lt; tapCount; i++) {
</span><span class="cx">         [self touchDown:location touchCount:touchCount];
</span><span class="lines">@@ -534,6 +532,17 @@
</span><span class="cx">     [self sendTaps:1 location:location withNumberOfTouches:2 completionBlock:completionBlock];
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+- (void)longPress:(CGPoint)location completionBlock:(void (^)(void))completionBlock
+{
+    [self touchDown:location touchCount:1];
+    auto completionBlockCopy = makeBlockPtr(completionBlock);
+
+    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, longPressHoldDelay * nanosecondsPerSecond), dispatch_get_main_queue(), ^ {
+        [self liftUp:location];
+        [self _sendMarkerHIDEventWithCompletionBlock:completionBlockCopy.get()];
+    });
+}
+
</ins><span class="cx"> - (void)dragWithStartPoint:(CGPoint)startLocation endPoint:(CGPoint)endLocation duration:(double)seconds completionBlock:(void (^)(void))completionBlock
</span><span class="cx"> {
</span><span class="cx">     [self touchDown:startLocation touchCount:1];
</span></span></pre></div>
<a id="trunkToolsWebKitTestRunneriosUIScriptControllerIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm (206281 => 206282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm        2016-09-22 23:41:56 UTC (rev 206281)
+++ trunk/Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm        2016-09-22 23:53:33 UTC (rev 206282)
</span><span class="lines">@@ -187,6 +187,17 @@
</span><span class="cx">         m_context-&gt;asyncTaskComplete(callbackID);
</span><span class="cx">     }];
</span><span class="cx"> }
</span><ins>+    
+void UIScriptController::longPressAtPoint(long x, long y, JSValueRef callback)
+{
+    unsigned callbackID = m_context-&gt;prepareForAsyncTask(callback, CallbackTypeNonPersistent);
+    
+    [[HIDEventGenerator sharedHIDEventGenerator] longPress:globalToContentCoordinates(TestController::singleton().mainWebView()-&gt;platformView(), x, y) completionBlock:^{
+        if (!m_context)
+            return;
+        m_context-&gt;asyncTaskComplete(callbackID);
+    }];
+}
</ins><span class="cx"> 
</span><span class="cx"> void UIScriptController::typeCharacterUsingHardwareKeyboard(JSStringRef character, JSValueRef callback)
</span><span class="cx"> {
</span></span></pre>
</div>
</div>

</body>
</html>