<!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>[214586] 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/214586">214586</a></dd>
<dt>Author</dt> <dd>timothy_horton@apple.com</dd>
<dt>Date</dt> <dd>2017-03-29 18:05:58 -0700 (Wed, 29 Mar 2017)</dd>
</dl>
<h3>Log Message</h3>
<pre>Swipe gesture tests don't work on macOS Sierra
https://bugs.webkit.org/show_bug.cgi?id=161675
<rdar://problem/23379930>
Reviewed by Darin Adler.
Tools:
* DumpRenderTree/mac/UIScriptControllerMac.mm:
(WTR::UIScriptController::platformPlayBackEventStream):
(WTR::UIScriptController::beginBackSwipe):
(WTR::UIScriptController::completeBackSwipe):
* TestRunnerShared/EventSerialization/mac/EventSerializerMac.h: Copied from Tools/DumpRenderTree/mac/UIScriptControllerMac.mm.
* TestRunnerShared/EventSerialization/mac/EventSerializerMac.mm: Added.
(eventIsOfType):
(eventIsOfTypes):
(eventIsOfGestureType):
(eventIsOfGestureTypes):
(+[EventSerializer dictionaryForEvent:relativeToTime:]):
(+[EventSerializer createEventForDictionary:inWindow:relativeToTime:]):
(+[EventSerializer playEventStream:inWindow:completionHandler:]):
* TestRunnerShared/EventSerialization/mac/SharedEventStreamsMac.h: Copied from Tools/WebKitTestRunner/mac/UIScriptControllerMac.mm.
* TestRunnerShared/EventSerialization/mac/SharedEventStreamsMac.mm: Added.
(beginSwipeBackEventStream):
(completeSwipeBackEventStream):
* TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
* TestRunnerShared/UIScriptContext/UIScriptController.cpp:
(WTR::UIScriptController::playBackEventStream):
(WTR::UIScriptController::beginBackSwipe):
(WTR::UIScriptController::completeBackSwipe):
(WTR::UIScriptController::platformPlayBackEventStream):
(WTR::UIScriptController::platformClearAllCallbacks): Deleted.
* TestRunnerShared/UIScriptContext/UIScriptController.h:
* TestRunnerShared/spi/CoreGraphicsSPI.h: Added.
* TestRunnerShared/spi/IOKitSPI.h: Renamed from Tools/WebKitTestRunner/ios/IOKitSPI.h.
* WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
* WebKitTestRunner/mac/UIScriptControllerMac.mm:
(WTR::playBackEvents):
(WTR::UIScriptController::beginBackSwipe):
(WTR::UIScriptController::completeBackSwipe):
(WTR::UIScriptController::platformPlayBackEventStream):
LayoutTests:
* platform/mac-wk2/TestExpectations:
* swipe/basic-cached-back-swipe-expected.txt:
* swipe/basic-cached-back-swipe.html:
* swipe/main-frame-pinning-requirement-expected.txt:
* swipe/main-frame-pinning-requirement.html:
* swipe/pushState-cached-back-swipe-expected.txt:
* swipe/pushState-cached-back-swipe.html:
* swipe/pushState-programmatic-back-while-swiping-crash-expected.txt:
* swipe/pushState-programmatic-back-while-swiping-crash.html:
* swipe/resources/swipe-test.js:
(measuredDurationShouldBeLessThan):
(startSwipeGesture):
(completeSwipeGesture):
(playEventStream):
(eventQueue.enqueueScrollEvent): Deleted.
(eventQueue.enqueueSwipeEvent): Deleted.
(eventQueue.hasPendingEvents): Deleted.
(eventQueue.callAfterEventDispatch): Deleted.
(eventQueue._processEventQueue): Deleted.
(eventQueue._processEventQueueSoon): Deleted.
* swipe/swipe-start-hysteresis-failures-expected.txt: Removed.
* swipe/swipe-start-hysteresis-failures.html: Removed.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2TestExpectations">trunk/LayoutTests/platform/mac-wk2/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsswipebasiccachedbackswipeexpectedtxt">trunk/LayoutTests/swipe/basic-cached-back-swipe-expected.txt</a></li>
<li><a href="#trunkLayoutTestsswipebasiccachedbackswipehtml">trunk/LayoutTests/swipe/basic-cached-back-swipe.html</a></li>
<li><a href="#trunkLayoutTestsswipemainframepinningrequirementexpectedtxt">trunk/LayoutTests/swipe/main-frame-pinning-requirement-expected.txt</a></li>
<li><a href="#trunkLayoutTestsswipemainframepinningrequirementhtml">trunk/LayoutTests/swipe/main-frame-pinning-requirement.html</a></li>
<li><a href="#trunkLayoutTestsswipepushStatecachedbackswipeexpectedtxt">trunk/LayoutTests/swipe/pushState-cached-back-swipe-expected.txt</a></li>
<li><a href="#trunkLayoutTestsswipepushStatecachedbackswipehtml">trunk/LayoutTests/swipe/pushState-cached-back-swipe.html</a></li>
<li><a href="#trunkLayoutTestsswipepushStateprogrammaticbackwhileswipingcrashexpectedtxt">trunk/LayoutTests/swipe/pushState-programmatic-back-while-swiping-crash-expected.txt</a></li>
<li><a href="#trunkLayoutTestsswipepushStateprogrammaticbackwhileswipingcrashhtml">trunk/LayoutTests/swipe/pushState-programmatic-back-while-swiping-crash.html</a></li>
<li><a href="#trunkLayoutTestsswiperesourcesswipetestjs">trunk/LayoutTests/swipe/resources/swipe-test.js</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsDumpRenderTreemacUIScriptControllerMacmm">trunk/Tools/DumpRenderTree/mac/UIScriptControllerMac.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="#trunkToolsWebKitTestRunnerEventSenderProxyh">trunk/Tools/WebKitTestRunner/EventSenderProxy.h</a></li>
<li><a href="#trunkToolsWebKitTestRunnerInjectedBundleBindingsEventSendingControlleridl">trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl</a></li>
<li><a href="#trunkToolsWebKitTestRunnerInjectedBundleEventSendingControllercpp">trunk/Tools/WebKitTestRunner/InjectedBundle/EventSendingController.cpp</a></li>
<li><a href="#trunkToolsWebKitTestRunnerInjectedBundleEventSendingControllerh">trunk/Tools/WebKitTestRunner/InjectedBundle/EventSendingController.h</a></li>
<li><a href="#trunkToolsWebKitTestRunnerInjectedBundleiosEventSenderProxyIOSmm">trunk/Tools/WebKitTestRunner/InjectedBundle/ios/EventSenderProxyIOS.mm</a></li>
<li><a href="#trunkToolsWebKitTestRunnerTestControllercpp">trunk/Tools/WebKitTestRunner/TestController.cpp</a></li>
<li><a href="#trunkToolsWebKitTestRunnerWebKitTestRunnerxcodeprojprojectpbxproj">trunk/Tools/WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkToolsWebKitTestRunnereflEventSenderProxyEflcpp">trunk/Tools/WebKitTestRunner/efl/EventSenderProxyEfl.cpp</a></li>
<li><a href="#trunkToolsWebKitTestRunnergtkEventSenderProxyGtkcpp">trunk/Tools/WebKitTestRunner/gtk/EventSenderProxyGtk.cpp</a></li>
<li><a href="#trunkToolsWebKitTestRunnermacEventSenderProxymm">trunk/Tools/WebKitTestRunner/mac/EventSenderProxy.mm</a></li>
<li><a href="#trunkToolsWebKitTestRunnermacUIScriptControllerMacmm">trunk/Tools/WebKitTestRunner/mac/UIScriptControllerMac.mm</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li>trunk/Tools/TestRunnerShared/EventSerialization/</li>
<li>trunk/Tools/TestRunnerShared/EventSerialization/mac/</li>
<li><a href="#trunkToolsTestRunnerSharedEventSerializationmacEventSerializerMach">trunk/Tools/TestRunnerShared/EventSerialization/mac/EventSerializerMac.h</a></li>
<li><a href="#trunkToolsTestRunnerSharedEventSerializationmacEventSerializerMacmm">trunk/Tools/TestRunnerShared/EventSerialization/mac/EventSerializerMac.mm</a></li>
<li><a href="#trunkToolsTestRunnerSharedEventSerializationmacSharedEventStreamsMach">trunk/Tools/TestRunnerShared/EventSerialization/mac/SharedEventStreamsMac.h</a></li>
<li><a href="#trunkToolsTestRunnerSharedEventSerializationmacSharedEventStreamsMacmm">trunk/Tools/TestRunnerShared/EventSerialization/mac/SharedEventStreamsMac.mm</a></li>
<li>trunk/Tools/TestRunnerShared/spi/</li>
<li><a href="#trunkToolsTestRunnerSharedspiCoreGraphicsSPIh">trunk/Tools/TestRunnerShared/spi/CoreGraphicsSPI.h</a></li>
<li><a href="#trunkToolsTestRunnerSharedspiIOKitSPIh">trunk/Tools/TestRunnerShared/spi/IOKitSPI.h</a></li>
</ul>
<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsswipeswipestarthysteresisfailuresexpectedtxt">trunk/LayoutTests/swipe/swipe-start-hysteresis-failures-expected.txt</a></li>
<li><a href="#trunkLayoutTestsswipeswipestarthysteresisfailureshtml">trunk/LayoutTests/swipe/swipe-start-hysteresis-failures.html</a></li>
<li><a href="#trunkToolsWebKitTestRunneriosIOKitSPIh">trunk/Tools/WebKitTestRunner/ios/IOKitSPI.h</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/LayoutTests/ChangeLog        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -1,3 +1,34 @@
</span><ins>+2017-03-29 Tim Horton <timothy_horton@apple.com>
+
+ Swipe gesture tests don't work on macOS Sierra
+ https://bugs.webkit.org/show_bug.cgi?id=161675
+ <rdar://problem/23379930>
+
+ Reviewed by Darin Adler.
+
+ * platform/mac-wk2/TestExpectations:
+ * swipe/basic-cached-back-swipe-expected.txt:
+ * swipe/basic-cached-back-swipe.html:
+ * swipe/main-frame-pinning-requirement-expected.txt:
+ * swipe/main-frame-pinning-requirement.html:
+ * swipe/pushState-cached-back-swipe-expected.txt:
+ * swipe/pushState-cached-back-swipe.html:
+ * swipe/pushState-programmatic-back-while-swiping-crash-expected.txt:
+ * swipe/pushState-programmatic-back-while-swiping-crash.html:
+ * swipe/resources/swipe-test.js:
+ (measuredDurationShouldBeLessThan):
+ (startSwipeGesture):
+ (completeSwipeGesture):
+ (playEventStream):
+ (eventQueue.enqueueScrollEvent): Deleted.
+ (eventQueue.enqueueSwipeEvent): Deleted.
+ (eventQueue.hasPendingEvents): Deleted.
+ (eventQueue.callAfterEventDispatch): Deleted.
+ (eventQueue._processEventQueue): Deleted.
+ (eventQueue._processEventQueueSoon): Deleted.
+ * swipe/swipe-start-hysteresis-failures-expected.txt: Removed.
+ * swipe/swipe-start-hysteresis-failures.html: Removed.
+
</ins><span class="cx"> 2017-03-29 Myles C. Maxfield <mmaxfield@apple.com>
</span><span class="cx">
</span><span class="cx"> Try to normalize variation ranges
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2TestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/TestExpectations (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/TestExpectations        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/LayoutTests/platform/mac-wk2/TestExpectations        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -542,12 +542,6 @@
</span><span class="cx"> # <rdar://problem/25063128>
</span><span class="cx"> [ Sierra+ ] media/media-controls-drag-timeline-set-controls-property.html [ Pass Timeout ]
</span><span class="cx">
</span><del>-# <rdar://problem/23379930> swipe tests crashing
-[ Sierra+ ] swipe/basic-cached-back-swipe.html [ Skip ]
-[ Sierra+ ] swipe/main-frame-pinning-requirement.html [ Skip ]
-[ Sierra+ ] swipe/pushState-cached-back-swipe.html [ Skip ]
-[ Sierra+ ] swipe/swipe-start-hysteresis-failures.html [ Skip ]
-
</del><span class="cx"> # Hitting "The certificate for this server is invalid" loading error (not happening in WK1)
</span><span class="cx"> webkit.org/b/160445 [ Sierra+ ] http/tests/security/contentSecurityPolicy/upgrade-insecure-requests/upgrade-insecure-fetch-in-worker.html [ Failure ]
</span><span class="cx"> webkit.org/b/160445 [ Sierra+ ] http/tests/security/contentSecurityPolicy/upgrade-insecure-requests/upgrade-insecure-fetch-in-main-frame.html [ Failure ]
</span></span></pre></div>
<a id="trunkLayoutTestsswipebasiccachedbackswipeexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/swipe/basic-cached-back-swipe-expected.txt (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/swipe/basic-cached-back-swipe-expected.txt        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/LayoutTests/swipe/basic-cached-back-swipe-expected.txt        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -1,10 +1,6 @@
</span><del>-swipe event (delta 0 0, phase 'maybegin')
-scroll event (delta 1 0, phase 'began')
-scroll event (delta 1 0, phase 'changed')
</del><ins>+startSwipeGesture
</ins><span class="cx"> didBeginSwipe
</span><del>-swipe event (delta 1 0, phase 'changed')
-swipe event (delta 256 0, phase 'changed')
-swipe event (delta 0 0, phase 'ended')
</del><ins>+completeSwipeGesture
</ins><span class="cx"> willEndSwipe
</span><span class="cx"> didEndSwipe
</span><span class="cx"> didRemoveSwipeSnapshot
</span></span></pre></div>
<a id="trunkLayoutTestsswipebasiccachedbackswipehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/swipe/basic-cached-back-swipe.html (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/swipe/basic-cached-back-swipe.html        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/LayoutTests/swipe/basic-cached-back-swipe.html        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -6,28 +6,10 @@
</span><span class="cx"> </style>
</span><span class="cx"> <script src="resources/swipe-test.js"></script>
</span><span class="cx"> <script>
</span><del>-function startSwipeGesture()
-{
- eventSender.mouseMoveTo(100, 100);
-
- eventQueue.enqueueSwipeEvent(0, 0, 'maybegin');
- eventQueue.enqueueScrollEvent(1, 0, 'began');
- eventQueue.enqueueScrollEvent(1, 0, 'changed');
-}
-
-function completeSwipeGesture()
-{
- eventQueue.enqueueSwipeEvent(1, 0, 'changed');
- eventQueue.enqueueSwipeEvent(256, 0, 'changed');
- eventQueue.enqueueSwipeEvent(0, 0, 'ended');
-}
-
</del><span class="cx"> function didBeginSwipeCallback()
</span><span class="cx"> {
</span><span class="cx"> log("didBeginSwipe");
</span><span class="cx">
</span><del>- shouldBe(false, eventQueue.hasPendingEvents(), "Event queue should be empty. Both scroll events should be required to start the swipe because of the swipe-start hysteresis.");
-
</del><span class="cx"> completeSwipeGesture();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -42,7 +24,6 @@
</span><span class="cx"> {
</span><span class="cx"> log("didEndSwipe");
</span><span class="cx">
</span><del>- shouldBe(0, eventQueue.hasPendingEvents(), "Event queue should be empty. The swipe isn't complete until we see the end of the gesture.");
</del><span class="cx"> startMeasuringDuration("snapshotRemoval");
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestsswipemainframepinningrequirementexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/swipe/main-frame-pinning-requirement-expected.txt (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/swipe/main-frame-pinning-requirement-expected.txt        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/LayoutTests/swipe/main-frame-pinning-requirement-expected.txt        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -1,23 +1,8 @@
</span><del>-swipe event (delta 0 0, phase 'maybegin')
-scroll event (delta 10 0, phase 'began')
-scroll event (delta 10 0, phase 'changed')
-scroll event (delta 10 0, phase 'changed')
-scroll event (delta 10 0, phase 'changed')
-scroll event (delta 10 0, phase 'changed')
-scroll event (delta 10 0, phase 'changed')
-scroll event (delta 10 0, phase 'changed')
-scroll event (delta 10 0, phase 'changed')
-scroll event (delta 10 0, phase 'changed')
-scroll event (delta 10 0, phase 'changed')
-scroll event (delta 10 0, phase 'changed')
-scroll event (delta 0 0, phase 'ended')
-swipe event (delta 0 0, phase 'maybegin')
-scroll event (delta 1 0, phase 'began')
-scroll event (delta 10 0, phase 'changed')
</del><ins>+startSwipeGesture
+completeSwipeGesture
+startSwipeGesture
</ins><span class="cx"> didBeginSwipe
</span><del>-swipe event (delta 1 0, phase 'changed')
-swipe event (delta 256 0, phase 'changed')
-swipe event (delta 0 0, phase 'ended')
</del><ins>+completeSwipeGesture
</ins><span class="cx"> willEndSwipe
</span><span class="cx"> didEndSwipe
</span><span class="cx"> didRemoveSwipeSnapshot
</span></span></pre></div>
<a id="trunkLayoutTestsswipemainframepinningrequirementhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/swipe/main-frame-pinning-requirement.html (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/swipe/main-frame-pinning-requirement.html        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/LayoutTests/swipe/main-frame-pinning-requirement.html        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -6,50 +6,26 @@
</span><span class="cx"> </style>
</span><span class="cx"> <script src="resources/swipe-test.js"></script>
</span><span class="cx"> <script>
</span><del>-function startSwipeGesture()
</del><ins>+
+function runTest()
</ins><span class="cx"> {
</span><del>- eventSender.mouseMoveTo(100, 100);
-
</del><span class="cx"> // The first swipe should fail because we're scrolled to the middle of the document
</span><span class="cx"> // and this is all a single gesture. We can only start swipes if we *begin*
</span><span class="cx"> // pinned to the edge.
</span><del>- eventQueue.enqueueSwipeEvent(0, 0, 'maybegin');
- eventQueue.enqueueScrollEvent(10, 0, 'began');
- eventQueue.enqueueScrollEvent(10, 0, 'changed');
- eventQueue.enqueueScrollEvent(10, 0, 'changed');
- eventQueue.enqueueScrollEvent(10, 0, 'changed');
- eventQueue.enqueueScrollEvent(10, 0, 'changed');
- eventQueue.enqueueScrollEvent(10, 0, 'changed');
- eventQueue.enqueueScrollEvent(10, 0, 'changed');
- eventQueue.enqueueScrollEvent(10, 0, 'changed');
- eventQueue.enqueueScrollEvent(10, 0, 'changed');
- eventQueue.enqueueScrollEvent(10, 0, 'changed');
- eventQueue.enqueueScrollEvent(10, 0, 'changed');
- eventQueue.enqueueScrollEvent(0, 0, 'ended');
</del><ins>+ startSwipeGesture(function () {
+ completeSwipeGesture(function () {
+ testRunner.clearTestRunnerCallbacks();
+ testRunner.installDidBeginSwipeCallback(didBeginSwipeCallback);
+ testRunner.installWillEndSwipeCallback(willEndSwipeCallback);
+ testRunner.installDidEndSwipeCallback(didEndSwipeCallback);
+ testRunner.installDidRemoveSwipeSnapshotCallback(didRemoveSwipeSnapshotCallback);
</ins><span class="cx">
</span><del>- eventQueue.callAfterEventDispatch(function () {
- testRunner.clearTestRunnerCallbacks();
- testRunner.installDidBeginSwipeCallback(didBeginSwipeCallback);
- testRunner.installWillEndSwipeCallback(willEndSwipeCallback);
- testRunner.installDidEndSwipeCallback(didEndSwipeCallback);
- testRunner.installDidRemoveSwipeSnapshotCallback(didRemoveSwipeSnapshotCallback);
-
- setTimeout(function () {
</del><span class="cx"> // The second swipe should succeed because we are now scrolled to the left edge.
</span><del>- eventQueue.enqueueSwipeEvent(0, 0, 'maybegin');
- eventQueue.enqueueScrollEvent(1, 0, 'began');
- eventQueue.enqueueScrollEvent(10, 0, 'changed');
- }, 0);
- })
</del><ins>+ startSwipeGesture(function () { completeSwipeGesture(); });
+ });
+ });
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-function completeSwipeGesture()
-{
- eventQueue.enqueueSwipeEvent(1, 0, 'changed');
- eventQueue.enqueueSwipeEvent(256, 0, 'changed');
- eventQueue.enqueueSwipeEvent(0, 0, 'ended');
-}
-
</del><span class="cx"> function didBeginSwipeNotReachedCallback()
</span><span class="cx"> {
</span><span class="cx"> log("Failure. Should never begin a swipe, because we were in the middle of a scrolling gesture that started when the main frame was not pinned to the left.");
</span><span class="lines">@@ -58,10 +34,6 @@
</span><span class="cx"> function didBeginSwipeCallback()
</span><span class="cx"> {
</span><span class="cx"> log("didBeginSwipe");
</span><del>-
- shouldBe(false, eventQueue.hasPendingEvents(), "Event queue should be empty. Both scroll events should be required to start the swipe because of the swipe-start hysteresis.");
-
- completeSwipeGesture();
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> function willEndSwipeCallback()
</span><span class="lines">@@ -75,7 +47,6 @@
</span><span class="cx"> {
</span><span class="cx"> log("didEndSwipe");
</span><span class="cx">
</span><del>- shouldBe(0, eventQueue.hasPendingEvents(), "Event queue should be empty. The swipe isn't complete until we see the end of the gesture.");
</del><span class="cx"> startMeasuringDuration("snapshotRemoval");
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -121,8 +92,9 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // Second page loaded.
</span><del>- window.scrollTo(1000, 0);
- startSwipeGesture();
</del><ins>+ window.scrollTo(100, 0);
+
+ runTest();
</ins><span class="cx"> };
</span><span class="cx"> </script>
</span><span class="cx"> </head>
</span></span></pre></div>
<a id="trunkLayoutTestsswipepushStatecachedbackswipeexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/swipe/pushState-cached-back-swipe-expected.txt (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/swipe/pushState-cached-back-swipe-expected.txt        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/LayoutTests/swipe/pushState-cached-back-swipe-expected.txt        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -1,10 +1,6 @@
</span><del>-swipe event (delta 0 0, phase 'maybegin')
-scroll event (delta 1 0, phase 'began')
-scroll event (delta 1 0, phase 'changed')
</del><ins>+startSwipeGesture
</ins><span class="cx"> didBeginSwipe
</span><del>-swipe event (delta 1 0, phase 'changed')
-swipe event (delta 256 0, phase 'changed')
-swipe event (delta 0 0, phase 'ended')
</del><ins>+completeSwipeGesture
</ins><span class="cx"> willEndSwipe
</span><span class="cx"> didEndSwipe
</span><span class="cx"> didRemoveSwipeSnapshot
</span></span></pre></div>
<a id="trunkLayoutTestsswipepushStatecachedbackswipehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/swipe/pushState-cached-back-swipe.html (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/swipe/pushState-cached-back-swipe.html        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/LayoutTests/swipe/pushState-cached-back-swipe.html        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -6,28 +6,11 @@
</span><span class="cx"> </style>
</span><span class="cx"> <script src="resources/swipe-test.js"></script>
</span><span class="cx"> <script>
</span><del>-function startSwipeGesture()
-{
- eventSender.mouseMoveTo(100, 100);
</del><span class="cx">
</span><del>- eventQueue.enqueueSwipeEvent(0, 0, 'maybegin');
- eventQueue.enqueueScrollEvent(1, 0, 'began');
- eventQueue.enqueueScrollEvent(1, 0, 'changed');
-}
-
-function completeSwipeGesture()
-{
- eventQueue.enqueueSwipeEvent(1, 0, 'changed');
- eventQueue.enqueueSwipeEvent(256, 0, 'changed');
- eventQueue.enqueueSwipeEvent(0, 0, 'ended');
-}
-
</del><span class="cx"> function didBeginSwipeCallback()
</span><span class="cx"> {
</span><span class="cx"> log("didBeginSwipe");
</span><span class="cx">
</span><del>- shouldBe(false, eventQueue.hasPendingEvents(), "Event queue should be empty. Both scroll events should be required to start the swipe because of the swipe-start hysteresis.");
-
</del><span class="cx"> completeSwipeGesture();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -42,7 +25,6 @@
</span><span class="cx"> {
</span><span class="cx"> log("didEndSwipe");
</span><span class="cx">
</span><del>- shouldBe(0, eventQueue.hasPendingEvents(), "Event queue should be empty. The swipe isn't complete until we see the end of the gesture.");
</del><span class="cx"> startMeasuringDuration("snapshotRemoval");
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestsswipepushStateprogrammaticbackwhileswipingcrashexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/swipe/pushState-programmatic-back-while-swiping-crash-expected.txt (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/swipe/pushState-programmatic-back-while-swiping-crash-expected.txt        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/LayoutTests/swipe/pushState-programmatic-back-while-swiping-crash-expected.txt        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -1,7 +1,4 @@
</span><del>-swipe event (delta 0 0, phase 'maybegin')
-scroll event (delta 1 0, phase 'began')
-scroll event (delta 1 0, phase 'changed')
-swipe event (delta 1 0, phase 'changed')
-swipe event (delta 256 0, phase 'changed')
-swipe event (delta 0 0, phase 'ended')
</del><ins>+playEventStream
+playEventStream
+completeSwipeGesture
</ins><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestsswipepushStateprogrammaticbackwhileswipingcrashhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/swipe/pushState-programmatic-back-while-swiping-crash.html (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/swipe/pushState-programmatic-back-while-swiping-crash.html        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/LayoutTests/swipe/pushState-programmatic-back-while-swiping-crash.html        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -6,14 +6,40 @@
</span><span class="cx"> </style>
</span><span class="cx"> <script src="resources/swipe-test.js"></script>
</span><span class="cx"> <script>
</span><del>-function startSwipeGesture()
</del><ins>+function runTest()
</ins><span class="cx"> {
</span><del>- eventSender.mouseMoveTo(100, 100);
-
- eventQueue.enqueueSwipeEvent(0, 0, 'maybegin');
- eventQueue.enqueueScrollEvent(1, 0, 'began');
-
- eventQueue.callAfterEventDispatch(goBack);
</del><ins>+ playEventStream(`[{
+ "relativeTimeMS" : 0,
+ "kCGEventScrollGestureFlagBits" : 1,
+ "kCGEventGestureHIDType" : 6,
+ "kCGSEventTypeField" : 29,
+ "kCGEventGesturePhase" : 128,
+ "windowLocation" : "{400, 300}"
+ },
+ {
+ "relativeTimeMS" : 8,
+ "kCGEventGestureHIDType" : 61,
+ "kCGSEventTypeField" : 29,
+ "kCGEventGestureStartEndSeriesType" : 6,
+ "windowLocation" : "{0, 0}"
+ },
+ {
+ "kCGEventGestureHIDType" : 6,
+ "relativeTimeMS" : 8,
+ "windowLocation" : "{400, 300}",
+ "kCGEventGesturePhase" : 1,
+ "kCGEventScrollGestureFlagBits" : 1,
+ "kCGSEventTypeField" : 29,
+ "kCGEventGestureScrollX" : 2
+ },
+ {
+ "relativeTimeMS" : 8,
+ "windowLocation" : "{400, 300}",
+ "kCGScrollWheelEventScrollPhase" : 1,
+ "kCGScrollWheelEventIsContinuous" : 1,
+ "kCGScrollWheelEventPointDeltaAxis2" : 1,
+ "kCGSEventTypeField" : 22
+ }]`, goBack);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> function goBack()
</span><span class="lines">@@ -20,23 +46,27 @@
</span><span class="cx"> {
</span><span class="cx"> window.history.back();
</span><span class="cx">
</span><del>- eventQueue.callAfterEventDispatch(continueSwipeGesture);
</del><ins>+ setTimeout(continueTest, 0);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-function continueSwipeGesture()
</del><ins>+function continueTest()
</ins><span class="cx"> {
</span><del>- eventQueue.enqueueScrollEvent(1, 0, 'changed');
-
- eventQueue.callAfterEventDispatch(completeSwipeGesture);
</del><ins>+ playEventStream(`[
+ {
+ "relativeTimeMS" : 0,
+ "windowLocation" : "{400, 300}",
+ "kCGScrollWheelEventScrollPhase" : 1,
+ "kCGScrollWheelEventIsContinuous" : 1,
+ "kCGScrollWheelEventPointDeltaAxis2" : 20,
+ "kCGSEventTypeField" : 22
+ }]`, function () {
+ completeTest();
+ });
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-function completeSwipeGesture()
</del><ins>+function completeTest()
</ins><span class="cx"> {
</span><del>- eventQueue.enqueueSwipeEvent(1, 0, 'changed');
- eventQueue.enqueueSwipeEvent(256, 0, 'changed');
- eventQueue.enqueueSwipeEvent(0, 0, 'ended');
-
- eventQueue.callAfterEventDispatch(testComplete);
</del><ins>+ completeSwipeGesture(testComplete);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> function didBeginSwipeCallback()
</span><span class="lines">@@ -79,7 +109,7 @@
</span><span class="cx"> updateContent();
</span><span class="cx">
</span><span class="cx"> setTimeout(function () {
</span><del>- startSwipeGesture();
</del><ins>+ runTest();
</ins><span class="cx"> }, 0);
</span><span class="cx"> }, 0);
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkLayoutTestsswiperesourcesswipetestjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/swipe/resources/swipe-test.js (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/swipe/resources/swipe-test.js        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/LayoutTests/swipe/resources/swipe-test.js        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -1,50 +1,3 @@
</span><del>-var eventQueue = {
- enqueueScrollEvent: function (x, y, phase) {
- this._queue.push(function () {
- log("scroll event (delta " + x + " " + y + ", phase '" + phase + "')");
- window.eventSender.mouseScrollByWithWheelAndMomentumPhases(x, y, phase, 'none');
- });
- this._processEventQueueSoon();
- },
-
- enqueueSwipeEvent: function (x, y, phase) {
- this._queue.push(function () {
- log("swipe event (delta " + x + " " + y + ", phase '" + phase + "')");
- window.eventSender.swipeGestureWithWheelAndMomentumPhases(x, y, phase, 'none');
- });
- this._processEventQueueSoon();
- },
-
- hasPendingEvents: function () {
- return this._queue.length != 0;
- },
-
- callAfterEventDispatch: function (callback) {
- var interval = setInterval(function () {
- if (!eventQueue.hasPendingEvents()) {
- clearInterval(interval);
- callback();
- }
- }, 0);
- },
-
- _queue: [],
-
- _processEventQueue: function () {
- if (!this._queue.length)
- return;
-
- var item = this._queue.shift();
- item();
- this._processEventQueueSoon();
- },
-
- _processEventQueueSoon: function () {
- clearTimeout(this._processingTimeout);
- this._processingTimeout = setTimeout(this._processEventQueue.bind(this), 0);
- }
-}
-
</del><span class="cx"> function shouldBe(expected, actual, message)
</span><span class="cx"> {
</span><span class="cx"> if (expected != actual)
</span><span class="lines">@@ -84,4 +37,37 @@
</span><span class="cx"> var duration = Date.now() - window.localStorage[key + "swipeStartTime"];
</span><span class="cx"> if (duration >= timeInMS)
</span><span class="cx"> log("Failure. " + message + " (expected: " + timeInMS + ", actual: " + duration + ")");
</span><del>-}
</del><span class="cx">\ No newline at end of file
</span><ins>+}
+
+function startSwipeGesture(callback)
+{
+ log("startSwipeGesture");
+ testRunner.runUIScript(`
+ (function() {
+ uiController.beginBackSwipe(function() {
+ uiController.uiScriptComplete();
+ });
+ })();`, callback || function () {});
+}
+
+function completeSwipeGesture(callback)
+{
+ log("completeSwipeGesture");
+ testRunner.runUIScript(`
+ (function() {
+ uiController.completeBackSwipe(function() {
+ uiController.uiScriptComplete();
+ });
+ })();`, callback || function () {});
+}
+
+function playEventStream(stream, callback)
+{
+ log("playEventStream");
+ testRunner.runUIScript(`
+ (function() {
+ uiController.playBackEventStream(\`${stream}\`, function() {
+ uiController.uiScriptComplete();
+ });
+ })();`, callback || function () {});
+}
</ins></span></pre></div>
<a id="trunkLayoutTestsswipeswipestarthysteresisfailuresexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/swipe/swipe-start-hysteresis-failures-expected.txt (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/swipe/swipe-start-hysteresis-failures-expected.txt        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/LayoutTests/swipe/swipe-start-hysteresis-failures-expected.txt        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -1,22 +0,0 @@
</span><del>-swipe event (delta 0 0, phase 'maybegin')
-scroll event (delta 1 0, phase 'began')
-scroll event (delta 0 0, phase 'changed')
-scroll event (delta 0 0, phase 'ended')
-swipe event (delta 0 0, phase 'maybegin')
-scroll event (delta 2 2, phase 'began')
-scroll event (delta 0 0, phase 'changed')
-scroll event (delta 0 0, phase 'ended')
-swipe event (delta 0 0, phase 'maybegin')
-scroll event (delta 0 2, phase 'began')
-scroll event (delta 0 0, phase 'changed')
-scroll event (delta 0 0, phase 'ended')
-swipe event (delta 0 0, phase 'maybegin')
-scroll event (delta 1 0, phase 'began')
-scroll event (delta 0 2, phase 'changed')
-scroll event (delta 0 0, phase 'ended')
-swipe event (delta 0 0, phase 'maybegin')
-scroll event (delta 3 1, phase 'began')
-scroll event (delta 0 0, phase 'changed')
-scroll event (delta 0 0, phase 'ended')
-swipe event (delta 0 0, phase 'ended')
-
</del></span></pre></div>
<a id="trunkLayoutTestsswipeswipestarthysteresisfailureshtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/swipe/swipe-start-hysteresis-failures.html (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/swipe/swipe-start-hysteresis-failures.html        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/LayoutTests/swipe/swipe-start-hysteresis-failures.html        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -1,119 +0,0 @@
</span><del>-<head>
-<style>
-html {
- font-size: 32pt;
-}
-</style>
-<script src="resources/swipe-test.js"></script>
-<script>
-function doShortSwipeGesture()
-{
- eventSender.mouseMoveTo(100, 100);
-
- // Total delta of 10, 0; should not be enough to start a swipe.
- eventQueue.enqueueSwipeEvent(0, 0, 'maybegin');
- eventQueue.enqueueScrollEvent(1, 0, 'began');
- eventQueue.enqueueScrollEvent(0, 0, 'changed');
- eventQueue.enqueueScrollEvent(0, 0, 'ended');
-
- eventQueue.callAfterEventDispatch(doDiagonalSwipeGesture);
-}
-
-function doDiagonalSwipeGesture()
-{
- // Total delta of 20, 20; this is ordinarily sufficient magnitude to start a swipe,
- // but is too diagonal to start a swipe.
- eventQueue.enqueueSwipeEvent(0, 0, 'maybegin');
- eventQueue.enqueueScrollEvent(2, 2, 'began');
- eventQueue.enqueueScrollEvent(0, 0, 'changed');
- eventQueue.enqueueScrollEvent(0, 0, 'ended');
-
- eventQueue.callAfterEventDispatch(doVerticalSwipeGesture);
-}
-
-function doVerticalSwipeGesture()
-{
- // Total delta of 0, 20; this is ordinarily sufficient magnitude to start a swipe,
- // but is completely vertical, so we won't start a swipe.
- eventQueue.enqueueSwipeEvent(0, 0, 'maybegin');
- eventQueue.enqueueScrollEvent(0, 2, 'began');
- eventQueue.enqueueScrollEvent(0, 0, 'changed');
- eventQueue.enqueueScrollEvent(0, 0, 'ended');
-
- eventQueue.callAfterEventDispatch(doHorizontalThenVerticalSwipeGesture);
-}
-
-function doHorizontalThenVerticalSwipeGesture()
-{
- // Total delta of 10, 20; this is ordinarily sufficient magnitude to start a swipe,
- // but is too vertical, so we won't start a swipe.
- eventQueue.enqueueSwipeEvent(0, 0, 'maybegin');
- eventQueue.enqueueScrollEvent(1, 0, 'began');
- eventQueue.enqueueScrollEvent(0, 2, 'changed');
- eventQueue.enqueueScrollEvent(0, 0, 'ended');
-
- eventQueue.callAfterEventDispatch(doRegularSwipeGesture);
-}
-
-function doRegularSwipeGesture()
-{
- // Swap in a different callback that makes sure we *do* reach didBeginSwipe.
- testRunner.clearTestRunnerCallbacks();
- var sawDidBeginSwipe = false;
- testRunner.installDidBeginSwipeCallback(function () {
- sawDidBeginSwipe = true;
- // Need a swipe-end event to clean up.
- eventQueue.enqueueSwipeEvent(0, 0, 'ended');
- });
-
- testRunner.installDidRemoveSwipeSnapshotCallback(function () {
- shouldBe(true, sawDidBeginSwipe, "The last gesture should start a swipe, because it is sufficient magnitude and in the correct direction.")
- testComplete();
- });
-
- // Total delta of 30, 10; this should start a swipe as usual.
- eventQueue.enqueueSwipeEvent(0, 0, 'maybegin');
- eventQueue.enqueueScrollEvent(3, 1, 'began');
- eventQueue.enqueueScrollEvent(0, 0, 'changed');
- eventQueue.enqueueScrollEvent(0, 0, 'ended');
-}
-
-function didBeginSwipeNotReachedCallback()
-{
- log("Failure. Should never begin a swipe, because all of the attempted swipes should fail due to the swipe-start hysteresis.");
-}
-
-function isFirstPage()
-{
- return window.location.href.indexOf("second") == -1;
-}
-
-window.onload = function () {
- if (!window.eventSender || !window.testRunner) {
- document.body.innerHTML = "This test must be run in WebKitTestRunner.";
- return;
- }
-
- document.body.innerHTML = isFirstPage() ? "first" : "second";
-
- if (isFirstPage()) {
- initializeSwipeTest();
-
- testRunner.installDidBeginSwipeCallback(didBeginSwipeNotReachedCallback);
-
- testRunner.overridePreference("WebKitUsesPageCachePreferenceKey", 1);
- testRunner.dumpAsText();
- testRunner.waitUntilDone();
-
- setTimeout(function () {
- window.location.href = window.location.href + "?second";
- }, 0);
- return;
- }
-
- doShortSwipeGesture();
-};
-</script>
-</head>
-<body>
-</body>
</del><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/Tools/ChangeLog        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -1,3 +1,45 @@
</span><ins>+2017-03-29 Tim Horton <timothy_horton@apple.com>
+
+ Swipe gesture tests don't work on macOS Sierra
+ https://bugs.webkit.org/show_bug.cgi?id=161675
+ <rdar://problem/23379930>
+
+ Reviewed by Darin Adler.
+
+ * DumpRenderTree/mac/UIScriptControllerMac.mm:
+ (WTR::UIScriptController::platformPlayBackEventStream):
+ (WTR::UIScriptController::beginBackSwipe):
+ (WTR::UIScriptController::completeBackSwipe):
+ * TestRunnerShared/EventSerialization/mac/EventSerializerMac.h: Copied from Tools/DumpRenderTree/mac/UIScriptControllerMac.mm.
+ * TestRunnerShared/EventSerialization/mac/EventSerializerMac.mm: Added.
+ (eventIsOfType):
+ (eventIsOfTypes):
+ (eventIsOfGestureType):
+ (eventIsOfGestureTypes):
+ (+[EventSerializer dictionaryForEvent:relativeToTime:]):
+ (+[EventSerializer createEventForDictionary:inWindow:relativeToTime:]):
+ (+[EventSerializer playEventStream:inWindow:completionHandler:]):
+ * TestRunnerShared/EventSerialization/mac/SharedEventStreamsMac.h: Copied from Tools/WebKitTestRunner/mac/UIScriptControllerMac.mm.
+ * TestRunnerShared/EventSerialization/mac/SharedEventStreamsMac.mm: Added.
+ (beginSwipeBackEventStream):
+ (completeSwipeBackEventStream):
+ * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
+ * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
+ (WTR::UIScriptController::playBackEventStream):
+ (WTR::UIScriptController::beginBackSwipe):
+ (WTR::UIScriptController::completeBackSwipe):
+ (WTR::UIScriptController::platformPlayBackEventStream):
+ (WTR::UIScriptController::platformClearAllCallbacks): Deleted.
+ * TestRunnerShared/UIScriptContext/UIScriptController.h:
+ * TestRunnerShared/spi/CoreGraphicsSPI.h: Added.
+ * TestRunnerShared/spi/IOKitSPI.h: Renamed from Tools/WebKitTestRunner/ios/IOKitSPI.h.
+ * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
+ * WebKitTestRunner/mac/UIScriptControllerMac.mm:
+ (WTR::playBackEvents):
+ (WTR::UIScriptController::beginBackSwipe):
+ (WTR::UIScriptController::completeBackSwipe):
+ (WTR::UIScriptController::platformPlayBackEventStream):
+
</ins><span class="cx"> 2017-03-29 Jonathan Bedard <jbedard@apple.com>
</span><span class="cx">
</span><span class="cx"> webkitpy: Robust test clean-up
</span></span></pre></div>
<a id="trunkToolsDumpRenderTreemacUIScriptControllerMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/DumpRenderTree/mac/UIScriptControllerMac.mm (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/DumpRenderTree/mac/UIScriptControllerMac.mm        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/Tools/DumpRenderTree/mac/UIScriptControllerMac.mm        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -136,6 +136,18 @@
</span><span class="cx"> });
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void UIScriptController::beginBackSwipe(JSValueRef callback)
+{
</ins><span class="cx"> }
</span><span class="cx">
</span><ins>+void UIScriptController::completeBackSwipe(JSValueRef callback)
+{
+}
+
+void UIScriptController::platformPlayBackEventStream(JSStringRef, JSValueRef)
+{
+}
+
+}
+
</ins><span class="cx"> #endif // PLATFORM(MAC)
</span></span></pre></div>
<a id="trunkToolsTestRunnerSharedEventSerializationmacEventSerializerMach"></a>
<div class="addfile"><h4>Added: trunk/Tools/TestRunnerShared/EventSerialization/mac/EventSerializerMac.h (0 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestRunnerShared/EventSerialization/mac/EventSerializerMac.h         (rev 0)
+++ trunk/Tools/TestRunnerShared/EventSerialization/mac/EventSerializerMac.h        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -0,0 +1,51 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#if PLATFORM(MAC)
+
+#import <AppKit/AppKit.h>
+#import <wtf/BlockPtr.h>
+#import <wtf/RetainPtr.h>
+
+@interface EventSerializer : NSObject
+
++ (NSDictionary *)dictionaryForEvent:(CGEventRef)event relativeToTime:(CGEventTimestamp)referenceTimestamp;
+
++ (RetainPtr<CGEventRef>)createEventForDictionary:(NSDictionary *)dict inWindow:(NSWindow *)window relativeToTime:(CGEventTimestamp)referenceTimestamp;
+
+@end
+
+@interface EventStreamPlayer : NSObject {
+ RetainPtr<NSMutableArray *> _remainingEventDictionaries;
+ RetainPtr<NSWindow *> _window;
+ BlockPtr<void ()> _completionHandler;
+ uint64_t _startTime;
+}
+
++ (void)playStream:(NSArray<NSDictionary *> *)eventDicts window:(NSWindow *)window completionHandler:(void(^)())completionHandler;
+
+@end
+
+#endif
</ins></span></pre></div>
<a id="trunkToolsTestRunnerSharedEventSerializationmacEventSerializerMacmm"></a>
<div class="addfile"><h4>Added: trunk/Tools/TestRunnerShared/EventSerialization/mac/EventSerializerMac.mm (0 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestRunnerShared/EventSerialization/mac/EventSerializerMac.mm         (rev 0)
+++ trunk/Tools/TestRunnerShared/EventSerialization/mac/EventSerializerMac.mm        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -0,0 +1,320 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "EventSerializerMac.h"
+
+#if PLATFORM(MAC)
+
+#import "CoreGraphicsSPI.h"
+#import "IOKitSPI.h"
+#import <algorithm>
+#import <mach/mach_time.h>
+#import <wtf/RetainPtr.h>
+
+#define MOUSE_EVENT_TYPES \
+ (CGSEventType)kCGEventLeftMouseDown, \
+ (CGSEventType)kCGEventLeftMouseUp, \
+ (CGSEventType)kCGEventRightMouseDown, \
+ (CGSEventType)kCGEventRightMouseUp, \
+ (CGSEventType)kCGEventMouseMoved, \
+ (CGSEventType)kCGEventLeftMouseDragged, \
+ (CGSEventType)kCGEventRightMouseDragged, \
+ (CGSEventType)kCGEventOtherMouseDown, \
+ (CGSEventType)kCGEventOtherMouseUp, \
+ (CGSEventType)kCGEventOtherMouseDragged
+
+#define KEY_EVENT_TYPES \
+ (CGSEventType)kCGEventKeyDown, \
+ (CGSEventType)kCGEventKeyUp, \
+ (CGSEventType)kCGEventFlagsChanged
+
+#define GESTURE_EVENT_TYPES \
+ kCGSEventGesture, \
+ kCGSEventFluidTouchGesture, \
+ kCGSEventDockControl
+
+bool eventIsOfType(CGEventRef event, CGSEventType type)
+{
+ return (CGSEventType)CGEventGetType(event) == type;
+}
+
+bool eventIsOfTypes(CGEventRef) { return false; }
+
+template<typename ... Types>
+bool eventIsOfTypes(CGEventRef event, CGSEventType first, Types ... rest)
+{
+ return eventIsOfType(event, first) || eventIsOfTypes(event, rest...);
+}
+
+bool eventIsOfGestureType(CGEventRef event, IOHIDEventType type)
+{
+ return (IOHIDEventType)CGEventGetIntegerValueField(event, kCGEventGestureHIDType) == type;
+}
+
+bool eventIsOfGestureTypes(CGEventRef) { return false; }
+
+template<typename ... Types>
+bool eventIsOfGestureTypes(CGEventRef event, IOHIDEventType first, Types ... rest)
+{
+ if (!eventIsOfTypes(event, GESTURE_EVENT_TYPES))
+ return false;
+ return eventIsOfGestureType(event, first) || eventIsOfGestureTypes(event, rest...);
+}
+
+#define FOR_EACH_CGEVENT_INTEGER_FIELD(macro) \
+ macro(true, kCGSEventTypeField) \
+ \
+ macro(eventIsOfTypes(rawEvent, kCGSEventScrollWheel, kCGSEventZoom), kCGScrollWheelEventDeltaAxis1) \
+ macro(eventIsOfTypes(rawEvent, kCGSEventScrollWheel, kCGSEventZoom), kCGScrollWheelEventDeltaAxis2) \
+ macro(eventIsOfTypes(rawEvent, kCGSEventScrollWheel, kCGSEventZoom), kCGScrollWheelEventDeltaAxis3) \
+ macro(eventIsOfTypes(rawEvent, kCGSEventScrollWheel, kCGSEventZoom), kCGScrollWheelEventIsContinuous) \
+ macro(eventIsOfTypes(rawEvent, kCGSEventScrollWheel, kCGSEventZoom), kCGScrollWheelEventMomentumPhase) \
+ macro(eventIsOfTypes(rawEvent, kCGSEventScrollWheel, kCGSEventZoom), kCGScrollWheelEventPointDeltaAxis1) \
+ macro(eventIsOfTypes(rawEvent, kCGSEventScrollWheel, kCGSEventZoom), kCGScrollWheelEventPointDeltaAxis2) \
+ macro(eventIsOfTypes(rawEvent, kCGSEventScrollWheel, kCGSEventZoom), kCGScrollWheelEventPointDeltaAxis3) \
+ macro(eventIsOfTypes(rawEvent, kCGSEventScrollWheel, kCGSEventZoom), kCGScrollWheelEventScrollCount) \
+ macro(eventIsOfTypes(rawEvent, kCGSEventScrollWheel, kCGSEventZoom), kCGScrollWheelEventScrollPhase) \
+ \
+ macro(eventIsOfTypes(rawEvent, MOUSE_EVENT_TYPES), kCGMouseEventButtonNumber) \
+ macro(eventIsOfTypes(rawEvent, MOUSE_EVENT_TYPES), kCGMouseEventClickState) \
+ macro(eventIsOfTypes(rawEvent, MOUSE_EVENT_TYPES), kCGMouseEventDeltaX) \
+ macro(eventIsOfTypes(rawEvent, MOUSE_EVENT_TYPES), kCGMouseEventDeltaY) \
+ macro(eventIsOfTypes(rawEvent, MOUSE_EVENT_TYPES), kCGMouseEventSubtype) \
+ macro(eventIsOfTypes(rawEvent, MOUSE_EVENT_TYPES), kCGMouseEventNumber) \
+ \
+ macro(eventIsOfTypes(rawEvent, KEY_EVENT_TYPES), kCGKeyboardEventAutorepeat) \
+ macro(eventIsOfTypes(rawEvent, KEY_EVENT_TYPES), kCGKeyboardEventKeyboardType) \
+ macro(eventIsOfTypes(rawEvent, KEY_EVENT_TYPES), kCGKeyboardEventKeycode) \
+ \
+ macro(eventIsOfTypes(rawEvent, GESTURE_EVENT_TYPES), kCGEventGestureHIDType) \
+ macro(eventIsOfTypes(rawEvent, GESTURE_EVENT_TYPES), kCGEventGestureBehavior) \
+ macro(eventIsOfTypes(rawEvent, GESTURE_EVENT_TYPES), kCGEventGestureFlavor) \
+ macro(eventIsOfTypes(rawEvent, GESTURE_EVENT_TYPES), kCGEventGestureMask) \
+ macro(eventIsOfTypes(rawEvent, GESTURE_EVENT_TYPES), kCGEventGesturePhase) \
+ macro(eventIsOfTypes(rawEvent, GESTURE_EVENT_TYPES), kCGEventGestureStage) \
+ \
+ macro(eventIsOfGestureType(rawEvent, kIOHIDEventTypeScroll), kCGEventScrollGestureFlagBits) \
+ \
+ macro(eventIsOfGestureType(rawEvent, kIOHIDEventTypeNavigationSwipe), kCGEventSwipeGestureFlagBits) \
+ macro(eventIsOfGestureType(rawEvent, kIOHIDEventTypeNavigationSwipe), kCGEventGestureSwipeMask) \
+ macro(eventIsOfGestureType(rawEvent, kIOHIDEventTypeNavigationSwipe), kCGEventGestureSwipeMotion) \
+ macro(eventIsOfGestureType(rawEvent, kIOHIDEventTypeNavigationSwipe), kCGEventGestureSwipeValue) \
+ macro(eventIsOfGestureType(rawEvent, kIOHIDEventTypeNavigationSwipe), kCGEventGestureFlavor) \
+ \
+ macro(eventIsOfGestureTypes(rawEvent, kCGHIDEventTypeGestureStarted, kCGHIDEventTypeGestureEnded), kCGEventGestureStartEndSeriesType)
+
+#define FOR_EACH_CGEVENT_DOUBLE_FIELD(macro) \
+ macro(eventIsOfTypes(rawEvent, GESTURE_EVENT_TYPES), kCGEventGestureProgress) \
+ \
+ macro(eventIsOfTypes(rawEvent, MOUSE_EVENT_TYPES), kCGMouseEventPressure) \
+ \
+ macro(eventIsOfGestureType(rawEvent, kIOHIDEventTypeZoom), kCGEventGestureZoomDeltaX) \
+ macro(eventIsOfGestureType(rawEvent, kIOHIDEventTypeZoom), kCGEventGestureZoomDeltaY) \
+ macro(eventIsOfGestureType(rawEvent, kIOHIDEventTypeZoom), kCGEventGestureZoomValue) \
+ \
+ macro(eventIsOfGestureType(rawEvent, kIOHIDEventTypeRotation), kCGEventGestureRotationValue) \
+ \
+ macro(eventIsOfGestureType(rawEvent, kIOHIDEventTypeScroll), kCGEventGestureScrollX) \
+ macro(eventIsOfGestureType(rawEvent, kIOHIDEventTypeScroll), kCGEventGestureScrollY) \
+ macro(eventIsOfGestureType(rawEvent, kIOHIDEventTypeScroll), kCGEventGestureScrollZ) \
+ \
+ macro(eventIsOfGestureType(rawEvent, kIOHIDEventTypeNavigationSwipe), kCGEventGestureSwipePositionX) \
+ macro(eventIsOfGestureType(rawEvent, kIOHIDEventTypeNavigationSwipe), kCGEventGestureSwipePositionY) \
+ macro(eventIsOfGestureType(rawEvent, kIOHIDEventTypeNavigationSwipe), kCGEventGestureSwipeProgress) \
+ macro(eventIsOfGestureType(rawEvent, kIOHIDEventTypeNavigationSwipe), kCGEventGestureSwipeVelocityX) \
+ macro(eventIsOfGestureType(rawEvent, kIOHIDEventTypeNavigationSwipe), kCGEventGestureSwipeVelocityY) \
+ macro(eventIsOfGestureType(rawEvent, kIOHIDEventTypeNavigationSwipe), kCGEventGestureSwipeVelocityZ) \
+ \
+ macro(eventIsOfGestureType(rawEvent, kIOHIDEventTypeForce), kCGEventTransitionProgress) \
+ macro(eventIsOfGestureType(rawEvent, kIOHIDEventTypeForce), kCGEventStagePressure)
+
+#define LOAD_INTEGER_FIELD_FROM_EVENT(eventTypeFilter, field) \
+^ { \
+ if (!(eventTypeFilter)) \
+ return; \
+ int64_t value = CGEventGetIntegerValueField(rawEvent, field); \
+ int64_t plainValue = CGEventGetIntegerValueField(rawPlainEvent, field); \
+ if (value != plainValue) \
+ dict[@#field] = @(value); \
+}();
+
+#define LOAD_DOUBLE_FIELD_FROM_EVENT(eventTypeFilter, field) \
+^ { \
+ if (!(eventTypeFilter)) \
+ return; \
+ double value = CGEventGetDoubleValueField(rawEvent, field); \
+ if (!isnan(value)) { \
+ double plainValue = CGEventGetDoubleValueField(rawPlainEvent, field); \
+ if (fabs(value - plainValue) >= FLT_EPSILON) \
+ dict[@#field] = @(value); \
+ } \
+}();
+
+#define STORE_INTEGER_FIELD_TO_EVENT(eventTypeFilter, field) \
+^ { \
+ if (!(eventTypeFilter)) \
+ return; \
+ NSNumber *value = dict[@#field]; \
+ if (value) \
+ CGEventSetIntegerValueField(rawEvent, field, value.unsignedLongLongValue); \
+}();
+
+#define STORE_DOUBLE_FIELD_TO_EVENT(eventTypeFilter, field) \
+^ { \
+ if (!(eventTypeFilter)) \
+ return; \
+ NSNumber *value = dict[@#field]; \
+ if (value) \
+ CGEventSetDoubleValueField(rawEvent, field, value.doubleValue); \
+}();
+
+@implementation EventSerializer
+
++ (NSDictionary *)dictionaryForEvent:(CGEventRef)rawEvent relativeToTime:(CGEventTimestamp)referenceTimestamp
+{
+ RetainPtr<CGEventRef> plainEvent = adoptCF(CGEventCreate(NULL));
+ CGEventRef rawPlainEvent = plainEvent.get();
+
+ NSMutableDictionary *dict = [[[NSMutableDictionary alloc] init] autorelease];
+
+ FOR_EACH_CGEVENT_INTEGER_FIELD(LOAD_INTEGER_FIELD_FROM_EVENT);
+ FOR_EACH_CGEVENT_DOUBLE_FIELD(LOAD_DOUBLE_FIELD_FROM_EVENT);
+
+ CGEventTimestamp timestamp = CGEventGetTimestamp(rawEvent);
+ dict[@"relativeTimeMS"] = @(std::max(static_cast<double>(timestamp - referenceTimestamp) / NSEC_PER_MSEC, 0.0));
+
+ CGSEventType eventType = (CGSEventType)CGEventGetIntegerValueField(rawEvent, kCGSEventTypeField);
+ if (eventType == kCGSEventGesture || eventType == kCGSEventFluidTouchGesture || eventType == kCGSEventDockControl) {
+ if (CGEventGetIntegerValueField(rawEvent, kCGEventGestureIsPreflight)) {
+ dict[@"kCGEventGestureIsPreflight"] = @YES;
+ dict[@"kCGEventGesturePreflightProgress"] = @(CGEventGetDoubleValueField(rawEvent, kCGEventGesturePreflightProgress));
+ }
+ }
+
+ dict[@"windowLocation"] = NSStringFromPoint(NSPointFromCGPoint(CGEventGetWindowLocation(rawEvent)));
+
+ auto flags = static_cast<CGEventFlags>(CGEventGetFlags(rawEvent) & ~NX_NONCOALSESCEDMASK);
+ auto plainFlags = static_cast<CGEventFlags>(CGEventGetFlags(rawPlainEvent) & ~NX_NONCOALSESCEDMASK);
+ if (flags != plainFlags)
+ dict[@"flags"] = @(flags);
+
+ return dict;
+}
+
++ (RetainPtr<CGEventRef>)createEventForDictionary:(NSDictionary *)dict inWindow:(NSWindow *)window relativeToTime:(CGEventTimestamp)referenceTimestamp
+{
+ RetainPtr<CGEventRef> event = adoptCF(CGEventCreate(NULL));
+ CGEventRef rawEvent = event.get();
+
+ FOR_EACH_CGEVENT_INTEGER_FIELD(STORE_INTEGER_FIELD_TO_EVENT);
+ FOR_EACH_CGEVENT_DOUBLE_FIELD(STORE_DOUBLE_FIELD_TO_EVENT);
+
+ if (dict[@"relativeTimeMS"])
+ CGEventSetTimestamp(event.get(), referenceTimestamp + static_cast<CGEventTimestamp>(([dict[@"relativeTimeMS"] doubleValue] * NSEC_PER_MSEC)));
+
+ if ([dict[@"kCGEventGestureIsPreflight"] boolValue]) {
+ CGEventSetIntegerValueField(rawEvent, kCGEventGestureIsPreflight, 1);
+ CGEventSetDoubleValueField(rawEvent, kCGEventGesturePreflightProgress, [dict[@"kCGEventGesturePreflightProgress"] doubleValue]);
+ }
+
+ if (dict[@"windowLocation"]) {
+ CGPoint windowLocation = NSPointToCGPoint(NSPointFromString(dict[@"windowLocation"]));
+ CGEventSetWindowLocation(rawEvent, windowLocation);
+
+ NSPoint screenPoint = [window convertRectToScreen:NSMakeRect(windowLocation.x, windowLocation.y, 1, 1)].origin;
+ CGEventSetLocation(rawEvent, CGPointMake(screenPoint.x, NSScreen.screens.firstObject.frame.size.height - screenPoint.y));
+ }
+
+ if (dict[@"flags"])
+ CGEventSetFlags(rawEvent, static_cast<CGEventFlags>([dict[@"flags"] unsignedLongLongValue]));
+
+ CGEventSetIntegerValueField(rawEvent, kCGSEventWindowIDField, window.windowNumber);
+
+ return event;
+}
+
+@end
+
+@implementation EventStreamPlayer
+
+const float eventDispatchTimerRate = 1. / 120.;
+
++ (void)playStream:(NSArray<NSDictionary *> *)eventDicts window:(NSWindow *)window completionHandler:(void(^)())completionHandler
+{
+ RetainPtr<EventStreamPlayer> player = adoptNS([[EventStreamPlayer alloc] init]);
+
+ player->_remainingEventDictionaries = adoptNS([eventDicts mutableCopy]);
+ player->_window = window;
+
+ if (completionHandler)
+ player->_completionHandler = makeBlockPtr(completionHandler);
+
+ player->_startTime = mach_absolute_time();
+
+ [NSTimer scheduledTimerWithTimeInterval:eventDispatchTimerRate target:player.get() selector:@selector(playbackTimerFired:) userInfo:nil repeats:YES];
+}
+
+- (void)playbackTimerFired:(NSTimer *)timer
+{
+ auto removeList = adoptNS([[NSMutableArray alloc] init]);
+ NSEvent *nsEvent = nil;
+ for (id eventDict in _remainingEventDictionaries.get()) {
+ RetainPtr<CGEventRef> event = [EventSerializer createEventForDictionary:eventDict inWindow:_window.get() relativeToTime:_startTime];
+ if (CGEventGetTimestamp(event.get()) < mach_absolute_time()) {
+ nsEvent = [NSEvent eventWithCGEvent:event.get()];
+ [NSApp postEvent:nsEvent atStart:NO];
+ [removeList addObject:eventDict];
+ }
+ }
+ [_remainingEventDictionaries removeObjectsInArray:removeList.get()];
+
+ if ([_remainingEventDictionaries count])
+ return;
+
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200
+ NSEventType applicationDefinedEventType = NSEventTypeApplicationDefined;
+#else
+ NSEventType applicationDefinedEventType = NSApplicationDefined;
+#endif
+ [NSApp postEvent:[NSEvent otherEventWithType:applicationDefinedEventType location:NSZeroPoint modifierFlags:0 timestamp:0 windowNumber:0 context:0 subtype:0 data1:42 data2:0] atStart:NO];
+ // Block until we send the last event we posted.
+ while (true) {
+ NSEvent *nextEvent = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate dateWithTimeIntervalSinceNow:eventDispatchTimerRate] inMode:NSDefaultRunLoopMode dequeue:YES];
+ if (nextEvent.type == applicationDefinedEventType && nextEvent.data1 == 42)
+ break;
+ if (nextEvent)
+ [NSApp sendEvent:nextEvent];
+ }
+
+ if (_completionHandler)
+ _completionHandler();
+
+ [timer invalidate];
+}
+
+@end
+
+#endif
</ins></span></pre></div>
<a id="trunkToolsTestRunnerSharedEventSerializationmacSharedEventStreamsMach"></a>
<div class="addfile"><h4>Added: trunk/Tools/TestRunnerShared/EventSerialization/mac/SharedEventStreamsMac.h (0 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestRunnerShared/EventSerialization/mac/SharedEventStreamsMac.h         (rev 0)
+++ trunk/Tools/TestRunnerShared/EventSerialization/mac/SharedEventStreamsMac.h        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -0,0 +1,33 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#if PLATFORM(MAC)
+
+@class NSString;
+
+NSString *beginSwipeBackEventStream();
+NSString *completeSwipeBackEventStream();
+
+#endif
</ins></span></pre></div>
<a id="trunkToolsTestRunnerSharedEventSerializationmacSharedEventStreamsMacmm"></a>
<div class="addfile"><h4>Added: trunk/Tools/TestRunnerShared/EventSerialization/mac/SharedEventStreamsMac.mm (0 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestRunnerShared/EventSerialization/mac/SharedEventStreamsMac.mm         (rev 0)
+++ trunk/Tools/TestRunnerShared/EventSerialization/mac/SharedEventStreamsMac.mm        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -0,0 +1,369 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "SharedEventStreamsMac.h"
+
+#if PLATFORM(MAC)
+
+#define QUOTE(...) @(#__VA_ARGS__)
+
+NSString *beginSwipeBackEventStream()
+{
+ return QUOTE([
+ {
+ "relativeTimeMS" : 0,
+ "kCGEventScrollGestureFlagBits" : 1,
+ "kCGEventGestureHIDType" : 6,
+ "kCGSEventTypeField" : 29,
+ "kCGEventGesturePhase" : 128,
+ "windowLocation" : "{400, 300}"
+ },
+ {
+ "relativeTimeMS" : 8,
+ "kCGEventGestureHIDType" : 61,
+ "kCGSEventTypeField" : 29,
+ "kCGEventGestureStartEndSeriesType" : 6,
+ "windowLocation" : "{400, 300}"
+ },
+ {
+ "kCGEventGestureHIDType" : 6,
+ "relativeTimeMS" : 8,
+ "windowLocation" : "{400, 300}",
+ "kCGEventGesturePhase" : 1,
+ "kCGEventScrollGestureFlagBits" : 1,
+ "kCGSEventTypeField" : 29,
+ "kCGEventGestureScrollX" : 2
+ },
+ {
+ "relativeTimeMS" : 8,
+ "windowLocation" : "{400, 300}",
+ "kCGScrollWheelEventScrollPhase" : 1,
+ "kCGScrollWheelEventIsContinuous" : 1,
+ "kCGScrollWheelEventPointDeltaAxis2" : 1,
+ "kCGSEventTypeField" : 22
+ },
+ {
+ "kCGEventGestureHIDType" : 6,
+ "relativeTimeMS" : 17,
+ "windowLocation" : "{400, 300}",
+ "kCGEventGestureScrollY" : 1,
+ "kCGEventGesturePhase" : 2,
+ "kCGEventScrollGestureFlagBits" : 1,
+ "kCGSEventTypeField" : 29,
+ "kCGEventGestureScrollX" : 12
+ },
+ {
+ "kCGScrollWheelEventPointDeltaAxis1" : 1,
+ "relativeTimeMS" : 17,
+ "kCGScrollWheelEventScrollPhase" : 2,
+ "kCGScrollWheelEventIsContinuous" : 1,
+ "kCGScrollWheelEventPointDeltaAxis2" : 4,
+ "windowLocation" : "{400, 300}",
+ "kCGSEventTypeField" : 22
+ },
+ {
+ "kCGEventGestureHIDType" : 6,
+ "relativeTimeMS" : 25,
+ "windowLocation" : "{400, 300}",
+ "kCGEventGestureScrollY" : 2,
+ "kCGEventGesturePhase" : 2,
+ "kCGEventScrollGestureFlagBits" : 1,
+ "kCGSEventTypeField" : 29,
+ "kCGEventGestureScrollX" : 23
+ },
+ {
+ "kCGScrollWheelEventDeltaAxis2" : 1,
+ "kCGScrollWheelEventPointDeltaAxis1" : 1,
+ "relativeTimeMS" : 25,
+ "kCGScrollWheelEventIsContinuous" : 1,
+ "kCGScrollWheelEventScrollPhase" : 2,
+ "kCGScrollWheelEventPointDeltaAxis2" : 11,
+ "windowLocation" : "{400, 300}",
+ "kCGSEventTypeField" : 22
+ },
+ {
+ "kCGEventGestureHIDType" : 6,
+ "relativeTimeMS" : 33,
+ "windowLocation" : "{400, 300}",
+ "kCGEventGestureScrollY" : 2,
+ "kCGEventGesturePhase" : 2,
+ "kCGEventScrollGestureFlagBits" : 1,
+ "kCGSEventTypeField" : 29,
+ "kCGEventGestureScrollX" : 28
+ },
+ {
+ "kCGScrollWheelEventDeltaAxis2" : 2,
+ "kCGScrollWheelEventPointDeltaAxis1" : 1,
+ "relativeTimeMS" : 33,
+ "kCGScrollWheelEventIsContinuous" : 1,
+ "kCGScrollWheelEventScrollPhase" : 2,
+ "kCGScrollWheelEventPointDeltaAxis2" : 16,
+ "windowLocation" : "{400, 300}",
+ "kCGSEventTypeField" : 22
+ },
+ {
+ "kCGEventGestureHIDType" : 6,
+ "relativeTimeMS" : 41,
+ "windowLocation" : "{400, 300}",
+ "kCGEventGestureScrollY" : 1,
+ "kCGEventGesturePhase" : 2,
+ "kCGEventScrollGestureFlagBits" : 1,
+ "kCGSEventTypeField" : 29,
+ "kCGEventGestureScrollX" : 35
+ },
+ {
+ "kCGScrollWheelEventDeltaAxis2" : 2,
+ "kCGScrollWheelEventPointDeltaAxis1" : 1,
+ "relativeTimeMS" : 41,
+ "kCGScrollWheelEventIsContinuous" : 1,
+ "kCGScrollWheelEventScrollPhase" : 2,
+ "kCGScrollWheelEventPointDeltaAxis2" : 24,
+ "windowLocation" : "{400, 300}",
+ "kCGSEventTypeField" : 22
+ },
+ {
+ "kCGEventGestureHIDType" : 6,
+ "relativeTimeMS" : 49,
+ "windowLocation" : "{400, 300}",
+ "kCGEventGestureScrollY" : -1,
+ "kCGEventGesturePhase" : 2,
+ "kCGEventScrollGestureFlagBits" : 1,
+ "kCGSEventTypeField" : 29,
+ "kCGEventGestureScrollX" : 45
+ },
+ {
+ "kCGScrollWheelEventScrollCount" : 1,
+ "kCGScrollWheelEventDeltaAxis2" : 4,
+ "kCGScrollWheelEventPointDeltaAxis1" : -1,
+ "relativeTimeMS" : 49,
+ "kCGScrollWheelEventIsContinuous" : 1,
+ "kCGScrollWheelEventScrollPhase" : 2,
+ "kCGScrollWheelEventPointDeltaAxis2" : 37,
+ "windowLocation" : "{400, 300}",
+ "kCGSEventTypeField" : 22
+ },
+ {
+ "kCGEventGestureHIDType" : 6,
+ "relativeTimeMS" : 57,
+ "windowLocation" : "{400, 300}",
+ "kCGEventGestureScrollY" : -3,
+ "kCGEventGesturePhase" : 2,
+ "kCGEventScrollGestureFlagBits" : 1,
+ "kCGSEventTypeField" : 29,
+ "kCGEventGestureScrollX" : 57
+ },
+ {
+ "kCGScrollWheelEventScrollCount" : 1,
+ "kCGScrollWheelEventDeltaAxis2" : 5,
+ "kCGScrollWheelEventPointDeltaAxis1" : -1,
+ "relativeTimeMS" : 57,
+ "kCGScrollWheelEventIsContinuous" : 1,
+ "kCGScrollWheelEventScrollPhase" : 2,
+ "kCGScrollWheelEventPointDeltaAxis2" : 54,
+ "windowLocation" : "{400, 300}",
+ "kCGSEventTypeField" : 22
+ },
+ {
+ "kCGEventGestureHIDType" : 6,
+ "relativeTimeMS" : 65,
+ "windowLocation" : "{400, 300}",
+ "kCGEventGestureScrollY" : -5,
+ "kCGEventGesturePhase" : 2,
+ "kCGEventScrollGestureFlagBits" : 1,
+ "kCGSEventTypeField" : 29,
+ "kCGEventGestureScrollX" : 81
+ },
+ {
+ "kCGScrollWheelEventScrollCount" : 1,
+ "kCGScrollWheelEventDeltaAxis2" : 9,
+ "kCGScrollWheelEventPointDeltaAxis1" : -2,
+ "relativeTimeMS" : 65,
+ "kCGScrollWheelEventIsContinuous" : 1,
+ "kCGScrollWheelEventScrollPhase" : 2,
+ "kCGScrollWheelEventPointDeltaAxis2" : 92,
+ "windowLocation" : "{400, 300}",
+ "kCGSEventTypeField" : 22
+ },
+ ]);
+}
+
+NSString *completeSwipeBackEventStream()
+{
+ return QUOTE([
+ {
+ "kCGEventGestureHIDType" : 6,
+ "relativeTimeMS" : 73,
+ "windowLocation" : "{400, 300}",
+ "kCGEventGestureScrollY" : -3,
+ "kCGEventGesturePhase" : 2,
+ "kCGEventScrollGestureFlagBits" : 1,
+ "kCGSEventTypeField" : 29,
+ "kCGEventGestureScrollX" : 75
+ },
+ {
+ "kCGScrollWheelEventScrollCount" : 1,
+ "kCGScrollWheelEventDeltaAxis2" : 11,
+ "kCGScrollWheelEventPointDeltaAxis1" : -1,
+ "relativeTimeMS" : 73,
+ "kCGScrollWheelEventIsContinuous" : 1,
+ "kCGScrollWheelEventScrollPhase" : 2,
+ "kCGScrollWheelEventPointDeltaAxis2" : 106,
+ "windowLocation" : "{400, 300}",
+ "kCGSEventTypeField" : 22
+ },
+ {
+ "kCGEventGestureHIDType" : 6,
+ "relativeTimeMS" : 81,
+ "windowLocation" : "{400, 300}",
+ "kCGEventGestureScrollY" : -3,
+ "kCGEventGesturePhase" : 2,
+ "kCGEventScrollGestureFlagBits" : 1,
+ "kCGSEventTypeField" : 29,
+ "kCGEventGestureScrollX" : 85
+ },
+ {
+ "kCGScrollWheelEventScrollCount" : 1,
+ "kCGScrollWheelEventDeltaAxis2" : 13,
+ "kCGScrollWheelEventPointDeltaAxis1" : -1,
+ "relativeTimeMS" : 81,
+ "kCGScrollWheelEventIsContinuous" : 1,
+ "kCGScrollWheelEventScrollPhase" : 2,
+ "kCGScrollWheelEventPointDeltaAxis2" : 127,
+ "windowLocation" : "{400, 300}",
+ "kCGSEventTypeField" : 22
+ },
+ {
+ "kCGEventGestureHIDType" : 6,
+ "relativeTimeMS" : 89,
+ "windowLocation" : "{400, 300}",
+ "kCGEventGestureScrollY" : -1,
+ "kCGEventGesturePhase" : 2,
+ "kCGEventScrollGestureFlagBits" : 1,
+ "kCGSEventTypeField" : 29,
+ "kCGEventGestureScrollX" : 91
+ },
+ {
+ "kCGScrollWheelEventScrollCount" : 1,
+ "kCGScrollWheelEventDeltaAxis2" : 14,
+ "kCGScrollWheelEventPointDeltaAxis1" : -1,
+ "relativeTimeMS" : 89,
+ "kCGScrollWheelEventIsContinuous" : 1,
+ "kCGScrollWheelEventScrollPhase" : 2,
+ "kCGScrollWheelEventPointDeltaAxis2" : 139,
+ "windowLocation" : "{400, 300}",
+ "kCGSEventTypeField" : 22
+ },
+ {
+ "kCGEventGestureHIDType" : 6,
+ "relativeTimeMS" : 97,
+ "windowLocation" : "{400, 300}",
+ "kCGEventGestureScrollY" : 2,
+ "kCGEventGesturePhase" : 2,
+ "kCGEventScrollGestureFlagBits" : 1,
+ "kCGSEventTypeField" : 29,
+ "kCGEventGestureScrollX" : 136
+ },
+ {
+ "kCGScrollWheelEventScrollCount" : 1,
+ "kCGScrollWheelEventDeltaAxis2" : 20,
+ "kCGScrollWheelEventPointDeltaAxis1" : 1,
+ "relativeTimeMS" : 97,
+ "kCGScrollWheelEventIsContinuous" : 1,
+ "kCGScrollWheelEventScrollPhase" : 2,
+ "kCGScrollWheelEventPointDeltaAxis2" : 204,
+ "windowLocation" : "{400, 300}",
+ "kCGSEventTypeField" : 22
+ },
+ {
+ "kCGEventGestureHIDType" : 6,
+ "relativeTimeMS" : 105,
+ "windowLocation" : "{400, 300}",
+ "kCGEventGestureScrollY" : 5,
+ "kCGEventGesturePhase" : 2,
+ "kCGEventScrollGestureFlagBits" : 1,
+ "kCGSEventTypeField" : 29,
+ "kCGEventGestureScrollX" : 92
+ },
+ {
+ "kCGScrollWheelEventScrollCount" : 1,
+ "kCGScrollWheelEventDeltaAxis2" : 14,
+ "kCGScrollWheelEventPointDeltaAxis1" : 2,
+ "relativeTimeMS" : 105,
+ "kCGScrollWheelEventIsContinuous" : 1,
+ "kCGScrollWheelEventScrollPhase" : 2,
+ "kCGScrollWheelEventPointDeltaAxis2" : 136,
+ "windowLocation" : "{400, 300}",
+ "kCGSEventTypeField" : 22
+ },
+ {
+ "kCGEventGestureHIDType" : 6,
+ "relativeTimeMS" : 113,
+ "windowLocation" : "{400, 300}",
+ "kCGEventGestureScrollY" : 14,
+ "kCGEventGesturePhase" : 2,
+ "kCGEventScrollGestureFlagBits" : 1,
+ "kCGSEventTypeField" : 29,
+ "kCGEventGestureScrollX" : 133
+ },
+ {
+ "kCGScrollWheelEventScrollPhase" : 2,
+ "kCGScrollWheelEventPointDeltaAxis2" : 192,
+ "kCGSEventTypeField" : 22,
+ "kCGScrollWheelEventDeltaAxis1" : 1,
+ "kCGScrollWheelEventIsContinuous" : 1,
+ "relativeTimeMS" : 113,
+ "kCGScrollWheelEventScrollCount" : 1,
+ "kCGScrollWheelEventDeltaAxis2" : 19,
+ "windowLocation" : "{400, 300}",
+ "kCGScrollWheelEventPointDeltaAxis1" : 7
+ },
+ {
+ "relativeTimeMS" : 121,
+ "kCGEventScrollGestureFlagBits" : 1,
+ "kCGEventGestureHIDType" : 6,
+ "kCGSEventTypeField" : 29,
+ "kCGEventGesturePhase" : 4,
+ "windowLocation" : "{400, 300}"
+ },
+ {
+ "relativeTimeMS" : 121,
+ "kCGEventGestureHIDType" : 62,
+ "kCGSEventTypeField" : 29,
+ "kCGEventGestureStartEndSeriesType" : 6,
+ "windowLocation" : "{400, 300}"
+ },
+ {
+ "kCGScrollWheelEventScrollCount" : 1,
+ "relativeTimeMS" : 139,
+ "windowLocation" : "{400, 300}",
+ "kCGSEventTypeField" : 22,
+ "kCGScrollWheelEventScrollPhase" : 4,
+ "kCGScrollWheelEventIsContinuous" : 1
+ }
+ ]);
+}
+
+#endif
</ins></span></pre></div>
<a id="trunkToolsTestRunnerSharedUIScriptContextBindingsUIScriptControlleridl"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/Tools/TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -162,6 +162,11 @@
</span><span class="cx"> // }
</span><span class="cx"> void sendEventStream(DOMString eventsJSON, object callback);
</span><span class="cx">
</span><ins>+ void beginBackSwipe(object callback);
+ void completeBackSwipe(object callback);
+
+ void playBackEventStream(DOMString eventStream, object callback);
+
</ins><span class="cx"> // Equivalent of pressing the Done button in the form accessory bar.
</span><span class="cx"> void dismissFormAccessoryView();
</span><span class="cx">
</span></span></pre></div>
<a id="trunkToolsTestRunnerSharedUIScriptContextUIScriptControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestRunnerShared/UIScriptContext/UIScriptController.cpp (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestRunnerShared/UIScriptContext/UIScriptController.cpp        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/Tools/TestRunnerShared/UIScriptContext/UIScriptController.cpp        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -194,6 +194,11 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx">
</span><ins>+void UIScriptController::playBackEventStream(JSStringRef stream, JSValueRef callback)
+{
+ platformPlayBackEventStream(stream, callback);
+}
+
</ins><span class="cx"> #if !PLATFORM(IOS)
</span><span class="cx"> void UIScriptController::touchDownAtPoint(long x, long y, long touchCount, JSValueRef)
</span><span class="cx"> {
</span><span class="lines">@@ -418,6 +423,18 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void UIScriptController::beginBackSwipe(JSValueRef callback)
+{
+}
+
+void UIScriptController::completeBackSwipe(JSValueRef callback)
+{
+}
+
+void UIScriptController::platformPlayBackEventStream(JSStringRef, JSValueRef)
+{
+}
+
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> void UIScriptController::uiScriptComplete(JSStringRef result)
</span></span></pre></div>
<a id="trunkToolsTestRunnerSharedUIScriptContextUIScriptControllerh"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestRunnerShared/UIScriptContext/UIScriptController.h (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestRunnerShared/UIScriptContext/UIScriptController.h        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/Tools/TestRunnerShared/UIScriptContext/UIScriptController.h        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -95,6 +95,9 @@
</span><span class="cx"> void immediateScrollToOffset(long x, long y);
</span><span class="cx"> void immediateZoomToScale(double scale);
</span><span class="cx">
</span><ins>+ void beginBackSwipe(JSValueRef callback);
+ void completeBackSwipe(JSValueRef callback);
+
</ins><span class="cx"> void setDidStartFormControlInteractionCallback(JSValueRef);
</span><span class="cx"> JSValueRef didStartFormControlInteractionCallback() const;
</span><span class="cx">
</span><span class="lines">@@ -122,6 +125,8 @@
</span><span class="cx"> void setDidEndScrollingCallback(JSValueRef);
</span><span class="cx"> JSValueRef didEndScrollingCallback() const;
</span><span class="cx">
</span><ins>+ void playBackEventStream(JSStringRef stream, JSValueRef callback);
+
</ins><span class="cx"> double zoomScale() const;
</span><span class="cx"> double minimumZoomScale() const;
</span><span class="cx"> double maximumZoomScale() const;
</span><span class="lines">@@ -166,6 +171,7 @@
</span><span class="cx"> void platformSetDidHideKeyboardCallback();
</span><span class="cx"> void platformSetDidEndScrollingCallback();
</span><span class="cx"> void platformClearAllCallbacks();
</span><ins>+ void platformPlayBackEventStream(JSStringRef, JSValueRef);
</ins><span class="cx">
</span><span class="cx"> JSClassRef wrapperClass() final;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkToolsTestRunnerSharedspiCoreGraphicsSPIh"></a>
<div class="addfile"><h4>Added: trunk/Tools/TestRunnerShared/spi/CoreGraphicsSPI.h (0 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestRunnerShared/spi/CoreGraphicsSPI.h         (rev 0)
+++ trunk/Tools/TestRunnerShared/spi/CoreGraphicsSPI.h        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -0,0 +1,92 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#import <wtf/Platform.h>
+
+#if USE(APPLE_INTERNAL_SDK)
+
+#import <CoreGraphics/CGEventPrivate.h>
+#import <CoreGraphics/CGSEvent.h>
+
+#else
+
+WTF_EXTERN_C_BEGIN
+
+static const CGEventField kCGSEventWindowIDField = (CGEventField)51;
+static const CGEventField kCGSEventTypeField = (CGEventField)55;
+static const CGEventField kCGEventGestureHIDType = (CGEventField)110;
+static const CGEventField kCGEventGestureIsPreflight = (CGEventField)111;
+static const CGEventField kCGEventGestureZoomValue = (CGEventField)113;
+static const CGEventField kCGEventGestureRotationValue = (CGEventField)114;
+static const CGEventField kCGEventGestureSwipeValue = (CGEventField)115;
+static const CGEventField kCGEventGesturePreflightProgress = (CGEventField)116;
+static const CGEventField kCGEventGestureStartEndSeriesType = (CGEventField)117;
+static const CGEventField kCGEventGestureScrollX = (CGEventField)118;
+static const CGEventField kCGEventGestureScrollY = (CGEventField)119;
+static const CGEventField kCGEventGestureScrollZ = (CGEventField)120;
+static const CGEventField kCGEventGestureSwipeMotion = (CGEventField)123;
+static const CGEventField kCGEventGestureSwipeProgress = (CGEventField)124;
+static const CGEventField kCGEventGestureSwipePositionX = (CGEventField)125;
+static const CGEventField kCGEventGestureSwipePositionY = (CGEventField)126;
+static const CGEventField kCGEventGestureSwipeVelocityX = (CGEventField)129;
+static const CGEventField kCGEventGestureSwipeVelocityY = (CGEventField)130;
+static const CGEventField kCGEventGestureSwipeVelocityZ = (CGEventField)131;
+static const CGEventField kCGEventGesturePhase = (CGEventField)132;
+static const CGEventField kCGEventGestureMask = (CGEventField)133;
+static const CGEventField kCGEventGestureSwipeMask = (CGEventField)134;
+static const CGEventField kCGEventScrollGestureFlagBits = (CGEventField)135;
+static const CGEventField kCGEventSwipeGestureFlagBits = (CGEventField)136;
+static const CGEventField kCGEventGestureFlavor = (CGEventField)138;
+static const CGEventField kCGEventGestureZoomDeltaX = (CGEventField)139;
+static const CGEventField kCGEventGestureZoomDeltaY = (CGEventField)140;
+static const CGEventField kCGEventGestureProgress = (CGEventField)142;
+static const CGEventField kCGEventGestureStage = (CGEventField)143;
+static const CGEventField kCGEventGestureBehavior = (CGEventField)144;
+static const CGEventField kCGEventTransitionProgress = (CGEventField)147;
+static const CGEventField kCGEventStagePressure = (CGEventField)148;
+
+enum {
+ kCGSEventScrollWheel = 22,
+ kCGSEventZoom = 28,
+ kCGSEventGesture = 29,
+ kCGSEventDockControl = 30,
+ kCGSEventFluidTouchGesture = 31,
+};
+typedef uint32_t CGSEventType;
+
+enum {
+ kCGHIDEventTypeGestureStarted = 61,
+ kCGHIDEventTypeGestureEnded = 62,
+};
+typedef uint32_t CGSHIDEventType;
+
+CGPoint CGEventGetWindowLocation(CGEventRef);
+void CGEventSetWindowLocation(CGEventRef, CGPoint);
+
+WTF_EXTERN_C_END
+
+#endif // USE(APPLE_INTERNAL_SDK)
</ins></span></pre></div>
<a id="trunkToolsTestRunnerSharedspiIOKitSPIhfromrev214585trunkToolsWebKitTestRunneriosIOKitSPIh"></a>
<div class="copfile"><h4>Copied: trunk/Tools/TestRunnerShared/spi/IOKitSPI.h (from rev 214585, trunk/Tools/WebKitTestRunner/ios/IOKitSPI.h) (0 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestRunnerShared/spi/IOKitSPI.h         (rev 0)
+++ trunk/Tools/TestRunnerShared/spi/IOKitSPI.h        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -0,0 +1,203 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#import <wtf/Platform.h>
+
+#if USE(APPLE_INTERNAL_SDK)
+
+#import <IOKit/hid/IOHIDEvent.h>
+#import <IOKit/hid/IOHIDEventData.h>
+#import <IOKit/hid/IOHIDEventSystemClient.h>
+#import <IOKit/hid/IOHIDUsageTables.h>
+
+#else
+
+WTF_EXTERN_C_BEGIN
+
+#ifdef __LP64__
+typedef double IOHIDFloat;
+#else
+typedef float IOHIDFloat;
+#endif
+
+enum {
+ kIOHIDEventOptionNone = 0,
+};
+
+typedef UInt32 IOOptionBits;
+typedef uint32_t IOHIDEventOptionBits;
+typedef uint32_t IOHIDEventField;
+
+typedef struct __IOHIDEventSystemClient * IOHIDEventSystemClientRef;
+typedef struct __IOHIDEvent * IOHIDEventRef;
+
+#define IOHIDEventFieldBase(type) (type << 16)
+
+enum {
+ kHIDPage_KeyboardOrKeypad = 0x07,
+ kHIDPage_VendorDefinedStart = 0xFF00
+};
+
+enum {
+ kIOHIDDigitizerEventRange = 1<<0,
+ kIOHIDDigitizerEventTouch = 1<<1,
+ kIOHIDDigitizerEventPosition = 1<<2,
+ kIOHIDDigitizerEventIdentity = 1<<5,
+ kIOHIDDigitizerEventAttribute = 1<<6,
+ kIOHIDDigitizerEventCancel = 1<<7,
+ kIOHIDDigitizerEventStart = 1<<8,
+ kIOHIDDigitizerEventEstimatedAltitude = 1<<28,
+ kIOHIDDigitizerEventEstimatedAzimuth = 1<<29,
+ kIOHIDDigitizerEventEstimatedPressure = 1<<30
+};
+typedef uint32_t IOHIDDigitizerEventMask;
+
+enum {
+ kIOHIDDigitizerEventUpdateAltitudeMask = 1<<28,
+ kIOHIDDigitizerEventUpdateAzimuthMask = 1<<29,
+ kIOHIDDigitizerEventUpdatePressureMask = 1<<30
+};
+
+enum {
+ kIOHIDEventTypeNULL,
+ kIOHIDEventTypeVendorDefined,
+ kIOHIDEventTypeKeyboard = 3,
+ kIOHIDEventTypeRotation = 5,
+ kIOHIDEventTypeScroll = 6,
+ kIOHIDEventTypeZoom = 8,
+ kIOHIDEventTypeDigitizer = 11,
+ kIOHIDEventTypeNavigationSwipe = 16,
+ kIOHIDEventTypeForce = 32,
+
+};
+typedef uint32_t IOHIDEventType;
+
+enum {
+ kIOHIDEventFieldVendorDefinedUsagePage = IOHIDEventFieldBase(kIOHIDEventTypeVendorDefined),
+ kIOHIDEventFieldVendorDefinedReserved,
+ kIOHIDEventFieldVendorDefinedReserved1,
+ kIOHIDEventFieldVendorDefinedDataLength,
+ kIOHIDEventFieldVendorDefinedData
+};
+
+enum {
+ kIOHIDEventFieldDigitizerX = IOHIDEventFieldBase(kIOHIDEventTypeDigitizer),
+ kIOHIDEventFieldDigitizerY,
+ kIOHIDEventFieldDigitizerMajorRadius = kIOHIDEventFieldDigitizerX + 20,
+ kIOHIDEventFieldDigitizerMinorRadius,
+ kIOHIDEventFieldDigitizerIsDisplayIntegrated = kIOHIDEventFieldDigitizerMajorRadius + 5,
+};
+
+enum {
+ kIOHIDTransducerRange = 0x00010000,
+ kIOHIDTransducerTouch = 0x00020000,
+ kIOHIDTransducerInvert = 0x00040000,
+ kIOHIDTransducerDisplayIntegrated = 0x00080000
+};
+
+enum {
+ kIOHIDDigitizerTransducerTypeStylus = 0,
+ kIOHIDDigitizerTransducerTypeFinger = 2,
+ kIOHIDDigitizerTransducerTypeHand = 3
+};
+typedef uint32_t IOHIDDigitizerTransducerType;
+
+enum {
+ kIOHIDEventFieldDigitizerWillUpdateMask = 720924,
+ kIOHIDEventFieldDigitizerDidUpdateMask = 720925
+};
+
+IOHIDEventRef IOHIDEventCreateDigitizerEvent(CFAllocatorRef, uint64_t, IOHIDDigitizerTransducerType, uint32_t, uint32_t, IOHIDDigitizerEventMask, uint32_t, IOHIDFloat, IOHIDFloat, IOHIDFloat, IOHIDFloat, IOHIDFloat, boolean_t, boolean_t, IOOptionBits);
+
+IOHIDEventRef IOHIDEventCreateDigitizerFingerEvent(CFAllocatorRef, uint64_t, uint32_t, uint32_t, IOHIDDigitizerEventMask, IOHIDFloat, IOHIDFloat, IOHIDFloat, IOHIDFloat, IOHIDFloat, boolean_t, boolean_t, IOHIDEventOptionBits);
+
+IOHIDEventRef IOHIDEventCreateForceEvent(CFAllocatorRef, uint64_t, uint32_t, IOHIDFloat, uint32_t, IOHIDFloat, IOHIDEventOptionBits);
+
+IOHIDEventRef IOHIDEventCreateKeyboardEvent(CFAllocatorRef, uint64_t, uint32_t, uint32_t, boolean_t, IOOptionBits);
+
+IOHIDEventRef IOHIDEventCreateVendorDefinedEvent(CFAllocatorRef, uint64_t, uint32_t, uint32_t, uint32_t, uint8_t*, CFIndex, IOHIDEventOptionBits);
+
+IOHIDEventRef IOHIDEventCreateDigitizerStylusEventWithPolarOrientation(CFAllocatorRef, uint64_t, uint32_t, uint32_t, IOHIDDigitizerEventMask, uint32_t, IOHIDFloat, IOHIDFloat, IOHIDFloat, IOHIDFloat, IOHIDFloat, IOHIDFloat, IOHIDFloat, IOHIDFloat, boolean_t, boolean_t, IOHIDEventOptionBits);
+
+IOHIDEventType IOHIDEventGetType(IOHIDEventRef);
+
+void IOHIDEventSetFloatValue(IOHIDEventRef, IOHIDEventField, IOHIDFloat);
+
+CFIndex IOHIDEventGetIntegerValue(IOHIDEventRef, IOHIDEventField);
+void IOHIDEventSetIntegerValue(IOHIDEventRef, IOHIDEventField, CFIndex);
+
+void IOHIDEventAppendEvent(IOHIDEventRef, IOHIDEventRef, IOOptionBits);
+
+IOHIDEventSystemClientRef IOHIDEventSystemClientCreate(CFAllocatorRef);
+
+#define kGSEventPathInfoInRange (1 << 0)
+#define kGSEventPathInfoInTouch (1 << 1)
+
+enum {
+ kHIDUsage_KeyboardA = 0x04,
+ kHIDUsage_Keyboard1 = 0x1E,
+ kHIDUsage_Keyboard2 = 0x1F,
+ kHIDUsage_Keyboard3 = 0x20,
+ kHIDUsage_Keyboard4 = 0x21,
+ kHIDUsage_Keyboard5 = 0x22,
+ kHIDUsage_Keyboard6 = 0x23,
+ kHIDUsage_Keyboard7 = 0x24,
+ kHIDUsage_Keyboard8 = 0x25,
+ kHIDUsage_Keyboard9 = 0x26,
+ kHIDUsage_Keyboard0 = 0x27,
+ kHIDUsage_KeyboardReturnOrEnter = 0x28,
+ kHIDUsage_KeyboardEscape = 0x29,
+ kHIDUsage_KeyboardDeleteOrBackspace = 0x2A,
+ kHIDUsage_KeyboardTab = 0x2B,
+ kHIDUsage_KeyboardSpacebar = 0x2C,
+ kHIDUsage_KeyboardHyphen = 0x2D,
+ kHIDUsage_KeyboardEqualSign = 0x2E,
+ kHIDUsage_KeyboardOpenBracket = 0x2F,
+ kHIDUsage_KeyboardCloseBracket = 0x30,
+ kHIDUsage_KeyboardBackslash = 0x31,
+ kHIDUsage_KeyboardSemicolon = 0x33,
+ kHIDUsage_KeyboardQuote = 0x34,
+ kHIDUsage_KeyboardGraveAccentAndTilde = 0x35,
+ kHIDUsage_KeyboardComma = 0x36,
+ kHIDUsage_KeyboardPeriod = 0x37,
+ kHIDUsage_KeyboardSlash = 0x38,
+ kHIDUsage_KeyboardF1 = 0x3A,
+ kHIDUsage_KeyboardHome = 0x4A,
+ kHIDUsage_KeyboardPageUp = 0x4B,
+ kHIDUsage_KeyboardEnd = 0x4D,
+ kHIDUsage_KeyboardRightArrow = 0x4F,
+ kHIDUsage_KeyboardLeftArrow = 0x50,
+ kHIDUsage_KeyboardDownArrow = 0x51,
+ kHIDUsage_KeyboardUpArrow = 0x52,
+ kHIDUsage_KeyboardLeftControl = 0xE0,
+ kHIDUsage_KeyboardLeftShift = 0xE1,
+ kHIDUsage_KeyboardLeftAlt = 0xE2
+};
+
+WTF_EXTERN_C_END
+
+#endif // USE(APPLE_INTERNAL_SDK)
</ins></span></pre></div>
<a id="trunkToolsWebKitTestRunnerEventSenderProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Tools/WebKitTestRunner/EventSenderProxy.h (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebKitTestRunner/EventSenderProxy.h        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/Tools/WebKitTestRunner/EventSenderProxy.h        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -71,7 +71,6 @@
</span><span class="cx"> void mouseMoveTo(double x, double y);
</span><span class="cx"> void mouseScrollBy(int x, int y);
</span><span class="cx"> void mouseScrollByWithWheelAndMomentumPhases(int x, int y, int phase, int momentum);
</span><del>- void swipeGestureWithWheelAndMomentumPhases(int x, int y, int phase, int momentum);
</del><span class="cx"> void continuousMouseScrollBy(int x, int y, bool paged);
</span><span class="cx">
</span><span class="cx"> void leapForward(int milliseconds);
</span></span></pre></div>
<a id="trunkToolsWebKitTestRunnerInjectedBundleBindingsEventSendingControlleridl"></a>
<div class="modfile"><h4>Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -34,7 +34,6 @@
</span><span class="cx"> void mouseForceChanged(double force);
</span><span class="cx"> void mouseScrollBy(long x, long y);
</span><span class="cx"> void mouseScrollByWithWheelAndMomentumPhases(long x, long y, DOMString phase, DOMString momentum);
</span><del>- void swipeGestureWithWheelAndMomentumPhases(long x, long y, DOMString phase, DOMString momentum);
</del><span class="cx"> void continuousMouseScrollBy(long x, long y, optional boolean paged);
</span><span class="cx"> object contextClick();
</span><span class="cx"> void scheduleAsynchronousClick();
</span></span></pre></div>
<a id="trunkToolsWebKitTestRunnerInjectedBundleEventSendingControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/EventSendingController.cpp (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebKitTestRunner/InjectedBundle/EventSendingController.cpp        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/EventSendingController.cpp        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -483,38 +483,6 @@
</span><span class="cx"> WKBundlePagePostMessage(InjectedBundle::singleton().page()->page(), EventSenderMessageName.get(), EventSenderMessageBody.get());
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void EventSendingController::swipeGestureWithWheelAndMomentumPhases(int x, int y, JSStringRef phaseStr, JSStringRef momentumStr)
-{
- WKRetainPtr<WKStringRef> EventSenderMessageName(AdoptWK, WKStringCreateWithUTF8CString("EventSender"));
- WKRetainPtr<WKMutableDictionaryRef> EventSenderMessageBody(AdoptWK, WKMutableDictionaryCreate());
-
- WKRetainPtr<WKStringRef> subMessageKey(AdoptWK, WKStringCreateWithUTF8CString("SubMessage"));
- WKRetainPtr<WKStringRef> subMessageName(AdoptWK, WKStringCreateWithUTF8CString("SwipeGestureWithWheelAndMomentumPhases"));
- WKDictionarySetItem(EventSenderMessageBody.get(), subMessageKey.get(), subMessageName.get());
-
- WKRetainPtr<WKStringRef> xKey(AdoptWK, WKStringCreateWithUTF8CString("X"));
- WKRetainPtr<WKDoubleRef> xRef(AdoptWK, WKDoubleCreate(x));
- WKDictionarySetItem(EventSenderMessageBody.get(), xKey.get(), xRef.get());
-
- WKRetainPtr<WKStringRef> yKey(AdoptWK, WKStringCreateWithUTF8CString("Y"));
- WKRetainPtr<WKDoubleRef> yRef(AdoptWK, WKDoubleCreate(y));
- WKDictionarySetItem(EventSenderMessageBody.get(), yKey.get(), yRef.get());
-
- uint64_t phase = cgEventPhaseFromString(phaseStr);
- uint64_t momentum = cgEventMomentumPhaseFromString(momentumStr);
-
- WKRetainPtr<WKStringRef> phaseKey(AdoptWK, WKStringCreateWithUTF8CString("Phase"));
- WKRetainPtr<WKUInt64Ref> phaseRef(AdoptWK, WKUInt64Create(phase));
- WKDictionarySetItem(EventSenderMessageBody.get(), phaseKey.get(), phaseRef.get());
-
- WKRetainPtr<WKStringRef> momentumKey(AdoptWK, WKStringCreateWithUTF8CString("Momentum"));
- WKRetainPtr<WKUInt64Ref> momentumRef(AdoptWK, WKUInt64Create(momentum));
- WKDictionarySetItem(EventSenderMessageBody.get(), momentumKey.get(), momentumRef.get());
-
- WKBundlePageForceRepaint(InjectedBundle::singleton().page()->page()); // Triggers a scrolling tree commit.
- WKBundlePagePostMessage(InjectedBundle::singleton().page()->page(), EventSenderMessageName.get(), EventSenderMessageBody.get());
-}
-
</del><span class="cx"> void EventSendingController::continuousMouseScrollBy(int x, int y, bool paged)
</span><span class="cx"> {
</span><span class="cx"> WKRetainPtr<WKStringRef> EventSenderMessageName(AdoptWK, WKStringCreateWithUTF8CString("EventSender"));
</span></span></pre></div>
<a id="trunkToolsWebKitTestRunnerInjectedBundleEventSendingControllerh"></a>
<div class="modfile"><h4>Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/EventSendingController.h (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebKitTestRunner/InjectedBundle/EventSendingController.h        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/EventSendingController.h        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -52,7 +52,6 @@
</span><span class="cx"> void mouseForceChanged(double force);
</span><span class="cx"> void mouseScrollBy(int x, int y);
</span><span class="cx"> void mouseScrollByWithWheelAndMomentumPhases(int x, int y, JSStringRef phase, JSStringRef momentum);
</span><del>- void swipeGestureWithWheelAndMomentumPhases(int x, int y, JSStringRef phase, JSStringRef momentum);
</del><span class="cx"> void continuousMouseScrollBy(int x, int y, bool paged);
</span><span class="cx"> JSValueRef contextClick();
</span><span class="cx"> void leapForward(int milliseconds);
</span></span></pre></div>
<a id="trunkToolsWebKitTestRunnerInjectedBundleiosEventSenderProxyIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/ios/EventSenderProxyIOS.mm (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebKitTestRunner/InjectedBundle/ios/EventSenderProxyIOS.mm        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/ios/EventSenderProxyIOS.mm        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -103,11 +103,6 @@
</span><span class="cx"> // Write me.
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void EventSenderProxy::swipeGestureWithWheelAndMomentumPhases(int, int, int, int)
-{
- // Write me.
-}
-
</del><span class="cx"> void EventSenderProxy::continuousMouseScrollBy(int x, int y, bool paged)
</span><span class="cx"> {
</span><span class="cx"> // Write me.
</span></span></pre></div>
<a id="trunkToolsWebKitTestRunnerTestControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/WebKitTestRunner/TestController.cpp (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebKitTestRunner/TestController.cpp        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/Tools/WebKitTestRunner/TestController.cpp        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -1315,23 +1315,6 @@
</span><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- if (WKStringIsEqualToUTF8CString(subMessageName, "SwipeGestureWithWheelAndMomentumPhases")) {
- WKRetainPtr<WKStringRef> xKey = adoptWK(WKStringCreateWithUTF8CString("X"));
- double x = WKDoubleGetValue(static_cast<WKDoubleRef>(WKDictionaryGetItemForKey(messageBodyDictionary, xKey.get())));
-
- WKRetainPtr<WKStringRef> yKey = adoptWK(WKStringCreateWithUTF8CString("Y"));
- double y = WKDoubleGetValue(static_cast<WKDoubleRef>(WKDictionaryGetItemForKey(messageBodyDictionary, yKey.get())));
-
- WKRetainPtr<WKStringRef> phaseKey = adoptWK(WKStringCreateWithUTF8CString("Phase"));
- int phase = static_cast<int>(WKUInt64GetValue(static_cast<WKUInt64Ref>(WKDictionaryGetItemForKey(messageBodyDictionary, phaseKey.get()))));
- WKRetainPtr<WKStringRef> momentumKey = adoptWK(WKStringCreateWithUTF8CString("Momentum"));
- int momentum = static_cast<int>(WKUInt64GetValue(static_cast<WKUInt64Ref>(WKDictionaryGetItemForKey(messageBodyDictionary, momentumKey.get()))));
-
- m_eventSenderProxy->swipeGestureWithWheelAndMomentumPhases(x, y, phase, momentum);
-
- return;
- }
-
</del><span class="cx"> ASSERT_NOT_REACHED();
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkToolsWebKitTestRunnerWebKitTestRunnerxcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Tools/WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/Tools/WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -62,6 +62,11 @@
</span><span class="cx">                 29A8FCDD145F0337009045A6 /* JSAccessibilityTextMarkerRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29A8FCE1345E7021006AA5A6 /* JSAccessibilityTextMarkerRange.cpp */; };
</span><span class="cx">                 29A8FCE2145F037B009045A6 /* AccessibilityTextMarkerRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29A8FCE1145F037B009045A6 /* AccessibilityTextMarkerRange.cpp */; };
</span><span class="cx">                 29A8FCE5145F0464009045A6 /* AccessibilityTextMarkerRangeMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 29A8FCE4145F0464009045A6 /* AccessibilityTextMarkerRangeMac.mm */; };
</span><ins>+                2DB6187E1D7D58D400978D19 /* CoreGraphicsSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB6187D1D7D58D400978D19 /* CoreGraphicsSPI.h */; };
+                2DD4C49A1D6E7D3B0007379C /* EventSerializerMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DD4C4981D6E7D3B0007379C /* EventSerializerMac.h */; };
+                2DD4C49B1D6E7D3B0007379C /* EventSerializerMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2DD4C4991D6E7D3B0007379C /* EventSerializerMac.mm */; };
+                2DFA98481D7F70CF00AFF2C9 /* SharedEventStreamsMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DFA98461D7F70CF00AFF2C9 /* SharedEventStreamsMac.h */; };
+                2DFA98491D7F70CF00AFF2C9 /* SharedEventStreamsMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2DFA98471D7F70CF00AFF2C9 /* SharedEventStreamsMac.mm */; };
</ins><span class="cx">                 2E34C90018B68808000067BB /* WebKitTestRunnerInjectedBundle.bundle in Copy Plug-Ins */ = {isa = PBXBuildFile; fileRef = BC25186211D15D54002EBC01 /* WebKitTestRunnerInjectedBundle.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
</span><span class="cx">                 2E63ED8A1891AD7E002A7AFC /* AccessibilityControllerIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2E63ED751891ACE9002A7AFC /* AccessibilityControllerIOS.mm */; };
</span><span class="cx">                 2E63ED8B1891AD7E002A7AFC /* AccessibilityTextMarkerIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2E63ED771891ACE9002A7AFC /* AccessibilityTextMarkerIOS.mm */; };
</span><span class="lines">@@ -208,7 +213,7 @@
</span><span class="cx">                 0FEB90A31905BC6A000FDBF3 /* CrashReporterInfo.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = CrashReporterInfo.mm; path = cocoa/CrashReporterInfo.mm; sourceTree = "<group>"; };
</span><span class="cx">                 0FEBF8581BB61DF20028722D /* HIDEventGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HIDEventGenerator.h; sourceTree = "<group>"; };
</span><span class="cx">                 0FEBF8591BB61DF20028722D /* HIDEventGenerator.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = HIDEventGenerator.mm; sourceTree = "<group>"; };
</span><del>-                0FEBF85B1BB62A370028722D /* IOKitSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IOKitSPI.h; sourceTree = "<group>"; };
</del><ins>+                0FEBF85B1BB62A370028722D /* IOKitSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = IOKitSPI.h; path = ../TestRunnerShared/spi/IOKitSPI.h; sourceTree = "<group>"; };
</ins><span class="cx">                 0FEBF85C1BB62D460028722D /* UIKitSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIKitSPI.h; sourceTree = "<group>"; };
</span><span class="cx">                 1A3326051B75396500F89F62 /* TestOptions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TestOptions.h; sourceTree = "<group>"; };
</span><span class="cx">                 1CA211C71BCA107300B2101F /* FontWithFeatures.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = FontWithFeatures.otf; sourceTree = "<group>"; };
</span><span class="lines">@@ -238,7 +243,12 @@
</span><span class="cx">                 29A8FCE1345E7021006AA5A6 /* JSAccessibilityTextMarkerRange.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSAccessibilityTextMarkerRange.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 29A8FCE1345E7021006AA5A7 /* JSAccessibilityTextMarkerRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSAccessibilityTextMarkerRange.h; sourceTree = "<group>"; };
</span><span class="cx">                 29A8FCE4145F0464009045A6 /* AccessibilityTextMarkerRangeMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AccessibilityTextMarkerRangeMac.mm; sourceTree = "<group>"; };
</span><ins>+                2DB6187D1D7D58D400978D19 /* CoreGraphicsSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CoreGraphicsSPI.h; path = ../TestRunnerShared/spi/CoreGraphicsSPI.h; sourceTree = "<group>"; };
</ins><span class="cx">                 2DCE2CD11B84524500C7F832 /* TestControllerCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = TestControllerCocoa.mm; path = cocoa/TestControllerCocoa.mm; sourceTree = "<group>"; };
</span><ins>+                2DD4C4981D6E7D3B0007379C /* EventSerializerMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EventSerializerMac.h; path = mac/EventSerializerMac.h; sourceTree = "<group>"; };
+                2DD4C4991D6E7D3B0007379C /* EventSerializerMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = EventSerializerMac.mm; path = mac/EventSerializerMac.mm; sourceTree = "<group>"; };
+                2DFA98461D7F70CF00AFF2C9 /* SharedEventStreamsMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SharedEventStreamsMac.h; path = mac/SharedEventStreamsMac.h; sourceTree = "<group>"; };
+                2DFA98471D7F70CF00AFF2C9 /* SharedEventStreamsMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = SharedEventStreamsMac.mm; path = mac/SharedEventStreamsMac.mm; sourceTree = "<group>"; };
</ins><span class="cx">                 2E63ED751891ACE9002A7AFC /* AccessibilityControllerIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AccessibilityControllerIOS.mm; sourceTree = "<group>"; };
</span><span class="cx">                 2E63ED761891ACE9002A7AFC /* AccessibilityNotificationHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityNotificationHandler.h; sourceTree = "<group>"; };
</span><span class="cx">                 2E63ED771891ACE9002A7AFC /* AccessibilityTextMarkerIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AccessibilityTextMarkerIOS.mm; sourceTree = "<group>"; };
</span><span class="lines">@@ -474,7 +484,9 @@
</span><span class="cx">                 0F73B5471BA782FE004B3EF4 /* UIScriptContext */ = {
</span><span class="cx">                         isa = PBXGroup;
</span><span class="cx">                         children = (
</span><ins>+                                2DB6187F1D7D598800978D19 /* spi */,
</ins><span class="cx">                                 0F73B54B1BA78350004B3EF4 /* Bindings */,
</span><ins>+                                2DD4C4971D6E7D3B0007379C /* Event Serialization */,
</ins><span class="cx">                                 0F73B54E1BA78954004B3EF4 /* Derived Sources */,
</span><span class="cx">                                 0F18E6DD1D6B9AAF0027E547 /* UIScriptContext.cpp */,
</span><span class="cx">                                 0F18E6DE1D6B9AAF0027E547 /* UIScriptContext.h */,
</span><span class="lines">@@ -552,6 +564,35 @@
</span><span class="cx">                         name = Accessibility;
</span><span class="cx">                         sourceTree = "<group>";
</span><span class="cx">                 };
</span><ins>+                2DB6187F1D7D598800978D19 /* spi */ = {
+                        isa = PBXGroup;
+                        children = (
+                                2DB6187D1D7D58D400978D19 /* CoreGraphicsSPI.h */,
+                                0FEBF85B1BB62A370028722D /* IOKitSPI.h */,
+                        );
+                        name = spi;
+                        sourceTree = "<group>";
+                };
+                2DD4C4971D6E7D3B0007379C /* Event Serialization */ = {
+                        isa = PBXGroup;
+                        children = (
+                                2DFA984A1D7F79E000AFF2C9 /* mac */,
+                        );
+                        name = "Event Serialization";
+                        path = ../TestRunnerShared/EventSerialization;
+                        sourceTree = "<group>";
+                };
+                2DFA984A1D7F79E000AFF2C9 /* mac */ = {
+                        isa = PBXGroup;
+                        children = (
+                                2DD4C4981D6E7D3B0007379C /* EventSerializerMac.h */,
+                                2DD4C4991D6E7D3B0007379C /* EventSerializerMac.mm */,
+                                2DFA98461D7F70CF00AFF2C9 /* SharedEventStreamsMac.h */,
+                                2DFA98471D7F70CF00AFF2C9 /* SharedEventStreamsMac.mm */,
+                        );
+                        name = mac;
+                        sourceTree = "<group>";
+                };
</ins><span class="cx">                 2E63ED741891ACE9002A7AFC /* ios */ = {
</span><span class="cx">                         isa = PBXGroup;
</span><span class="cx">                         children = (
</span><span class="lines">@@ -589,7 +630,6 @@
</span><span class="cx">                         children = (
</span><span class="cx">                                 0FEBF8581BB61DF20028722D /* HIDEventGenerator.h */,
</span><span class="cx">                                 0FEBF8591BB61DF20028722D /* HIDEventGenerator.mm */,
</span><del>-                                0FEBF85B1BB62A370028722D /* IOKitSPI.h */,
</del><span class="cx">                                 2EE52D131890A9FB0010ED21 /* PlatformWebViewIOS.mm */,
</span><span class="cx">                                 2EE52D141890A9FB0010ED21 /* TestControllerIOS.mm */,
</span><span class="cx">                                 0FEBF85C1BB62D460028722D /* UIKitSPI.h */,
</span><span class="lines">@@ -765,7 +805,10 @@
</span><span class="cx">                         isa = PBXHeadersBuildPhase;
</span><span class="cx">                         buildActionMask = 2147483647;
</span><span class="cx">                         files = (
</span><ins>+                                2DB6187E1D7D58D400978D19 /* CoreGraphicsSPI.h in Headers */,
</ins><span class="cx">                                 0F73B5521BA78968004B3EF4 /* JSUIScriptController.h in Headers */,
</span><ins>+                                2DFA98481D7F70CF00AFF2C9 /* SharedEventStreamsMac.h in Headers */,
+                                2DD4C49A1D6E7D3B0007379C /* EventSerializerMac.h in Headers */,
</ins><span class="cx">                         );
</span><span class="cx">                         runOnlyForDeploymentPostprocessing = 0;
</span><span class="cx">                 };
</span><span class="lines">@@ -972,8 +1015,10 @@
</span><span class="cx">                                 0F73B5511BA78968004B3EF4 /* JSUIScriptController.cpp in Sources */,
</span><span class="cx">                                 0F18E7181D6BC4560027E547 /* JSWrapper.cpp in Sources */,
</span><span class="cx">                                 A185103C1B9AE0FE00744AEB /* Options.cpp in Sources */,
</span><ins>+                                2DD4C49B1D6E7D3B0007379C /* EventSerializerMac.mm in Sources */,
</ins><span class="cx">                                 A18510401B9AE13100744AEB /* PixelDumpSupport.cpp in Sources */,
</span><span class="cx">                                 A18510411B9AE13800744AEB /* TestController.cpp in Sources */,
</span><ins>+                                2DFA98491D7F70CF00AFF2C9 /* SharedEventStreamsMac.mm in Sources */,
</ins><span class="cx">                                 A185103B1B9AE0E200744AEB /* TestControllerCocoa.mm in Sources */,
</span><span class="cx">                                 31DA8A3D1E7205CC00E1DF2F /* IOSLayoutTestCommunication.cpp in Sources */,
</span><span class="cx">                                 A18510421B9AE13E00744AEB /* TestInvocation.cpp in Sources */,
</span></span></pre></div>
<a id="trunkToolsWebKitTestRunnereflEventSenderProxyEflcpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/WebKitTestRunner/efl/EventSenderProxyEfl.cpp (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebKitTestRunner/efl/EventSenderProxyEfl.cpp        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/Tools/WebKitTestRunner/efl/EventSenderProxyEfl.cpp        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -399,11 +399,6 @@
</span><span class="cx"> mouseScrollBy(x, y);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void EventSenderProxy::swipeGestureWithWheelAndMomentumPhases(int, int, int, int)
-{
- notImplemented();
-}
-
</del><span class="cx"> void EventSenderProxy::leapForward(int milliseconds)
</span><span class="cx"> {
</span><span class="cx"> if (m_eventQueue.isEmpty())
</span></span></pre></div>
<a id="trunkToolsWebKitTestRunnergtkEventSenderProxyGtkcpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/WebKitTestRunner/gtk/EventSenderProxyGtk.cpp (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebKitTestRunner/gtk/EventSenderProxyGtk.cpp        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/Tools/WebKitTestRunner/gtk/EventSenderProxyGtk.cpp        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -468,11 +468,6 @@
</span><span class="cx"> mouseScrollBy(x, y);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void EventSenderProxy::swipeGestureWithWheelAndMomentumPhases(int, int, int, int)
-{
- notImplemented();
-}
-
</del><span class="cx"> void EventSenderProxy::leapForward(int milliseconds)
</span><span class="cx"> {
</span><span class="cx"> if (m_eventQueue.isEmpty())
</span></span></pre></div>
<a id="trunkToolsWebKitTestRunneriosIOKitSPIh"></a>
<div class="delfile"><h4>Deleted: trunk/Tools/WebKitTestRunner/ios/IOKitSPI.h (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebKitTestRunner/ios/IOKitSPI.h        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/Tools/WebKitTestRunner/ios/IOKitSPI.h        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -1,204 +0,0 @@
</span><del>-/*
- * Copyright (C) 2015 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef IOKitSPI_h
-#define IOKitSPI_h
-
-#import <wtf/Platform.h>
-
-#if PLATFORM(IOS)
-
-#if USE(APPLE_INTERNAL_SDK)
-
-#import <IOKit/hid/IOHIDEvent.h>
-#import <IOKit/hid/IOHIDEventData.h>
-#import <IOKit/hid/IOHIDEventSystemClient.h>
-#import <IOKit/hid/IOHIDUsageTables.h>
-
-#else
-
-WTF_EXTERN_C_BEGIN
-
-#ifdef __LP64__
-typedef double IOHIDFloat;
-#else
-typedef float IOHIDFloat;
-#endif
-
-enum {
- kIOHIDEventOptionNone = 0,
-};
-
-typedef UInt32 IOOptionBits;
-typedef uint32_t IOHIDEventOptionBits;
-typedef uint32_t IOHIDEventField;
-
-typedef struct __IOHIDEventSystemClient * IOHIDEventSystemClientRef;
-typedef struct __IOHIDEvent * IOHIDEventRef;
-
-#define IOHIDEventFieldBase(type) (type << 16)
-
-enum {
- kHIDPage_KeyboardOrKeypad = 0x07,
- kHIDPage_VendorDefinedStart = 0xFF00
-};
-
-enum {
- kIOHIDDigitizerEventRange = 1<<0,
- kIOHIDDigitizerEventTouch = 1<<1,
- kIOHIDDigitizerEventPosition = 1<<2,
- kIOHIDDigitizerEventIdentity = 1<<5,
- kIOHIDDigitizerEventAttribute = 1<<6,
- kIOHIDDigitizerEventCancel = 1<<7,
- kIOHIDDigitizerEventStart = 1<<8,
- kIOHIDDigitizerEventEstimatedAltitude = 1<<28,
- kIOHIDDigitizerEventEstimatedAzimuth = 1<<29,
- kIOHIDDigitizerEventEstimatedPressure = 1<<30
-};
-typedef uint32_t IOHIDDigitizerEventMask;
-
-enum {
- kIOHIDDigitizerEventUpdateAltitudeMask = 1<<28,
- kIOHIDDigitizerEventUpdateAzimuthMask = 1<<29,
- kIOHIDDigitizerEventUpdatePressureMask = 1<<30
-};
-
-enum {
- kIOHIDEventTypeNULL,
- kIOHIDEventTypeVendorDefined,
- kIOHIDEventTypeKeyboard = 3,
- kIOHIDEventTypeDigitizer = 11,
-};
-typedef uint32_t IOHIDEventType;
-
-enum {
- kIOHIDEventFieldVendorDefinedUsagePage = IOHIDEventFieldBase(kIOHIDEventTypeVendorDefined),
- kIOHIDEventFieldVendorDefinedReserved,
- kIOHIDEventFieldVendorDefinedReserved1,
- kIOHIDEventFieldVendorDefinedDataLength,
- kIOHIDEventFieldVendorDefinedData
-};
-
-enum {
- kIOHIDEventFieldDigitizerX = IOHIDEventFieldBase(kIOHIDEventTypeDigitizer),
- kIOHIDEventFieldDigitizerY,
- kIOHIDEventFieldDigitizerMajorRadius = kIOHIDEventFieldDigitizerX + 20,
- kIOHIDEventFieldDigitizerMinorRadius,
- kIOHIDEventFieldDigitizerIsDisplayIntegrated = kIOHIDEventFieldDigitizerMajorRadius + 5,
-};
-
-enum {
- kIOHIDTransducerRange = 0x00010000,
- kIOHIDTransducerTouch = 0x00020000,
- kIOHIDTransducerInvert = 0x00040000,
- kIOHIDTransducerDisplayIntegrated = 0x00080000
-};
-
-enum {
- kIOHIDDigitizerTransducerTypeStylus = 0,
- kIOHIDDigitizerTransducerTypeFinger = 2,
- kIOHIDDigitizerTransducerTypeHand = 3
-};
-typedef uint32_t IOHIDDigitizerTransducerType;
-
-enum {
- kIOHIDEventFieldDigitizerWillUpdateMask = 720924,
- kIOHIDEventFieldDigitizerDidUpdateMask = 720925
-};
-
-IOHIDEventRef IOHIDEventCreateDigitizerEvent(CFAllocatorRef, uint64_t, IOHIDDigitizerTransducerType, uint32_t, uint32_t, IOHIDDigitizerEventMask, uint32_t, IOHIDFloat, IOHIDFloat, IOHIDFloat, IOHIDFloat, IOHIDFloat, boolean_t, boolean_t, IOOptionBits);
-
-IOHIDEventRef IOHIDEventCreateDigitizerFingerEvent(CFAllocatorRef, uint64_t, uint32_t, uint32_t, IOHIDDigitizerEventMask, IOHIDFloat, IOHIDFloat, IOHIDFloat, IOHIDFloat, IOHIDFloat, boolean_t, boolean_t, IOHIDEventOptionBits);
-
-IOHIDEventRef IOHIDEventCreateForceEvent(CFAllocatorRef, uint64_t, uint32_t, IOHIDFloat, uint32_t, IOHIDFloat, IOHIDEventOptionBits);
-
-IOHIDEventRef IOHIDEventCreateKeyboardEvent(CFAllocatorRef, uint64_t, uint32_t, uint32_t, boolean_t, IOOptionBits);
-
-IOHIDEventRef IOHIDEventCreateVendorDefinedEvent(CFAllocatorRef, uint64_t, uint32_t, uint32_t, uint32_t, uint8_t*, CFIndex, IOHIDEventOptionBits);
-
-IOHIDEventRef IOHIDEventCreateDigitizerStylusEventWithPolarOrientation(CFAllocatorRef, uint64_t, uint32_t, uint32_t, IOHIDDigitizerEventMask, uint32_t, IOHIDFloat, IOHIDFloat, IOHIDFloat, IOHIDFloat, IOHIDFloat, IOHIDFloat, IOHIDFloat, IOHIDFloat, boolean_t, boolean_t, IOHIDEventOptionBits);
-
-IOHIDEventType IOHIDEventGetType(IOHIDEventRef);
-
-void IOHIDEventSetFloatValue(IOHIDEventRef, IOHIDEventField, IOHIDFloat);
-
-CFIndex IOHIDEventGetIntegerValue(IOHIDEventRef, IOHIDEventField);
-void IOHIDEventSetIntegerValue(IOHIDEventRef, IOHIDEventField, CFIndex);
-
-void IOHIDEventAppendEvent(IOHIDEventRef, IOHIDEventRef, IOOptionBits);
-
-IOHIDEventSystemClientRef IOHIDEventSystemClientCreate(CFAllocatorRef);
-
-#define kGSEventPathInfoInRange (1 << 0)
-#define kGSEventPathInfoInTouch (1 << 1)
-
-enum {
- kHIDUsage_KeyboardA = 0x04,
- kHIDUsage_Keyboard1 = 0x1E,
- kHIDUsage_Keyboard2 = 0x1F,
- kHIDUsage_Keyboard3 = 0x20,
- kHIDUsage_Keyboard4 = 0x21,
- kHIDUsage_Keyboard5 = 0x22,
- kHIDUsage_Keyboard6 = 0x23,
- kHIDUsage_Keyboard7 = 0x24,
- kHIDUsage_Keyboard8 = 0x25,
- kHIDUsage_Keyboard9 = 0x26,
- kHIDUsage_Keyboard0 = 0x27,
- kHIDUsage_KeyboardReturnOrEnter = 0x28,
- kHIDUsage_KeyboardEscape = 0x29,
- kHIDUsage_KeyboardDeleteOrBackspace = 0x2A,
- kHIDUsage_KeyboardTab = 0x2B,
- kHIDUsage_KeyboardSpacebar = 0x2C,
- kHIDUsage_KeyboardHyphen = 0x2D,
- kHIDUsage_KeyboardEqualSign = 0x2E,
- kHIDUsage_KeyboardOpenBracket = 0x2F,
- kHIDUsage_KeyboardCloseBracket = 0x30,
- kHIDUsage_KeyboardBackslash = 0x31,
- kHIDUsage_KeyboardSemicolon = 0x33,
- kHIDUsage_KeyboardQuote = 0x34,
- kHIDUsage_KeyboardGraveAccentAndTilde = 0x35,
- kHIDUsage_KeyboardComma = 0x36,
- kHIDUsage_KeyboardPeriod = 0x37,
- kHIDUsage_KeyboardSlash = 0x38,
- kHIDUsage_KeyboardF1 = 0x3A,
- kHIDUsage_KeyboardHome = 0x4A,
- kHIDUsage_KeyboardPageUp = 0x4B,
- kHIDUsage_KeyboardEnd = 0x4D,
- kHIDUsage_KeyboardRightArrow = 0x4F,
- kHIDUsage_KeyboardLeftArrow = 0x50,
- kHIDUsage_KeyboardDownArrow = 0x51,
- kHIDUsage_KeyboardUpArrow = 0x52,
- kHIDUsage_KeyboardLeftControl = 0xE0,
- kHIDUsage_KeyboardLeftShift = 0xE1,
- kHIDUsage_KeyboardLeftAlt = 0xE2
-};
-
-WTF_EXTERN_C_END
-
-#endif // USE(APPLE_INTERNAL_SDK)
-
-#endif // PLATFORM(IOS)
-
-#endif // IOKitSPI_h
</del></span></pre></div>
<a id="trunkToolsWebKitTestRunnermacEventSenderProxymm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/WebKitTestRunner/mac/EventSenderProxy.mm (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebKitTestRunner/mac/EventSenderProxy.mm        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/Tools/WebKitTestRunner/mac/EventSenderProxy.mm        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -46,17 +46,6 @@
</span><span class="cx"> - (void)_postDelayed;
</span><span class="cx"> @end
</span><span class="cx">
</span><del>-#if defined(__LP64__)
-struct WKTRCGSEventRecord {
- char offset1[150];
- uint8_t phase;
- char offset2[13];
- float deltaX;
- float deltaY;
- char offset3[76];
-} __attribute__((packed));
-#endif
-
</del><span class="cx"> @interface EventSenderSyntheticEvent : NSEvent {
</span><span class="cx"> @public
</span><span class="cx"> NSPoint _eventSender_locationInWindow;
</span><span class="lines">@@ -71,11 +60,6 @@
</span><span class="cx"> short _eventSender_subtype;
</span><span class="cx"> NSEventType _eventSender_type;
</span><span class="cx"> NSWindow *_eventSender_window;
</span><del>-
-
-#if defined(__LP64__)
- WKTRCGSEventRecord _eventSender_cgsEventRecord;
-#endif
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> - (id)initPressureEventAtLocation:(NSPoint)location globalLocation:(NSPoint)globalLocation stage:(NSInteger)stage pressure:(float)pressure stageTransition:(float)stageTransition phase:(NSEventPhase)phase time:(NSTimeInterval)time eventNumber:(NSInteger)eventNumber window:(NSWindow *)window;
</span><span class="lines">@@ -168,13 +152,6 @@
</span><span class="cx"> return false;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#if defined(__LP64__)
-- (WKTRCGSEventRecord)_cgsEventRecord
-{
- return _eventSender_cgsEventRecord;
-}
-#endif
-
</del><span class="cx"> - (NSWindow *)window
</span><span class="cx"> {
</span><span class="cx"> return _eventSender_window;
</span><span class="lines">@@ -907,50 +884,4 @@
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><del>-static NSEventPhase nsEventPhaseFromCGEventPhase(int phase)
-{
- switch (phase) {
- case 0: // kCGSGesturePhaseNone
- return NSEventPhaseNone;
- case 1: // kCGSGesturePhaseBegan
- return NSEventPhaseBegan;
- case 2: // kCGSGesturePhaseChanged
- return NSEventPhaseChanged;
- case 4: // kCGSGesturePhaseEnded
- return NSEventPhaseEnded;
- case 8: // kCGSGesturePhaseCancelled
- return NSEventPhaseCancelled;
- case 128: // kCGSGesturePhaseMayBegin
- return NSEventPhaseMayBegin;
- }
-
- ASSERT_NOT_REACHED();
- return NSEventPhaseNone;
-}
-
-void EventSenderProxy::swipeGestureWithWheelAndMomentumPhases(int x, int y, int phase, int momentum)
-{
- RetainPtr<EventSenderSyntheticEvent> event = adoptNS([[EventSenderSyntheticEvent alloc] init]);
-
- // "mayBegin" a swipe is actually a scroll wheel event.
- event->_eventSender_type = (phase == 128) ? NSEventTypeScrollWheel : NSEventTypeGesture;
- event->_eventSender_subtype = 6; // kIOHIDEventTypeScroll
- event->_eventSender_locationInWindow = NSMakePoint(m_position.x, m_position.y);
- event->_eventSender_location = ([m_testController->mainWebView()->platformWindow() convertRectToScreen:NSMakeRect(m_position.x, m_position.y, 1, 1)].origin);
- event->_eventSender_phase = nsEventPhaseFromCGEventPhase(phase);
- event->_eventSender_momentumPhase = nsEventPhaseFromCGEventPhase(momentum);
- event->_eventSender_timestamp = absoluteTimeForEventTime(currentEventTime());
- event->_eventSender_eventNumber = ++eventNumber;
-
-#if defined(__LP64__)
- event->_eventSender_cgsEventRecord.phase = phase;
- event->_eventSender_cgsEventRecord.deltaX = (float)x;
- event->_eventSender_cgsEventRecord.deltaY = (float)y;
-#else
- NSLog(@"Synthetic swipe gestures are not implemented for 32-bit WebKitTestRunner.");
-#endif
-
- [NSApp sendEvent:event.get()];
-}
-
</del><span class="cx"> } // namespace WTR
</span></span></pre></div>
<a id="trunkToolsWebKitTestRunnermacUIScriptControllerMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/WebKitTestRunner/mac/UIScriptControllerMac.mm (214585 => 214586)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebKitTestRunner/mac/UIScriptControllerMac.mm        2017-03-30 00:37:36 UTC (rev 214585)
+++ trunk/Tools/WebKitTestRunner/mac/UIScriptControllerMac.mm        2017-03-30 01:05:58 UTC (rev 214586)
</span><span class="lines">@@ -26,7 +26,11 @@
</span><span class="cx"> #import "config.h"
</span><span class="cx"> #import "UIScriptController.h"
</span><span class="cx">
</span><ins>+#import "EventSerializerMac.h"
</ins><span class="cx"> #import "PlatformWebView.h"
</span><ins>+#import "SharedEventStreamsMac.h"
+#import "TestController.h"
+#import "PlatformWebView.h"
</ins><span class="cx"> #import "StringFunctions.h"
</span><span class="cx"> #import "TestController.h"
</span><span class="cx"> #import "TestRunnerWKWebView.h"
</span><span class="lines">@@ -188,4 +192,39 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+static void playBackEvents(UIScriptContext *context, NSString *eventStream, JSValueRef callback)
+{
+ NSError *error = nil;
+ NSArray *eventDicts = [NSJSONSerialization JSONObjectWithData:[eventStream dataUsingEncoding:NSUTF8StringEncoding] options:0 error:&error];
+
+ if (error) {
+ NSLog(@"ERROR: %@", error);
+ return;
+ }
+
+ unsigned callbackID = context->prepareForAsyncTask(callback, CallbackTypeNonPersistent);
+
+ NSWindow *window = [TestController::singleton().mainWebView()->platformView() window];
+
+ [EventStreamPlayer playStream:eventDicts window:window completionHandler:^ {
+ context->asyncTaskComplete(callbackID);
+ }];
+}
+
+void UIScriptController::beginBackSwipe(JSValueRef callback)
+{
+ playBackEvents(m_context, beginSwipeBackEventStream(), callback);
+}
+
+void UIScriptController::completeBackSwipe(JSValueRef callback)
+{
+ playBackEvents(m_context, completeSwipeBackEventStream(), callback);
+}
+
+void UIScriptController::platformPlayBackEventStream(JSStringRef eventStream, JSValueRef callback)
+{
+ RetainPtr<CFStringRef> stream = adoptCF(JSStringCopyCFString(kCFAllocatorDefault, eventStream));
+ playBackEvents(m_context, (NSString *)stream.get(), callback);
+}
+
</ins><span class="cx"> } // namespace WTR
</span></span></pre>
</div>
</div>
</body>
</html>