Changeset 246103 in webkit
- Timestamp:
- Jun 5, 2019, 1:41:30 AM (7 years ago)
- Location:
- trunk
- Files:
-
- 5 added
- 36 edited
- 2 copied
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/fast/events/constructors/mouse-event-constructor-expected.txt (modified) (1 diff)
-
LayoutTests/fast/events/constructors/mouse-event-constructor.html (modified) (1 diff)
-
LayoutTests/fast/events/constructors/wheel-event-constructor-expected.txt (modified) (1 diff)
-
LayoutTests/fast/events/constructors/wheel-event-constructor.html (modified) (1 diff)
-
LayoutTests/fast/events/fire-mousedown-while-pressing-mouse-button.html (modified) (2 diffs)
-
LayoutTests/imported/w3c/ChangeLog (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_pointermove_on_chorded_mouse_button-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/resources/testdriver-vendor.js (modified) (1 diff)
-
LayoutTests/platform/mac-highsierra-wk1/imported (added)
-
LayoutTests/platform/mac-highsierra-wk1/imported/w3c (added)
-
LayoutTests/platform/mac-highsierra-wk1/imported/w3c/web-platform-tests (added)
-
LayoutTests/platform/mac-highsierra-wk1/imported/w3c/web-platform-tests/pointerevents (added)
-
LayoutTests/platform/mac-highsierra-wk1/imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt (copied) (copied from trunk/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt ) (1 diff)
-
LayoutTests/platform/mac-highsierra/imported/w3c/web-platform-tests/pointerevents (added)
-
LayoutTests/platform/mac-highsierra/imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt (copied) (copied from trunk/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt ) (1 diff)
-
LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt (modified) (1 diff)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/dom/Element.cpp (modified) (1 diff)
-
Source/WebCore/dom/MouseEvent.cpp (modified) (8 diffs)
-
Source/WebCore/dom/MouseEvent.h (modified) (5 diffs)
-
Source/WebCore/dom/MouseEvent.idl (modified) (2 diffs)
-
Source/WebCore/dom/MouseEventInit.h (modified) (1 diff)
-
Source/WebCore/dom/MouseEventInit.idl (modified) (1 diff)
-
Source/WebCore/dom/PointerEvent.cpp (modified) (3 diffs)
-
Source/WebCore/dom/PointerEvent.h (modified) (2 diffs)
-
Source/WebCore/loader/NavigationAction.h (modified) (1 diff)
-
Source/WebCore/page/PointerCaptureController.cpp (modified) (1 diff)
-
Source/WebCore/page/PointerCaptureController.h (modified) (2 diffs)
-
Source/WebCore/platform/PlatformMouseEvent.h (modified) (2 diffs)
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/Shared/API/c/WKEvent.h (modified) (1 diff)
-
Source/WebKit/Shared/WebEvent.h (modified) (1 diff)
-
Source/WebKitLegacy/mac/ChangeLog (modified) (1 diff)
-
Source/WebKitLegacy/mac/DOM/DOMMouseEvent.h (modified) (1 diff)
-
Source/WebKitLegacy/mac/DOM/DOMMouseEvent.mm (modified) (1 diff)
-
Source/WebKitLegacy/mac/WebView/WebPDFView.mm (modified) (1 diff)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/DumpRenderTree/mac/EventSendingController.mm (modified) (8 diffs)
-
Tools/TestWebKitAPI/Tests/mac/IsNavigationActionTrusted.mm (modified) (1 diff)
-
Tools/WebKitTestRunner/EventSenderProxy.h (modified) (2 diffs)
-
Tools/WebKitTestRunner/mac/EventSenderProxy.mm (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r246096 r246103 1 2019-06-01 Antoine Quint <graouts@apple.com> 2 3 [Pointer Events] Add support for chorded button interactions 4 https://bugs.webkit.org/show_bug.cgi?id=198462 5 6 Reviewed by Dean Jackson. 7 8 Update some tests and their expectations due to MouseEvent.buttons now returning the correct value in DRT and WKTR 9 and MouseEvent.button now being a "short" instead of an "unsigned short". 10 11 * fast/events/constructors/mouse-event-constructor-expected.txt: 12 * fast/events/constructors/mouse-event-constructor.html: Update the test to test the boundary values for "short" instead 13 of "unsigned short" as well as the new "magic" value of -2 for no button, which ends up being reported as 0. 14 * fast/events/constructors/wheel-event-constructor-expected.txt: 15 * fast/events/constructors/wheel-event-constructor.html: Update the test to test the boundary values for "short" instead 16 of "unsigned short" as well as the new "magic" value of -2 for no button, which ends up being reported as 0. 17 * fast/events/fire-mousedown-while-pressing-mouse-button.html: Rewrite this test to always use MouseEvent.buttons and 18 adjust the bitmask expectations which were way off. 19 * platform/mac-wk1/imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt: 20 * platform/mac-highsierra/imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt: 21 * platform/mac-highsierra-wk1/imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt: 22 This test fails differently in WK1 and WK2 and will be addressed in a future patch. 23 1 24 2019-06-04 Zalan Bujtas <zalan@apple.com> 2 25 -
trunk/LayoutTests/fast/events/constructors/mouse-event-constructor-expected.txt
r231549 r246103 152 152 PASS new MouseEvent('eventType', { metaKey: true }).metaKey is true 153 153 PASS new MouseEvent('eventType', { button: 0 }).button is 0 154 PASS new MouseEvent('eventType', { button: -1 }).button is -1 155 PASS new MouseEvent('eventType', { button: -2 }).button is 0 154 156 PASS new MouseEvent('eventType', { button: 1 }).button is 1 155 PASS new MouseEvent('eventType', { button: 65534 }).button is 65534156 PASS new MouseEvent('eventType', { button: 65535 }).button is 0157 PASS new MouseEvent('eventType', { button: 9007199254740991 }).button is 0158 PASS new MouseEvent('eventType', { button: - 1 }).button is 0157 PASS new MouseEvent('eventType', { button: -32768 }).button is -32768 158 PASS new MouseEvent('eventType', { button: 32767 }).button is 32767 159 PASS new MouseEvent('eventType', { button: 32768 }).button is -32768 160 PASS new MouseEvent('eventType', { button: -32769 }).button is 32767 159 161 PASS new MouseEvent('eventType', { button: 18446744073709551615 }).button is 0 160 162 PASS new MouseEvent('eventType', { button: 12345678901234567890 }).button is 2048 -
trunk/LayoutTests/fast/events/constructors/mouse-event-constructor.html
r231549 r246103 101 101 102 102 // button is passed. 103 // Numbers within the unsignedshort range.103 // Numbers within the short range. 104 104 shouldBe("new MouseEvent('eventType', { button: 0 }).button", "0"); 105 shouldBe("new MouseEvent('eventType', { button: -1 }).button", "-1"); 106 shouldBe("new MouseEvent('eventType', { button: -2 }).button", "0"); 105 107 shouldBe("new MouseEvent('eventType', { button: 1 }).button", "1"); 106 shouldBe("new MouseEvent('eventType', { button: 65534 }).button", "65534"); 107 108 // Numbers that are equal to ((unsigned short)-1) should be treated as 0. 109 shouldBe("new MouseEvent('eventType', { button: 65535 }).button", "0"); 110 shouldBe("new MouseEvent('eventType', { button: 9007199254740991 }).button", "0"); 111 shouldBe("new MouseEvent('eventType', { button: -1 }).button", "0"); 108 shouldBe("new MouseEvent('eventType', { button: -32768 }).button", "-32768"); 109 shouldBe("new MouseEvent('eventType', { button: 32767 }).button", "32767"); 110 shouldBe("new MouseEvent('eventType', { button: 32768 }).button", "-32768"); 111 shouldBe("new MouseEvent('eventType', { button: -32769 }).button", "32767"); 112 112 113 113 // Numbers out of the unsigned short range. -
trunk/LayoutTests/fast/events/constructors/wheel-event-constructor-expected.txt
r231549 r246103 222 222 PASS new WheelEvent('eventType', { metaKey: true }).metaKey is true 223 223 PASS new WheelEvent('eventType', { button: 0 }).button is 0 224 PASS new WheelEvent('eventType', { button: -1 }).button is -1 225 PASS new WheelEvent('eventType', { button: -2 }).button is 0 224 226 PASS new WheelEvent('eventType', { button: 1 }).button is 1 225 PASS new WheelEvent('eventType', { button: 65534 }).button is 65534226 PASS new WheelEvent('eventType', { button: 65535 }).button is 0227 PASS new WheelEvent('eventType', { button: 9007199254740991 }).button is 0228 PASS new WheelEvent('eventType', { button: - 1 }).button is 0227 PASS new WheelEvent('eventType', { button: -32768 }).button is -32768 228 PASS new WheelEvent('eventType', { button: 32767 }).button is 32767 229 PASS new WheelEvent('eventType', { button: 32768 }).button is -32768 230 PASS new WheelEvent('eventType', { button: -32769 }).button is 32767 229 231 PASS new WheelEvent('eventType', { button: 18446744073709551615 }).button is 0 230 232 PASS new WheelEvent('eventType', { button: 12345678901234567890 }).button is 2048 -
trunk/LayoutTests/fast/events/constructors/wheel-event-constructor.html
r231549 r246103 138 138 139 139 // button is passed. 140 // Numbers within the unsignedshort range.140 // Numbers within the short range. 141 141 shouldBe("new WheelEvent('eventType', { button: 0 }).button", "0"); 142 shouldBe("new WheelEvent('eventType', { button: -1 }).button", "-1"); 143 shouldBe("new WheelEvent('eventType', { button: -2 }).button", "0"); 142 144 shouldBe("new WheelEvent('eventType', { button: 1 }).button", "1"); 143 shouldBe("new WheelEvent('eventType', { button: 65534 }).button", "65534"); 144 145 // Numbers that are equal to ((unsigned short)-1) should be treated as 0. 146 shouldBe("new WheelEvent('eventType', { button: 65535 }).button", "0"); 147 shouldBe("new WheelEvent('eventType', { button: 9007199254740991 }).button", "0"); 148 shouldBe("new WheelEvent('eventType', { button: -1 }).button", "0"); 145 shouldBe("new WheelEvent('eventType', { button: -32768 }).button", "-32768"); 146 shouldBe("new WheelEvent('eventType', { button: 32767 }).button", "32767"); 147 shouldBe("new WheelEvent('eventType', { button: 32768 }).button", "-32768"); 148 shouldBe("new WheelEvent('eventType', { button: -32769 }).button", "32767"); 149 149 150 150 // Numbers out of the unsigned short range. -
trunk/LayoutTests/fast/events/fire-mousedown-while-pressing-mouse-button.html
r155267 r246103 48 48 } 49 49 50 function to IEMouseButton(w3cButton)50 function toBitmaskMouseButton(w3cButton) 51 51 { 52 52 switch (w3cButton) { 53 53 case LeftMouseButton: 54 return 1 ;54 return 1 << 0; 55 55 case MiddleMouseButton: 56 return 4;56 return 1 << 1; 57 57 case RightMouseButton: 58 return 2;58 return 1 << 2; 59 59 } 60 60 return; // We shouldn't get here. … … 92 92 function checkIfDoneOnMouseDown(event) 93 93 { 94 var pressedButtons; // A bitmask that represents the combination of buttons that are currently being pressed. 95 if (event && event.buttons) 96 pressedButtons = event.buttons; // DOM Level 3 Events (Working Draft 07 September 2010). 97 else if (event) { 98 // For browsers than don't support event.buttons (or IE's window.event.button) we convert event.button to 99 // the corresponding bitmask to simplify the logic below. 100 pressedButtons = toIEMouseButton(event.button); 101 } else { 102 // Assume this script is running within Internet Explorer. 103 pressedButtons = window.event.button; 104 } 105 94 var pressedButtons = event.buttons; // A bitmask that represents the combination of buttons that are currently being pressed. 106 95 var chosenFirstMouseButton = firstMouseButtonElem.selectedIndex; 107 96 var chosenSecondMouseButton = secondMouseButtonElem.selectedIndex; 108 if (!didFireMousedownForFirstMouseButton && (pressedButtons & to IEMouseButton(chosenFirstMouseButton)) == toIEMouseButton(chosenFirstMouseButton)) {97 if (!didFireMousedownForFirstMouseButton && (pressedButtons & toBitmaskMouseButton(chosenFirstMouseButton)) == toBitmaskMouseButton(chosenFirstMouseButton)) { 109 98 didFireMousedownForFirstMouseButton = true; 110 99 square.innerHTML = "Now, " + shortMouseButtonName(chosenSecondMouseButton) + " click"; 111 } else if (didFireMousedownForFirstMouseButton && (pressedButtons & to IEMouseButton(chosenSecondMouseButton)) == toIEMouseButton(chosenSecondMouseButton))100 } else if (didFireMousedownForFirstMouseButton && (pressedButtons & toBitmaskMouseButton(chosenSecondMouseButton)) == toBitmaskMouseButton(chosenSecondMouseButton)) 112 101 didFireMousedownForSecondMouseButton = true; 113 102 if (didFireMousedownForFirstMouseButton && didFireMousedownForSecondMouseButton) { -
trunk/LayoutTests/imported/w3c/ChangeLog
r246074 r246103 1 2019-06-01 Antoine Quint <graouts@apple.com> 2 3 [Pointer Events] Add support for chorded button interactions 4 https://bugs.webkit.org/show_bug.cgi?id=198462 5 6 Reviewed by Dean Jackson. 7 8 Mark the progression for web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover.html which 9 proves the correct implementation of the chorded button interactions section of the Pointer Events spec. To do that, 10 we also had to make use of the "button" parameter used in WPT tests action sequences, which allows the test to indicate 11 which mouse button is pressed. Finally, there is now a change in the pointerevent_pointermove_on_chorded_mouse_button.html 12 results, another source change is required to get this test to fully pass. 13 14 * web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt: 15 * web-platform-tests/pointerevents/pointerevent_pointermove_on_chorded_mouse_button-expected.txt: 16 * web-platform-tests/resources/testdriver-vendor.js: 17 (dispatchMouseActions): 18 1 19 2019-06-04 Antoine Quint <graouts@apple.com> 2 20 -
trunk/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt
r244393 r246103 1 1 2 2 FAIL Mouse down and capture to green. assert_array_equals: Received events: green received pointerover,green received pointerenter,green received pointermove,green received pointerdown,green received gotpointercapture,green received pointermove,green received pointerout,green received pointerleave,green received pointerover,green received pointerenter,green received pointermove lengths differ, expected 7 got 11 3 FAIL Mouse down at green and capture to blue. assert_array_equals: Received events: green received pointerout,green received pointerover,green received pointerenter,green received pointermove,green received pointer down,green received lostpointercapture,blue received gotpointercapture,blue received pointermove,blue received pointermove lengths differ, expected 11 got 94 FAIL Mouse down and capture to green, move to blue and release capture assert_array_equals: Received events: blue received pointerout,blue received pointerover,blue received pointerenter,blue received pointermove,blue received pointerdown,blue received pointerout,bluereceived pointerleave,blue received pointerover,blue received pointerenter,blue received pointermove,blue received pointermove lengths differ, expected 12 got 113 FAIL Mouse down at green and capture to blue. assert_array_equals: Received events: green received pointerout,green received pointerover,green received pointerenter,green received pointermove,green received pointermove,green received pointermove lengths differ, expected 11 got 6 4 FAIL Mouse down and capture to green, move to blue and release capture assert_array_equals: Received events: green received pointerout,green received pointerover,green received pointerenter,green received pointermove,green received lostpointercapture,green received pointerout,green received pointerleave,blue received pointerover,blue received pointerenter,blue received pointermove,blue received pointermove lengths differ, expected 12 got 11 5 5 -
trunk/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_pointermove_on_chorded_mouse_button-expected.txt
r244393 r246103 15 15 16 16 17 FAIL pointermove events received for button state changes assert_true: There must not be more than one pointer down event. expected true got false 17 PASS pointermove events received for button state changes 18 18 -
trunk/LayoutTests/imported/w3c/web-platform-tests/resources/testdriver-vendor.js
r245639 r246103 29 29 break; 30 30 case "pointerDown": 31 // FIXME: what to do with "button"?32 31 logDebug(() => `eventSender.mouseDown()`); 33 eventSender.mouseDown( );32 eventSender.mouseDown(action.button); 34 33 break; 35 34 case "pointerUp": 36 // FIXME: what to do with "button"?37 35 logDebug(() => `eventSender.mouseUp()`); 38 eventSender.mouseUp( );36 eventSender.mouseUp(action.button); 39 37 break; 40 38 default: -
trunk/LayoutTests/platform/mac-highsierra-wk1/imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt
r246102 r246103 1 1 2 2 FAIL Mouse down and capture to green. assert_array_equals: Received events: green received pointerover,green received pointerenter,green received pointermove,green received pointerdown,green received gotpointercapture lengths differ, expected 7 got 5 3 FAIL Mouse down at green and capture to blue. assert_array_equals: Received events: green received pointer down,green received lostpointercapture,blue received gotpointercapture lengths differ, expected 11 got 34 FAIL Mouse down and capture to green, move to blue and release capture assert_array_equals: Received events: blue received pointerdown lengths differ, expected 12 got 13 FAIL Mouse down at green and capture to blue. assert_array_equals: Received events: green received pointermove lengths differ, expected 11 got 1 4 FAIL Mouse down and capture to green, move to blue and release capture assert_array_equals: Received events: green received pointermove,green received lostpointercapture lengths differ, expected 12 got 2 5 5 -
trunk/LayoutTests/platform/mac-highsierra/imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt
r246102 r246103 1 1 2 2 FAIL Mouse down and capture to green. assert_array_equals: Received events: green received pointerover,green received pointerenter,green received pointermove,green received pointerdown,green received gotpointercapture,green received pointermove,green received pointerout,green received pointerleave,green received pointerover,green received pointerenter,green received pointermove lengths differ, expected 7 got 11 3 FAIL Mouse down at green and capture to blue. assert_array_equals: Received events: green received pointerout,green received pointerover,green received pointerenter,green received pointermove,green received pointer down,green received lostpointercapture,blue received gotpointercapture,blue received pointermove,blue received pointermove lengths differ, expected 11 got 94 FAIL Mouse down and capture to green, move to blue and release capture assert_array_equals: Received events: blue received pointerout,blue received pointerover,blue received pointerenter,blue received pointermove,blue received pointerdown,blue received pointerout,blue received pointerleave,blue received pointerover,blue received pointerenter,blue received pointermove,blue received pointermove lengths differ, expected 12 got 113 FAIL Mouse down at green and capture to blue. assert_array_equals: Received events: green received pointerout,green received pointerover,green received pointerenter,green received pointermove,green received pointermove,green received pointermove,green received pointermove lengths differ, expected 11 got 7 4 FAIL Mouse down and capture to green, move to blue and release capture assert_array_equals: Received events: green received pointerout,green received pointerover,green received pointerenter,green received pointermove,green received lostpointercapture,green received pointermove,green received pointerout,green received pointerleave,blue received pointerover,blue received pointerenter,blue received pointermove,blue received pointermove property 0, expected "green received pointerover" but got "green received pointerout" 5 5 -
trunk/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt
r244393 r246103 1 1 2 2 FAIL Mouse down and capture to green. assert_array_equals: Received events: green received pointerover,green received pointerenter,green received pointermove,green received pointerdown,green received gotpointercapture lengths differ, expected 7 got 5 3 FAIL Mouse down at green and capture to blue. assert_array_equals: Received events: green received pointerdown,green received lostpointercapture,blue received gotpointercapture lengths differ, expected 11 got 34 FAIL Mouse down and capture to green, move to blue and release capture assert_array_equals: Received events: blue received pointerdown lengths differ, expected 12 got 13 FAIL Mouse down at green and capture to blue. assert_array_equals: Received events: lengths differ, expected 11 got 0 4 FAIL Mouse down and capture to green, move to blue and release capture assert_array_equals: Received events: lengths differ, expected 12 got 0 5 5 -
trunk/Source/WebCore/ChangeLog
r246102 r246103 1 2019-06-01 Antoine Quint <graouts@apple.com> 2 3 [Pointer Events] Add support for chorded button interactions 4 https://bugs.webkit.org/show_bug.cgi?id=198462 5 6 Reviewed by Dean Jackson. 7 8 Pointer events differ from mouse events in that pressing a button on a mouse and then pressing a second button 9 would yield two "mousedown" events but a single "pointerdown" event, for the first time we're transitioning from 10 a state where no button is pressed at all, and then a "pointermove" event to indicate an additional button has been 11 pressed. This is what the Pointer Events specification calls "chorded button interactions". 12 See https://w3c.github.io/pointerevents/#chorded-button-interactions for the full details. 13 14 To implement this, we no longer directly call PointerEvent::create() from Element::dispatchMouseEvent() but instead 15 call the new PointerCaptureController::pointerEventForMouseEvent() which implements the required logic to determine 16 for "mousedown" and "mouseup" mouse events, if we're transitioning from or to a state where no button is pressed at 17 all. 18 19 While that basic change is pretty small, a wider change was required to report the correct value for a PointerEvents' 20 "button" property which should return "-1" when there is no change in pressed button state compared to any previous 21 pointer event. 22 23 Up until now, MouseEvent.button was an "unsigned short", as specified up to and including DOM Level 2 Events. But the 24 UI Events spec says that property is a "short", and PointerEvent is the only interface where a "-1" value is used. This 25 required some changes throughout our codebase since we used a "-1" value to specify that no button was pressed when dealing 26 with NSEvent input and going through PlatformMouseEvent and eventually MouseEvent. So now we change the various NoButton 27 enum values to be "-2" and use that value, which is not going to be used for any mouse button, as the value reflected as 28 "0" through MouseEvent.button, as specified by UI Events. 29 30 Furthermore, we identified another issue: MouseEvent.buttons would always return 0 in DRT and WKTR. We rely upon that 31 value in PointerCaptureController::pointerEventForMouseEvent() and so we had to make that work for the relevant WPT test, 32 web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover.html, to pass and show a correct implementation 33 of chorded button interactions. The details of the work required for this is in Tools/ChangeLog. 34 35 * dom/Element.cpp: 36 (WebCore::Element::dispatchMouseEvent): 37 * dom/MouseEvent.cpp: 38 (WebCore::MouseEvent::create): 39 (WebCore::MouseEvent::MouseEvent): 40 (WebCore::MouseEvent::initMouseEvent): 41 (WebCore::MouseEvent::initMouseEventQuirk): 42 * dom/MouseEvent.h: 43 (WebCore::MouseEvent::button const): 44 * dom/MouseEvent.idl: 45 * dom/MouseEventInit.h: 46 * dom/MouseEventInit.idl: 47 * dom/PointerEvent.cpp: 48 (WebCore::PointerEvent::create): 49 (WebCore::PointerEvent::PointerEvent): 50 * dom/PointerEvent.h: 51 * loader/NavigationAction.h: 52 * page/PointerCaptureController.cpp: 53 (WebCore::PointerCaptureController::pointerEventForMouseEvent): 54 * page/PointerCaptureController.h: 55 * platform/PlatformMouseEvent.h: 56 1 57 2019-06-05 Michael Catanzaro <mcatanzaro@igalia.com> 2 58 -
trunk/Source/WebCore/dom/Element.cpp
r245700 r246103 315 315 #if ENABLE(POINTER_EVENTS) 316 316 if (RuntimeEnabledFeatures::sharedFeatures().pointerEventsEnabled()) { 317 if (auto* page = document().page()) { 318 auto& pointerCaptureController = page->pointerCaptureController(); 317 319 #if ENABLE(TOUCH_EVENTS) 318 if (auto* page = document().page()) { 319 if (mouseEvent->type() != eventNames().clickEvent && page->pointerCaptureController().preventsCompatibilityMouseEventsForIdentifier(platformEvent.pointerId())) 320 if (mouseEvent->type() != eventNames().clickEvent && pointerCaptureController.preventsCompatibilityMouseEventsForIdentifier(platformEvent.pointerId())) 320 321 return false; 322 #else 323 if (auto pointerEvent = pointerCaptureController.pointerEventForMouseEvent(mouseEvent)) { 324 pointerCaptureController.dispatchEvent(*pointerEvent, this); 325 if (isCompatibilityMouseEvent(mouseEvent) && pointerCaptureController.preventsCompatibilityMouseEventsForIdentifier(pointerEvent->pointerId())) 326 return false; 327 if (pointerEvent->defaultPrevented() || pointerEvent->defaultHandled()) { 328 didNotSwallowEvent = false; 329 if (pointerEvent->type() == eventNames().pointerdownEvent) 330 return false; 331 } 332 } 333 #endif 321 334 } 322 #else323 if (auto pointerEvent = PointerEvent::create(mouseEvent)) {324 if (auto* page = document().page()) {325 page->pointerCaptureController().dispatchEvent(*pointerEvent, this);326 if (isCompatibilityMouseEvent(mouseEvent) && page->pointerCaptureController().preventsCompatibilityMouseEventsForIdentifier(pointerEvent->pointerId()))327 return false;328 }329 if (pointerEvent->defaultPrevented() || pointerEvent->defaultHandled()) {330 didNotSwallowEvent = false;331 if (pointerEvent->type() == eventNames().pointerdownEvent)332 return false;333 }334 }335 #endif336 335 } 337 336 #endif -
trunk/Source/WebCore/dom/MouseEvent.cpp
r235865 r246103 63 63 64 64 Ref<MouseEvent> MouseEvent::create(const AtomicString& type, CanBubble canBubble, IsCancelable isCancelable, IsComposed isComposed, MonotonicTime timestamp, RefPtr<WindowProxy>&& view, int detail, 65 const IntPoint& screenLocation, const IntPoint& windowLocation, const IntPoint& movementDelta, OptionSet<Modifier> modifiers, unsignedshort button, unsigned short buttons,65 const IntPoint& screenLocation, const IntPoint& windowLocation, const IntPoint& movementDelta, OptionSet<Modifier> modifiers, short button, unsigned short buttons, 66 66 EventTarget* relatedTarget, double force, unsigned short syntheticClickType, DataTransfer* dataTransfer, IsSimulated isSimulated, IsTrusted isTrusted) 67 67 { … … 71 71 72 72 Ref<MouseEvent> MouseEvent::create(const AtomicString& eventType, CanBubble canBubble, IsCancelable isCancelable, IsComposed isComposed, RefPtr<WindowProxy>&& view, int detail, 73 int screenX, int screenY, int clientX, int clientY, OptionSet<Modifier> modifiers, unsignedshort button, unsigned short buttons,73 int screenX, int screenY, int clientX, int clientY, OptionSet<Modifier> modifiers, short button, unsigned short buttons, 74 74 unsigned short syntheticClickType, EventTarget* relatedTarget) 75 75 { … … 81 81 MouseEvent::MouseEvent(const AtomicString& eventType, CanBubble canBubble, IsCancelable isCancelable, IsComposed isComposed, 82 82 MonotonicTime timestamp, RefPtr<WindowProxy>&& view, int detail, 83 const IntPoint& screenLocation, const IntPoint& windowLocation, const IntPoint& movementDelta, OptionSet<Modifier> modifiers, unsignedshort button, unsigned short buttons,83 const IntPoint& screenLocation, const IntPoint& windowLocation, const IntPoint& movementDelta, OptionSet<Modifier> modifiers, short button, unsigned short buttons, 84 84 EventTarget* relatedTarget, double force, unsigned short syntheticClickType, DataTransfer* dataTransfer, IsSimulated isSimulated, IsTrusted isTrusted) 85 85 : MouseRelatedEvent(eventType, canBubble, isCancelable, isComposed, timestamp, WTFMove(view), detail, screenLocation, windowLocation, movementDelta, modifiers, isSimulated, isTrusted) 86 , m_button(button == (unsigned short)-1? 0 : button)86 , m_button(button == -2 ? 0 : button) 87 87 , m_buttons(buttons) 88 , m_syntheticClickType(button == (unsigned short)-1? 0 : syntheticClickType)89 , m_buttonDown(button != (unsigned short)-1)88 , m_syntheticClickType(button == -2 ? 0 : syntheticClickType) 89 , m_buttonDown(button != -2) 90 90 , m_relatedTarget(relatedTarget) 91 91 , m_force(force) … … 96 96 MouseEvent::MouseEvent(const AtomicString& eventType, CanBubble canBubble, IsCancelable isCancelable, IsComposed isComposed, 97 97 RefPtr<WindowProxy>&& view, int detail, const IntPoint& screenLocation, const IntPoint& clientLocation, 98 OptionSet<Modifier> modifiers, unsignedshort button, unsigned short buttons, unsigned short syntheticClickType, EventTarget* relatedTarget)98 OptionSet<Modifier> modifiers, short button, unsigned short buttons, unsigned short syntheticClickType, EventTarget* relatedTarget) 99 99 : MouseRelatedEvent(eventType, canBubble, isCancelable, isComposed, MonotonicTime::now(), WTFMove(view), detail, screenLocation, { }, { }, modifiers, IsSimulated::No) 100 , m_button(button == (unsigned short)-1? 0 : button)100 , m_button(button == -2 ? 0 : button) 101 101 , m_buttons(buttons) 102 , m_syntheticClickType(button == (unsigned short)-1? 0 : syntheticClickType)103 , m_buttonDown(button != (unsigned short)-1)102 , m_syntheticClickType(button == -2 ? 0 : syntheticClickType) 103 , m_buttonDown(button != -2) 104 104 , m_relatedTarget(relatedTarget) 105 105 { … … 109 109 MouseEvent::MouseEvent(const AtomicString& eventType, const MouseEventInit& initializer) 110 110 : MouseRelatedEvent(eventType, initializer) 111 , m_button(initializer.button == (unsigned short)-1? 0 : initializer.button)111 , m_button(initializer.button == -2 ? 0 : initializer.button) 112 112 , m_buttons(initializer.buttons) 113 , m_buttonDown(initializer.button != (unsigned short)-1)113 , m_buttonDown(initializer.button != -2) 114 114 , m_relatedTarget(initializer.relatedTarget) 115 115 { … … 120 120 121 121 void MouseEvent::initMouseEvent(const AtomicString& type, bool canBubble, bool cancelable, RefPtr<WindowProxy>&& view, int detail, 122 int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, unsignedshort button, EventTarget* relatedTarget)122 int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, short button, EventTarget* relatedTarget) 123 123 { 124 124 if (isBeingDispatched()) … … 129 129 m_screenLocation = IntPoint(screenX, screenY); 130 130 setModifierKeys(ctrlKey, altKey, shiftKey, metaKey); 131 m_button = button == (unsigned short)-1? 0 : button;131 m_button = button == -2 ? 0 : button; 132 132 m_syntheticClickType = 0; 133 m_buttonDown = button != (unsigned short)-1;133 m_buttonDown = button != -2; 134 134 m_relatedTarget = relatedTarget; 135 135 … … 142 142 // FIXME: We need this quirk because iAd Producer is calling this function with a relatedTarget that is not an EventTarget (rdar://problem/30640101). 143 143 // We should remove this quirk when possible. 144 void MouseEvent::initMouseEventQuirk(ExecState& state, ScriptExecutionContext& scriptExecutionContext, const AtomicString& type, bool canBubble, bool cancelable, RefPtr<WindowProxy>&& view, int detail, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, unsignedshort button, JSValue relatedTargetValue)144 void MouseEvent::initMouseEventQuirk(ExecState& state, ScriptExecutionContext& scriptExecutionContext, const AtomicString& type, bool canBubble, bool cancelable, RefPtr<WindowProxy>&& view, int detail, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, short button, JSValue relatedTargetValue) 145 145 { 146 146 EventTarget* relatedTarget = nullptr; -
trunk/Source/WebCore/dom/MouseEvent.h
r245867 r246103 41 41 public: 42 42 WEBCORE_EXPORT static Ref<MouseEvent> create(const AtomicString& type, CanBubble, IsCancelable, IsComposed, MonotonicTime timestamp, RefPtr<WindowProxy>&&, int detail, 43 const IntPoint& screenLocation, const IntPoint& windowLocation, const IntPoint& movementDelta, OptionSet<Modifier>, unsignedshort button, unsigned short buttons,43 const IntPoint& screenLocation, const IntPoint& windowLocation, const IntPoint& movementDelta, OptionSet<Modifier>, short button, unsigned short buttons, 44 44 EventTarget* relatedTarget, double force, unsigned short syntheticClickType, DataTransfer* = nullptr, IsSimulated = IsSimulated::No, IsTrusted = IsTrusted::Yes); 45 45 … … 47 47 48 48 static Ref<MouseEvent> create(const AtomicString& eventType, CanBubble, IsCancelable, IsComposed, RefPtr<WindowProxy>&&, int detail, 49 int screenX, int screenY, int clientX, int clientY, OptionSet<Modifier>, unsignedshort button, unsigned short buttons,49 int screenX, int screenY, int clientX, int clientY, OptionSet<Modifier>, short button, unsigned short buttons, 50 50 unsigned short syntheticClickType, EventTarget* relatedTarget); 51 51 … … 62 62 WEBCORE_EXPORT void initMouseEvent(const AtomicString& type, bool canBubble, bool cancelable, RefPtr<WindowProxy>&&, 63 63 int detail, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, 64 unsignedshort button, EventTarget* relatedTarget);64 short button, EventTarget* relatedTarget); 65 65 66 66 void initMouseEventQuirk(JSC::ExecState&, ScriptExecutionContext&, const AtomicString& type, bool canBubble, bool cancelable, RefPtr<WindowProxy>&&, 67 67 int detail, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, 68 unsignedshort button, JSC::JSValue relatedTarget);68 short button, JSC::JSValue relatedTarget); 69 69 70 unsignedshort button() const { return m_button; }70 short button() const { return m_button; } 71 71 unsigned short buttons() const { return m_buttons; } 72 72 unsigned short syntheticClickType() const { return m_syntheticClickType; } … … 87 87 protected: 88 88 MouseEvent(const AtomicString& type, CanBubble, IsCancelable, IsComposed, MonotonicTime timestamp, RefPtr<WindowProxy>&&, int detail, 89 const IntPoint& screenLocation, const IntPoint& windowLocation, const IntPoint& movementDelta, OptionSet<Modifier>, unsignedshort button, unsigned short buttons,89 const IntPoint& screenLocation, const IntPoint& windowLocation, const IntPoint& movementDelta, OptionSet<Modifier>, short button, unsigned short buttons, 90 90 EventTarget* relatedTarget, double force, unsigned short syntheticClickType, DataTransfer*, IsSimulated, IsTrusted); 91 91 92 92 MouseEvent(const AtomicString& type, CanBubble, IsCancelable, IsComposed, RefPtr<WindowProxy>&&, int detail, 93 const IntPoint& screenLocation, const IntPoint& clientLocation, OptionSet<Modifier>, unsignedshort button, unsigned short buttons,93 const IntPoint& screenLocation, const IntPoint& clientLocation, OptionSet<Modifier>, short button, unsigned short buttons, 94 94 unsigned short syntheticClickType, EventTarget* relatedTarget); 95 95 … … 106 106 void setRelatedTarget(EventTarget& relatedTarget) final { m_relatedTarget = &relatedTarget; } 107 107 108 unsignedshort m_button { 0 };108 short m_button { 0 }; 109 109 unsigned short m_buttons { 0 }; 110 110 unsigned short m_syntheticClickType { 0 }; -
trunk/Source/WebCore/dom/MouseEvent.idl
r237717 r246103 33 33 readonly attribute boolean altKey; 34 34 readonly attribute boolean metaKey; 35 readonly attribute unsignedshort button;35 readonly attribute short button; 36 36 readonly attribute unsigned short buttons; 37 37 readonly attribute EventTarget? relatedTarget; … … 50 50 optional long screenX = 0, optional long screenY = 0, optional long clientX = 0, optional long clientY = 0, 51 51 optional boolean ctrlKey = false, optional boolean altKey = false, optional boolean shiftKey = false, optional boolean metaKey = false, 52 optional unsignedshort button = 0, optional any relatedTarget = null);52 optional short button = 0, optional any relatedTarget = null); 53 53 54 54 readonly attribute long offsetX; -
trunk/Source/WebCore/dom/MouseEventInit.h
r223264 r246103 33 33 int clientX { 0 }; 34 34 int clientY { 0 }; 35 unsignedshort button { 0 };35 short button { 0 }; 36 36 unsigned short buttons { 0 }; 37 37 RefPtr<EventTarget> relatedTarget; -
trunk/Source/WebCore/dom/MouseEventInit.idl
r223264 r246103 29 29 long clientX = 0; 30 30 long clientY = 0; 31 unsignedshort button = 0;31 short button = 0; 32 32 unsigned short buttons = 0; 33 33 -
trunk/Source/WebCore/dom/PointerEvent.cpp
r245020 r246103 72 72 } 73 73 74 RefPtr<PointerEvent> PointerEvent::create( const MouseEvent& mouseEvent)74 RefPtr<PointerEvent> PointerEvent::create(short button, const MouseEvent& mouseEvent) 75 75 { 76 76 auto type = pointerEventType(mouseEvent.type()); … … 78 78 return nullptr; 79 79 80 return create(type, button, mouseEvent); 81 } 82 83 Ref<PointerEvent> PointerEvent::create(const String& type, short button, const MouseEvent& mouseEvent) 84 { 80 85 auto isEnterOrLeave = type == eventNames().pointerenterEvent || type == eventNames().pointerleaveEvent; 81 86 auto canBubble = isEnterOrLeave ? CanBubble::No : CanBubble::Yes; 82 87 auto isCancelable = isEnterOrLeave ? IsCancelable::No : IsCancelable::Yes; 83 88 auto isComposed = isEnterOrLeave ? IsComposed::No : IsComposed::Yes; 84 return adoptRef(*new PointerEvent(type, canBubble, isCancelable, isComposed, mouseEvent));89 return adoptRef(*new PointerEvent(type, canBubble, isCancelable, isComposed, button, mouseEvent)); 85 90 } 86 91 … … 107 112 } 108 113 109 PointerEvent::PointerEvent(const AtomicString& type, CanBubble canBubble, IsCancelable isCancelable, IsComposed isComposed, const MouseEvent& mouseEvent)110 : MouseEvent(type, canBubble, isCancelable, isComposed, mouseEvent.view(), mouseEvent.detail(), mouseEvent.screenLocation(), { mouseEvent.clientX(), mouseEvent.clientY() }, mouseEvent.modifierKeys(), mouseEvent.button(), mouseEvent.buttons(), mouseEvent.syntheticClickType(), mouseEvent.relatedTarget())114 PointerEvent::PointerEvent(const AtomicString& type, CanBubble canBubble, IsCancelable isCancelable, IsComposed isComposed, short button, const MouseEvent& mouseEvent) 115 : MouseEvent(type, canBubble, isCancelable, isComposed, mouseEvent.view(), mouseEvent.detail(), mouseEvent.screenLocation(), { mouseEvent.clientX(), mouseEvent.clientY() }, mouseEvent.modifierKeys(), button, mouseEvent.buttons(), mouseEvent.syntheticClickType(), mouseEvent.relatedTarget()) 111 116 , m_isPrimary(true) 112 117 { -
trunk/Source/WebCore/dom/PointerEvent.h
r245867 r246103 76 76 } 77 77 78 static RefPtr<PointerEvent> create(const MouseEvent&); 78 static RefPtr<PointerEvent> create(short button, const MouseEvent&); 79 static Ref<PointerEvent> create(const String& type, short button, const MouseEvent&); 79 80 static Ref<PointerEvent> create(const String& type, PointerID, const String& pointerType, IsPrimary = IsPrimary::No); 80 81 … … 116 117 PointerEvent(); 117 118 PointerEvent(const AtomicString&, Init&&); 118 PointerEvent(const AtomicString& type, CanBubble, IsCancelable, IsComposed, const MouseEvent&);119 PointerEvent(const AtomicString& type, CanBubble, IsCancelable, IsComposed, short button, const MouseEvent&); 119 120 PointerEvent(const AtomicString& type, CanBubble, IsCancelable, IsComposed, PointerID, const String& pointerType, IsPrimary); 120 121 #if ENABLE(TOUCH_EVENTS) && PLATFORM(IOS_FAMILY) -
trunk/Source/WebCore/loader/NavigationAction.h
r245796 r246103 95 95 LayoutPoint absoluteLocation; 96 96 FloatPoint locationInRootViewCoordinates; 97 unsignedshort button;97 short button; 98 98 unsigned short syntheticClickType; 99 99 bool buttonDown; -
trunk/Source/WebCore/page/PointerCaptureController.cpp
r246074 r246103 232 232 #endif 233 233 234 RefPtr<PointerEvent> PointerCaptureController::pointerEventForMouseEvent(const MouseEvent& mouseEvent) 235 { 236 const auto& type = mouseEvent.type(); 237 const auto& names = eventNames(); 238 239 auto iterator = m_activePointerIdsToCapturingData.find(mousePointerID); 240 ASSERT(iterator != m_activePointerIdsToCapturingData.end()); 241 auto& capturingData = iterator->value; 242 243 short newButton = mouseEvent.button(); 244 short button = newButton == capturingData.previousMouseButton ? -1 : newButton; 245 246 // https://w3c.github.io/pointerevents/#chorded-button-interactions 247 // Some pointer devices, such as mouse or pen, support multiple buttons. In the Mouse Event model, each button 248 // press produces a mousedown and mouseup event. To better abstract this hardware difference and simplify 249 // cross-device input authoring, Pointer Events do not fire overlapping pointerdown and pointerup events 250 // for chorded button presses (depressing an additional button while another button on the pointer device is 251 // already depressed). 252 if (type == names.mousedownEvent || type == names.mouseupEvent) { 253 // We're already active and getting another mousedown, this means that we should dispatch 254 // a pointermove event and let the button state show the newly depressed button. 255 if (type == names.mousedownEvent && capturingData.pointerIsPressed) 256 return PointerEvent::create(names.pointermoveEvent, button, mouseEvent); 257 258 // We're active and the mouseup still has some pressed button, this means we should dispatch 259 // a pointermove event. 260 if (type == names.mouseupEvent && capturingData.pointerIsPressed && mouseEvent.buttons() > 0) 261 return PointerEvent::create(names.pointermoveEvent, button, mouseEvent); 262 } 263 264 capturingData.previousMouseButton = newButton; 265 266 return PointerEvent::create(button, mouseEvent); 267 } 268 234 269 void PointerCaptureController::dispatchEvent(PointerEvent& event, EventTarget* target) 235 270 { -
trunk/Source/WebCore/page/PointerCaptureController.h
r245809 r246103 50 50 void elementWasRemoved(Element&); 51 51 52 RefPtr<PointerEvent> pointerEventForMouseEvent(const MouseEvent&); 53 52 54 #if ENABLE(TOUCH_EVENTS) && PLATFORM(IOS_FAMILY) 53 55 void dispatchEventForTouchAtIndex(EventTarget&, const PlatformTouchEvent&, unsigned, bool isPrimary, WindowProxy&); … … 69 71 bool preventsCompatibilityMouseEvents { false }; 70 72 bool pointerIsPressed { false }; 73 short previousMouseButton { -1 }; 71 74 }; 72 75 -
trunk/Source/WebCore/platform/PlatformMouseEvent.h
r245639 r246103 43 43 44 44 // These button numbers match the ones used in the DOM API, 0 through 2, except for NoButton which isn't specified. 45 enum MouseButton : int8_t { NoButton = -1, LeftButton, MiddleButton, RightButton }; 45 // We use -2 for NoButton because -1 is a valid value in the DOM API for Pointer Events for pointermove events that 46 // indicate that the pressed mouse button hasn't changed since the last event. 47 enum MouseButton : int8_t { LeftButton = 0, MiddleButton, RightButton, NoButton = -2 }; 46 48 enum SyntheticClickType : int8_t { NoTap, OneFingerTap, TwoFingerTap }; 47 49 … … 137 139 #if COMPILER(MSVC) 138 140 // These functions are necessary to work around the fact that MSVC will not find a most-specific 139 // operator== to use after implicitly converting MouseButton to a n unsignedshort.140 inline bool operator==( unsignedshort a, MouseButton b)141 // operator== to use after implicitly converting MouseButton to a short. 142 inline bool operator==(short a, MouseButton b) 141 143 { 142 return a == static_cast< unsignedshort>(b);144 return a == static_cast<short>(b); 143 145 } 144 146 145 inline bool operator!=( unsignedshort a, MouseButton b)147 inline bool operator!=(short a, MouseButton b) 146 148 { 147 return a != static_cast< unsignedshort>(b);149 return a != static_cast<short>(b); 148 150 } 149 151 #endif -
trunk/Source/WebKit/ChangeLog
r246102 r246103 1 2019-06-01 Antoine Quint <graouts@apple.com> 2 3 [Pointer Events] Add support for chorded button interactions 4 https://bugs.webkit.org/show_bug.cgi?id=198462 5 6 Reviewed by Dean Jackson. 7 8 Update to use -2 instead of -1 for NoButton. 9 10 * Shared/API/c/WKEvent.h: 11 * Shared/WebEvent.h: 12 1 13 2019-06-05 Michael Catanzaro <mcatanzaro@igalia.com> 2 14 -
trunk/Source/WebKit/Shared/API/c/WKEvent.h
r206828 r246103 43 43 44 44 enum { 45 kWKEventMouseButtonNoButton = -1,46 45 kWKEventMouseButtonLeftButton = 0, 47 46 kWKEventMouseButtonMiddleButton = 1, 48 47 kWKEventMouseButtonRightButton = 2, 48 kWKEventMouseButtonNoButton = -2 49 49 }; 50 50 typedef int32_t WKEventMouseButton; -
trunk/Source/WebKit/Shared/WebEvent.h
r244975 r246103 128 128 public: 129 129 enum Button { 130 NoButton = -1, 131 LeftButton, 130 LeftButton = 0, 132 131 MiddleButton, 133 RightButton 132 RightButton, 133 NoButton = -2 134 134 }; 135 135 -
trunk/Source/WebKitLegacy/mac/ChangeLog
r246045 r246103 1 2019-06-01 Antoine Quint <graouts@apple.com> 2 3 [Pointer Events] Add support for chorded button interactions 4 https://bugs.webkit.org/show_bug.cgi?id=198462 5 6 Reviewed by Dean Jackson. 7 8 Update -[DOMMouseEvent button] to be a "short" and update the noButton value from -1 to -2. 9 10 * DOM/DOMMouseEvent.h: 11 * DOM/DOMMouseEvent.mm: 12 (-[DOMMouseEvent button]): 13 * WebView/WebPDFView.mm: 14 (-[WebPDFView PDFViewWillClickOnLink:withURL:]): 15 1 16 2019-06-03 Rob Buis <rbuis@igalia.com> 2 17 -
trunk/Source/WebKitLegacy/mac/DOM/DOMMouseEvent.h
r231383 r246103 41 41 @property (readonly) BOOL altKey; 42 42 @property (readonly) BOOL metaKey; 43 @property (readonly) unsignedshort button;43 @property (readonly) short button; 44 44 @property (readonly, strong) id <DOMEventTarget> relatedTarget; 45 45 @property (readonly) int offsetX WEBKIT_AVAILABLE_MAC(10_5); -
trunk/Source/WebKitLegacy/mac/DOM/DOMMouseEvent.mm
r238771 r246103 93 93 } 94 94 95 - ( unsignedshort)button95 - (short)button 96 96 { 97 97 WebCore::JSMainThreadNullState state; -
trunk/Source/WebKitLegacy/mac/WebView/WebPDFView.mm
r244405 r246103 961 961 NSWindow *window = [sender window]; 962 962 NSEvent *nsEvent = [window currentEvent]; 963 const int noButton = - 1;963 const int noButton = -2; 964 964 int button = noButton; 965 965 RefPtr<Event> event; -
trunk/Tools/ChangeLog
r246097 r246103 1 2019-06-01 Antoine Quint <graouts@apple.com> 2 3 [Pointer Events] Add support for chorded button interactions 4 https://bugs.webkit.org/show_bug.cgi?id=198462 5 6 Reviewed by Dean Jackson. 7 8 Until now, MouseEvent.buttons would always return 0 when used within DRT and WKTR as [NSEvent pressedMouseButtons], used 9 by PlatformMouseEventBuilder to set the m_buttons value eventually used to set MouseEvent.buttons, not account for the 10 NSEvent created through the eventSender JS object in tests. To fix this, we now track the pressed mouse buttons within 11 DRT and WKTR as mouseDown() and mouseUp() are called, and swizzle [NSEvent pressedMouseButtons] to return that value. 12 13 In the case of DRT, one test would fail when swizzling this method in the case where the target view for the event would 14 be the DRTMockScroller, a subclass of NSScroller. So we only swizzle when the target view is *not* an NSScroller or a 15 subclass. 16 17 Finally, we change the NoMouseButton enum value from -1 to -2 to adjust to MouseEvent.button now being a "short". 18 19 * DumpRenderTree/mac/EventSendingController.mm: 20 (swizzledEventPressedMouseButtons): 21 (-[EventSendingController mouseDown:withModifiers:]): 22 (-[EventSendingController mouseUp:withModifiers:]): 23 (-[EventSendingController mouseMoveToX:Y:]): 24 * TestWebKitAPI/Tests/mac/IsNavigationActionTrusted.mm: 25 * WebKitTestRunner/EventSenderProxy.h: 26 (WTR::EventSenderProxy::mouseButtonsCurrentlyDown const): 27 * WebKitTestRunner/mac/EventSenderProxy.mm: 28 (WTR::swizzledEventPressedMouseButtons): 29 (WTR::EventSenderProxy::mouseDown): 30 (WTR::EventSenderProxy::mouseUp): 31 (WTR::EventSenderProxy::mouseMoveTo): 32 1 33 2019-06-04 Chris Dumez <cdumez@apple.com> 2 34 -
trunk/Tools/DumpRenderTree/mac/EventSendingController.mm
r239275 r246103 33 33 #import "EventSendingController.h" 34 34 35 #import "ClassMethodSwizzler.h" 35 36 #import "DumpRenderTree.h" 36 37 #import "DumpRenderTreeDraggingInfo.h" … … 78 79 MiddleMouseButton = 1, 79 80 RightMouseButton = 2, 80 NoMouseButton = - 181 NoMouseButton = -2 81 82 }; 82 83 … … 94 95 NSMutableArray *savedMouseEvents; // mouse events sent between mouseDown and mouseUp are stored here, and then executed at once. 95 96 BOOL replayingSavedEvents; 96 97 unsigned mouseButtonsCurrentlyDown = 0; 97 98 98 99 #if PLATFORM(IOS_FAMILY) … … 562 563 } 563 564 565 #if !PLATFORM(IOS_FAMILY) 566 static NSUInteger swizzledEventPressedMouseButtons() 567 { 568 return mouseButtonsCurrentlyDown; 569 } 570 #endif 571 564 572 - (void)mouseDown:(int)buttonNumber withModifiers:(WebScriptObject*)modifiers 565 573 { 574 mouseButtonsCurrentlyDown |= (1 << buttonNumber); 575 566 576 [[[mainFrame frameView] documentView] layout]; 567 577 [self updateClickCountForButton:buttonNumber]; … … 589 599 [NSApp _setCurrentEvent:event]; 590 600 #endif 591 [subView mouseDown:event]; 601 { 602 #if !PLATFORM(IOS_FAMILY) 603 auto eventPressedMouseButtonsSwizzler = ![subView isKindOfClass:[NSScroller class]] ? std::make_unique<ClassMethodSwizzler>([NSEvent class], @selector(pressedMouseButtons), reinterpret_cast<IMP>(swizzledEventPressedMouseButtons)) : NULL; 604 #endif 605 [subView mouseDown:event]; 606 } 592 607 #if !PLATFORM(IOS_FAMILY) 593 608 [NSApp _setCurrentEvent:nil]; … … 638 653 - (void)mouseUp:(int)buttonNumber withModifiers:(WebScriptObject*)modifiers 639 654 { 655 mouseButtonsCurrentlyDown &= ~(1 << buttonNumber); 656 640 657 if (dragMode && !replayingSavedEvents) { 641 658 NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[EventSendingController instanceMethodSignatureForSelector:@selector(mouseUp:withModifiers:)]]; … … 678 695 [NSApp _setCurrentEvent:event]; 679 696 #endif 680 [targetView mouseUp:event]; 697 { 698 #if !PLATFORM(IOS_FAMILY) 699 auto eventPressedMouseButtonsSwizzler = ![targetView isKindOfClass:[NSScroller class]] ? std::make_unique<ClassMethodSwizzler>([NSEvent class], @selector(pressedMouseButtons), reinterpret_cast<IMP>(swizzledEventPressedMouseButtons)) : NULL; 700 #endif 701 [targetView mouseUp:event]; 702 } 681 703 #if !PLATFORM(IOS_FAMILY) 682 704 [NSApp _setCurrentEvent:nil]; … … 763 785 [[draggingInfo draggingSource] draggedImage:[draggingInfo draggedImage] movedTo:lastMousePosition]; 764 786 [[mainFrame webView] draggingUpdated:draggingInfo]; 765 } else 787 } else { 788 #if !PLATFORM(IOS_FAMILY) 789 auto eventPressedMouseButtonsSwizzler = ![subView isKindOfClass:[NSScroller class]] ? std::make_unique<ClassMethodSwizzler>([NSEvent class], @selector(pressedMouseButtons), reinterpret_cast<IMP>(swizzledEventPressedMouseButtons)) : NULL; 790 #endif 766 791 [subView mouseDragged:event]; 767 #endif 768 } else 792 } 793 #endif 794 } else { 795 #if !PLATFORM(IOS_FAMILY) 796 auto eventPressedMouseButtonsSwizzler = ![subView isKindOfClass:[NSScroller class]] ? std::make_unique<ClassMethodSwizzler>([NSEvent class], @selector(pressedMouseButtons), reinterpret_cast<IMP>(swizzledEventPressedMouseButtons)) : NULL; 797 #endif 769 798 [subView mouseMoved:event]; 799 } 770 800 #if !PLATFORM(IOS_FAMILY) 771 801 [NSApp _setCurrentEvent:nil]; -
trunk/Tools/TestWebKitAPI/Tests/mac/IsNavigationActionTrusted.mm
r242339 r246103 34 34 const static NSURL *targetUrl = [[NSURL alloc] initWithString:@"http://www.example.com/"]; 35 35 const static unsigned expectedModifierFlags = 0; 36 const static int expectedButtonNumber = - 1;36 const static int expectedButtonNumber = -2; 37 37 38 38 const static int expectedWKButtonNumber = 0; // unlike DOM spec, 0 is the value for no button in Cocoa. -
trunk/Tools/WebKitTestRunner/EventSenderProxy.h
r243689 r246103 77 77 void keyDown(WKStringRef key, WKEventModifiers, unsigned location); 78 78 79 #if PLATFORM(COCOA) 80 unsigned mouseButtonsCurrentlyDown() const { return m_mouseButtonsCurrentlyDown; } 81 #endif 82 79 83 #if ENABLE(TOUCH_EVENTS) 80 84 // Touch events. … … 138 142 #if PLATFORM(COCOA) 139 143 int eventNumber; 144 unsigned m_mouseButtonsCurrentlyDown { 0 }; 140 145 #elif PLATFORM(GTK) 141 146 Deque<WTREventQueueItem> m_eventQueue; -
trunk/Tools/WebKitTestRunner/mac/EventSenderProxy.mm
r244820 r246103 205 205 MiddleMouseButton = 1, 206 206 RightMouseButton = 2, 207 NoMouseButton = - 1207 NoMouseButton = -2 208 208 }; 209 209 … … 302 302 } 303 303 304 static NSUInteger swizzledEventPressedMouseButtons() 305 { 306 return TestController::singleton().eventSenderProxy()->mouseButtonsCurrentlyDown(); 307 } 308 304 309 void EventSenderProxy::mouseDown(unsigned buttonNumber, WKEventModifiers modifiers) 305 310 { 311 m_mouseButtonsCurrentlyDown |= (1 << buttonNumber); 312 306 313 updateClickCountForButton(buttonNumber); 307 314 … … 319 326 NSView *targetView = [m_testController->mainWebView()->platformView() hitTest:[event locationInWindow]]; 320 327 if (targetView) { 328 auto eventPressedMouseButtonsSwizzler = std::make_unique<ClassMethodSwizzler>([NSEvent class], @selector(pressedMouseButtons), reinterpret_cast<IMP>(swizzledEventPressedMouseButtons)); 321 329 [NSApp _setCurrentEvent:event]; 322 330 [targetView mouseDown:event]; … … 329 337 void EventSenderProxy::mouseUp(unsigned buttonNumber, WKEventModifiers modifiers) 330 338 { 339 m_mouseButtonsCurrentlyDown &= ~(1 << buttonNumber); 340 331 341 NSEventType eventType = eventTypeForMouseButtonAndAction(buttonNumber, MouseUp); 332 342 NSEvent *event = [NSEvent mouseEventWithType:eventType … … 348 358 349 359 ASSERT(targetView); 360 auto eventPressedMouseButtonsSwizzler = std::make_unique<ClassMethodSwizzler>([NSEvent class], @selector(pressedMouseButtons), reinterpret_cast<IMP>(swizzledEventPressedMouseButtons)); 350 361 [NSApp _setCurrentEvent:event]; 351 362 [targetView mouseUp:event]; … … 583 594 NSView *targetView = isDrag ? m_testController->mainWebView()->platformView() : [m_testController->mainWebView()->platformView() hitTest:windowLocation]; 584 595 if (targetView) { 596 auto eventPressedMouseButtonsSwizzler = std::make_unique<ClassMethodSwizzler>([NSEvent class], @selector(pressedMouseButtons), reinterpret_cast<IMP>(swizzledEventPressedMouseButtons)); 585 597 [NSApp _setCurrentEvent:event]; 586 598 if (isDrag)
Note:
See TracChangeset
for help on using the changeset viewer.