Diff
Modified: trunk/LayoutTests/ChangeLog (211662 => 211663)
--- trunk/LayoutTests/ChangeLog 2017-02-04 01:53:38 UTC (rev 211662)
+++ trunk/LayoutTests/ChangeLog 2017-02-04 03:03:39 UTC (rev 211663)
@@ -1,3 +1,15 @@
+2017-02-03 Jeremy Jones <jere...@apple.com>
+
+ WK1 mouse events are missing movementX and movementY for pointerlock.
+ https://bugs.webkit.org/show_bug.cgi?id=167775
+ rdar://problem/30343810
+
+ Reviewed by Alexey Proskuryakov.
+
+ Enable pointer-lock/mouse-event-delivery.html for mac.
+
+ * platform/mac/TestExpectations:
+
2017-02-03 Simon Fraser <simon.fra...@apple.com>
Correctly set the "inWindow" flag for TileControllers that aren't the page tiles, and clarify "usingTiledBacking" logic
Modified: trunk/LayoutTests/pointer-lock/mouse-event-delivery-expected.txt (211662 => 211663)
--- trunk/LayoutTests/pointer-lock/mouse-event-delivery-expected.txt 2017-02-04 01:53:38 UTC (rev 211662)
+++ trunk/LayoutTests/pointer-lock/mouse-event-delivery-expected.txt 2017-02-04 03:03:39 UTC (rev 211663)
@@ -8,6 +8,9 @@
With a lock in place send a wheel event.
PASS event type: wheel, target: target1, received on: target1
PASS event type: wheel, target: target1, received on: body
+ With a lock in place move the mouse.
+PASS event type: mousemove, movementX: 25, movementY: -30, target: target1, received on: target1
+PASS event type: mousemove, movementX: 25, movementY: -30, target: target1, received on: body
With a lock in place send a click.
PASS event type: mousedown, target: target1, received on: target1
PASS event type: mousedown, target: target1, received on: body
Modified: trunk/LayoutTests/pointer-lock/mouse-event-delivery.html (211662 => 211663)
--- trunk/LayoutTests/pointer-lock/mouse-event-delivery.html 2017-02-04 01:53:38 UTC (rev 211662)
+++ trunk/LayoutTests/pointer-lock/mouse-event-delivery.html 2017-02-04 03:03:39 UTC (rev 211663)
@@ -38,6 +38,13 @@
testPassed("event type: " + e.type + ", target: " + e.target.id + ", received on: " + e.currentTarget.id);
doNextStep();
}
+ function eventDeltaExpected(e) {
+ testPassed("event type: " + e.type + ", movementX: " + e.movementX + ", movementY: " + e.movementY + ", target: " + e.target.id + ", received on: " + e.currentTarget.id);
+ }
+ function eventDeltaExpectedThenNextStep(e) {
+ testPassed("event type: " + e.type + ", movementX: " + e.movementX + ", movementY: " + e.movementY + ", target: " + e.target.id + ", received on: " + e.currentTarget.id);
+ doNextStep();
+ }
todo = [
function () {
@@ -57,7 +64,20 @@
}
},
function () {
+ debug(" With a lock in place move the mouse.")
+ targetdiv1._onmousemove_ = eventDeltaExpectedThenNextStep;
+ targetdiv2._onmousemove_ = eventNotExpected;
+ document.body._onmousemove_ = eventDeltaExpected;
+ if (window.eventSender) {
+ window.eventSender.mouseMoveTo(45,50);
+ }
+ },
+ function () {
debug(" With a lock in place send a click.")
+ targetdiv1._onmousemove_ = null;
+ targetdiv2._onmousemove_ = null;
+ document.body._onmousemove_ = null;
+
targetdiv1._onmousedown_ = eventExpected;
targetdiv2._onmousedown_ = eventNotExpected;
document.body._onmousedown_ = eventExpected;
Modified: trunk/Source/WebCore/ChangeLog (211662 => 211663)
--- trunk/Source/WebCore/ChangeLog 2017-02-04 01:53:38 UTC (rev 211662)
+++ trunk/Source/WebCore/ChangeLog 2017-02-04 03:03:39 UTC (rev 211663)
@@ -1,3 +1,18 @@
+2017-02-03 Jeremy Jones <jere...@apple.com>
+
+ WK1 mouse events are missing movementX and movementY for pointerlock.
+ https://bugs.webkit.org/show_bug.cgi?id=167775
+ rdar://problem/30343810
+
+ Reviewed by Alexey Proskuryakov.
+
+ pointer-lock/mouse-event-delivery.html
+
+ Improve mouse-event-delivery.html test to mouse move and check for valid movementX and movementY.
+
+ * platform/mac/PlatformEventFactoryMac.mm:
+ (WebCore::PlatformMouseEventBuilder::PlatformMouseEventBuilder): WK1 plumb throuhg movementX and movementY
+
2017-02-03 Simon Fraser <simon.fra...@apple.com>
Correctly set the "inWindow" flag for TileControllers that aren't the page tiles, and clarify "usingTiledBacking" logic
Modified: trunk/Source/WebCore/platform/mac/PlatformEventFactoryMac.mm (211662 => 211663)
--- trunk/Source/WebCore/platform/mac/PlatformEventFactoryMac.mm 2017-02-04 01:53:38 UTC (rev 211662)
+++ trunk/Source/WebCore/platform/mac/PlatformEventFactoryMac.mm 2017-02-04 03:03:39 UTC (rev 211663)
@@ -714,6 +714,9 @@
m_globalPosition = IntPoint(globalPointForEvent(event));
m_button = mouseButtonForEvent(event);
m_clickCount = clickCountForEvent(event);
+#if ENABLE(POINTER_LOCK)
+ m_movementDelta = IntPoint(event.deltaX, event.deltaY);
+#endif
m_force = 0;
#if defined(__LP64__) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 101003
Modified: trunk/Tools/ChangeLog (211662 => 211663)
--- trunk/Tools/ChangeLog 2017-02-04 01:53:38 UTC (rev 211662)
+++ trunk/Tools/ChangeLog 2017-02-04 03:03:39 UTC (rev 211663)
@@ -1,3 +1,18 @@
+2017-02-03 Jeremy Jones <jere...@apple.com>
+
+ WK1 mouse events are missing movementX and movementY for pointerlock.
+ https://bugs.webkit.org/show_bug.cgi?id=167775
+ rdar://problem/30343810
+
+ Reviewed by Alexey Proskuryakov.
+
+ Set kCGMouseEventDeltaX and kCGMouseEventDeltaY when synthesizing mouse move events.
+
+ * DumpRenderTree/mac/EventSendingController.mm:
+ (-[EventSendingController mouseMoveToX:Y:]):
+ * WebKitTestRunner/mac/EventSenderProxy.mm:
+ (WTR::EventSenderProxy::mouseMoveTo):
+
2017-02-03 Simon Fraser <simon.fra...@apple.com>
Correctly set the "inWindow" flag for TileControllers that aren't the page tiles, and clarify "usingTiledBacking" logic
Modified: trunk/Tools/DumpRenderTree/mac/EventSendingController.mm (211662 => 211663)
--- trunk/Tools/DumpRenderTree/mac/EventSendingController.mm 2017-02-04 01:53:38 UTC (rev 211662)
+++ trunk/Tools/DumpRenderTree/mac/EventSendingController.mm 2017-02-04 03:03:39 UTC (rev 211663)
@@ -643,9 +643,9 @@
NSView *view = [mainFrame webView];
#if !PLATFORM(IOS)
- lastMousePosition = [view convertPoint:NSMakePoint(x, [view frame].size.height - y) toView:nil];
+ NSPoint newMousePosition = [view convertPoint:NSMakePoint(x, [view frame].size.height - y) toView:nil];
NSEvent *event = [NSEvent mouseEventWithType:(leftMouseButtonDown ? NSEventTypeLeftMouseDragged : NSEventTypeMouseMoved)
- location:lastMousePosition
+ location:newMousePosition
modifierFlags:0
timestamp:[self currentEventTime]
windowNumber:[[view window] windowNumber]
@@ -653,6 +653,11 @@
eventNumber:++eventNumber
clickCount:(leftMouseButtonDown ? clickCount : 0)
pressure:0.0];
+ CGEventRef cgEvent = event.CGEvent;
+ CGEventSetIntegerValueField(cgEvent, kCGMouseEventDeltaX, newMousePosition.x - lastMousePosition.x);
+ CGEventSetIntegerValueField(cgEvent, kCGMouseEventDeltaY, newMousePosition.y - lastMousePosition.y);
+ event = [NSEvent eventWithCGEvent:cgEvent];
+ lastMousePosition = newMousePosition;
#else
lastMousePosition = [view convertPoint:NSMakePoint(x, y) toView:nil];
WebEvent *event = [[WebEvent alloc] initWithMouseEventType:WebEventMouseMoved
Modified: trunk/Tools/WebKitTestRunner/mac/EventSenderProxy.mm (211662 => 211663)
--- trunk/Tools/WebKitTestRunner/mac/EventSenderProxy.mm 2017-02-04 01:53:38 UTC (rev 211662)
+++ trunk/Tools/WebKitTestRunner/mac/EventSenderProxy.mm 2017-02-04 03:03:39 UTC (rev 211663)
@@ -600,12 +600,10 @@
void EventSenderProxy::mouseMoveTo(double x, double y)
{
NSView *view = m_testController->mainWebView()->platformView();
- NSPoint position = [view convertPoint:NSMakePoint(x, y) toView:nil];
- m_position.x = position.x;
- m_position.y = position.y;
+ NSPoint newMousePosition = [view convertPoint:NSMakePoint(x, y) toView:nil];
bool isDrag = m_leftMouseButtonDown;
NSEvent *event = [NSEvent mouseEventWithType:(isDrag ? NSEventTypeLeftMouseDragged : NSEventTypeMouseMoved)
- location:position
+ location:newMousePosition
modifierFlags:0
timestamp:absoluteTimeForEventTime(currentEventTime())
windowNumber:view.window.windowNumber
@@ -614,6 +612,13 @@
clickCount:(m_leftMouseButtonDown ? m_clickCount : 0)
pressure:0];
+ CGEventRef cgEvent = event.CGEvent;
+ CGEventSetIntegerValueField(cgEvent, kCGMouseEventDeltaX, newMousePosition.x - m_position.x);
+ CGEventSetIntegerValueField(cgEvent, kCGMouseEventDeltaY, newMousePosition.y - m_position.y);
+ event = [NSEvent eventWithCGEvent:cgEvent];
+ m_position.x = newMousePosition.x;
+ m_position.y = newMousePosition.y;
+
NSPoint windowLocation = event.locationInWindow;
// Always target drags at the WKWebView to allow for drag-scrolling outside the view.
NSView *targetView = isDrag ? m_testController->mainWebView()->platformView() : [m_testController->mainWebView()->platformView() hitTest:windowLocation];