Changeset 246122 in webkit
- Timestamp:
- Jun 5, 2019 12:21:38 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/imported/w3c/ChangeLog
r246104 r246122 1 2019-06-05 Antoine Quint <graouts@apple.com> 2 3 [Pointer Events] Fire pointerout and pointerleave events after firing pointercancel 4 https://bugs.webkit.org/show_bug.cgi?id=198560 5 6 Reviewed by Dean Jackson. 7 8 Mark WPT progressions. Notably, the iOS-specific tests now have 100% PASS rate. 9 10 * web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt: 11 * web-platform-tests/pointerevents/pointerevent_pointercancel_touch-expected.txt: 12 * web-platform-tests/pointerevents/pointerevent_pointerleave_after_pointercancel_touch-expected.txt: 13 * web-platform-tests/pointerevents/pointerevent_pointerout_after_pointercancel_touch-expected.txt: 14 1 15 2019-06-05 Javier Fernandez <jfernandez@igalia.com> 2 16 -
trunk/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt
r246103 r246122 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 pointermove,green received pointermove lengths differ, expected 11 got 64 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 pointer out,green 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/imported/w3c/web-platform-tests/pointerevents/pointerevent_pointercancel_touch-expected.txt
r245020 r246122 12 12 13 13 14 FAIL pointercancel event received assert_true: pointerleave should be received before the test finished expected true got false 14 PASS pointercancel event received 15 15 PASS touch pointercancel event is a PointerEvent event 16 16 PASS touch pointercancel.pointerId attribute exists … … 49 49 PASS touch pointercancel.toElement is readonly 50 50 PASS touch pointercancel.toElement IDL type object (JS type was object) 51 FAIL touch pointercancel.toElement value is null. assert_equals: toElement attribute value expected null but got Element node <div id="target0" style="background: black"></div> 51 PASS touch pointercancel.toElement value is null. 52 52 PASS touch pointercancel.pressure value is valid 53 53 -
trunk/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_pointerleave_after_pointercancel_touch-expected.txt
r245584 r246122 10 10 11 11 12 FAIL pointerleave event received assert_true: pointerleave should be received before the test finishes expected true got false 12 PASS pointerleave event received 13 13 -
trunk/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_pointerout_after_pointercancel_touch-expected.txt
r245584 r246122 10 10 11 11 12 FAIL pointerout event received assert_true: pointerout should be received before the test finishes expected true got false 12 PASS pointerout event received 13 13 -
trunk/Source/WebCore/ChangeLog
r246121 r246122 1 2019-06-05 Antoine Quint <graouts@apple.com> 2 3 [Pointer Events] Fire pointerout and pointerleave events after firing pointercancel 4 https://bugs.webkit.org/show_bug.cgi?id=198560 5 6 Reviewed by Dean Jackson. 7 8 The Pointer Events specification mandates that "pointerout" and "pointerleave" events must be dispatched 9 immediately after dispatching a "pointercancel" event. 10 11 Since we needed to determine the bubbling, cancelable and composed nature of those events in additional 12 places, we now have static methods to determine this defined in PointerEvent.h such that both PointerEvent.cpp 13 and PointerEventIOS.cpp may use them. This should guarantee consistency going forward. 14 15 * dom/PointerEvent.cpp: 16 (WebCore::PointerEvent::create): 17 (WebCore::PointerEvent::PointerEvent): 18 * dom/PointerEvent.h: 19 * dom/ios/PointerEventIOS.cpp: 20 (WebCore::pointerEventType): 21 (WebCore::PointerEvent::create): 22 (WebCore::PointerEvent::PointerEvent): 23 (WebCore::phaseIsCancelable): Deleted. 24 (WebCore::typeCanBubble): Deleted. 25 * page/PointerCaptureController.cpp: 26 (WebCore::PointerCaptureController::cancelPointer): 27 1 28 2019-06-05 Saam Barati <sbarati@apple.com> 2 29 -
trunk/Source/WebCore/dom/PointerEvent.cpp
r246103 r246122 83 83 Ref<PointerEvent> PointerEvent::create(const String& type, short button, const MouseEvent& mouseEvent) 84 84 { 85 auto isEnterOrLeave = type == eventNames().pointerenterEvent || type == eventNames().pointerleaveEvent; 86 auto canBubble = isEnterOrLeave ? CanBubble::No : CanBubble::Yes; 87 auto isCancelable = isEnterOrLeave ? IsCancelable::No : IsCancelable::Yes; 88 auto isComposed = isEnterOrLeave ? IsComposed::No : IsComposed::Yes; 89 return adoptRef(*new PointerEvent(type, canBubble, isCancelable, isComposed, button, mouseEvent)); 85 return adoptRef(*new PointerEvent(type, button, mouseEvent)); 90 86 } 91 87 92 88 Ref<PointerEvent> PointerEvent::create(const String& type, PointerID pointerId, const String& pointerType, IsPrimary isPrimary) 93 89 { 94 return adoptRef(*new PointerEvent(type, CanBubble::Yes, IsCancelable::No, IsComposed::Yes,pointerId, pointerType, isPrimary));90 return adoptRef(*new PointerEvent(type, pointerId, pointerType, isPrimary)); 95 91 } 96 92 … … 112 108 } 113 109 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())110 PointerEvent::PointerEvent(const AtomicString& type, short button, const MouseEvent& mouseEvent) 111 : MouseEvent(type, typeCanBubble(type), typeIsCancelable(type), typeIsComposed(type), mouseEvent.view(), mouseEvent.detail(), mouseEvent.screenLocation(), { mouseEvent.clientX(), mouseEvent.clientY() }, mouseEvent.modifierKeys(), button, mouseEvent.buttons(), mouseEvent.syntheticClickType(), mouseEvent.relatedTarget()) 116 112 , m_isPrimary(true) 117 113 { 118 114 } 119 115 120 PointerEvent::PointerEvent(const AtomicString& type, CanBubble canBubble, IsCancelable isCancelable, IsComposed isComposed,PointerID pointerId, const String& pointerType, IsPrimary isPrimary)121 : MouseEvent(type, canBubble, isCancelable, isComposed, nullptr, 0, { }, { }, { }, 0, 0, 0, nullptr)116 PointerEvent::PointerEvent(const AtomicString& type, PointerID pointerId, const String& pointerType, IsPrimary isPrimary) 117 : MouseEvent(type, typeCanBubble(type), typeIsCancelable(type), typeIsComposed(type), nullptr, 0, { }, { }, { }, 0, 0, 0, nullptr) 122 118 , m_pointerId(pointerId) 123 119 , m_pointerType(pointerType) -
trunk/Source/WebCore/dom/PointerEvent.h
r246103 r246122 28 28 #if ENABLE(POINTER_EVENTS) 29 29 30 #include "EventNames.h" 30 31 #include "MouseEvent.h" 31 32 #include "Node.h" … … 115 116 116 117 private: 118 static bool typeIsEnterOrLeave(const AtomicString& type) { return type == eventNames().pointerenterEvent || type == eventNames().pointerleaveEvent; } 119 static CanBubble typeCanBubble(const AtomicString& type) { return typeIsEnterOrLeave(type) ? CanBubble::No : CanBubble::Yes; } 120 static IsCancelable typeIsCancelable(const AtomicString& type) { return typeIsEnterOrLeave(type) ? IsCancelable::No : IsCancelable::Yes; } 121 static IsComposed typeIsComposed(const AtomicString& type) { return typeIsEnterOrLeave(type) ? IsComposed::No : IsComposed::Yes; } 122 117 123 PointerEvent(); 118 124 PointerEvent(const AtomicString&, Init&&); 119 PointerEvent(const AtomicString& type, CanBubble, IsCancelable, IsComposed,short button, const MouseEvent&);120 PointerEvent(const AtomicString& type, CanBubble, IsCancelable, IsComposed,PointerID, const String& pointerType, IsPrimary);125 PointerEvent(const AtomicString& type, short button, const MouseEvent&); 126 PointerEvent(const AtomicString& type, PointerID, const String& pointerType, IsPrimary); 121 127 #if ENABLE(TOUCH_EVENTS) && PLATFORM(IOS_FAMILY) 122 128 PointerEvent(const AtomicString& type, const PlatformTouchEvent&, IsCancelable isCancelable, unsigned touchIndex, bool isPrimary, Ref<WindowProxy>&&); -
trunk/Source/WebCore/dom/ios/PointerEventIOS.cpp
r246061 r246122 33 33 namespace WebCore { 34 34 35 static AtomicStringpointerEventType(PlatformTouchPoint::TouchPhaseType phase)35 static const AtomicString& pointerEventType(PlatformTouchPoint::TouchPhaseType phase) 36 36 { 37 37 switch (phase) { … … 51 51 } 52 52 53 static PointerEvent::IsCancelable phaseIsCancelable(PlatformTouchPoint::TouchPhaseType phase)54 {55 if (phase == PlatformTouchPoint::TouchPhaseCancelled)56 return PointerEvent::IsCancelable::No;57 return PointerEvent::IsCancelable::Yes;58 }59 60 static Event::CanBubble typeCanBubble(const AtomicString& type)61 {62 return (type == eventNames().pointerenterEvent || type == eventNames().pointerleaveEvent) ? Event::CanBubble::No : Event::CanBubble::Yes;63 }64 65 53 Ref<PointerEvent> PointerEvent::create(const PlatformTouchEvent& event, unsigned index, bool isPrimary, Ref<WindowProxy>&& view) 66 54 { 67 auto phase = event.touchPhaseAtIndex(index);68 return adoptRef(*new PointerEvent( pointerEventType(phase), event, phaseIsCancelable(phase), index, isPrimary, WTFMove(view)));55 const auto& type = pointerEventType(event.touchPhaseAtIndex(index)); 56 return adoptRef(*new PointerEvent(type, event, typeIsCancelable(type), index, isPrimary, WTFMove(view))); 69 57 } 70 58 71 59 Ref<PointerEvent> PointerEvent::create(const String& type, const PlatformTouchEvent& event, unsigned index, bool isPrimary, Ref<WindowProxy>&& view) 72 60 { 73 return adoptRef(*new PointerEvent(type, event, phaseIsCancelable(event.touchPhaseAtIndex(index)), index, isPrimary, WTFMove(view)));61 return adoptRef(*new PointerEvent(type, event, typeIsCancelable(type), index, isPrimary, WTFMove(view))); 74 62 } 75 63 76 64 PointerEvent::PointerEvent(const AtomicString& type, const PlatformTouchEvent& event, IsCancelable isCancelable, unsigned index, bool isPrimary, Ref<WindowProxy>&& view) 77 : MouseEvent(type, typeCanBubble(type), isCancelable, IsComposed::Yes, event.timestamp().approximateMonotonicTime(), WTFMove(view), 0, event.touchLocationAtIndex(index), event.touchLocationAtIndex(index), { }, event.modifiers(), 0, 0, nullptr, 0, 0, nullptr, IsSimulated::No, IsTrusted::Yes)65 : MouseEvent(type, typeCanBubble(type), isCancelable, typeIsComposed(type), event.timestamp().approximateMonotonicTime(), WTFMove(view), 0, event.touchLocationAtIndex(index), event.touchLocationAtIndex(index), { }, event.modifiers(), 0, 0, nullptr, 0, 0, nullptr, IsSimulated::No, IsTrusted::Yes) 78 66 , m_pointerId(event.touchIdentifierAtIndex(index)) 79 67 , m_width(2 * event.radiusXAtIndex(index)) -
trunk/Source/WebCore/page/PointerCaptureController.cpp
r246103 r246122 390 390 return; 391 391 392 auto event = PointerEvent::create(eventNames().pointercancelEvent, pointerId, capturingData.pointerType, capturingData.isPrimary ? PointerEvent::IsPrimary::Yes : PointerEvent::IsPrimary::No); 393 target->dispatchEvent(event); 394 processPendingPointerCapture(WTFMove(event)); 392 // After firing the pointercancel event, a user agent MUST also fire a pointer event named pointerout 393 // followed by firing a pointer event named pointerleave. 394 auto isPrimary = capturingData.isPrimary ? PointerEvent::IsPrimary::Yes : PointerEvent::IsPrimary::No; 395 auto cancelEvent = PointerEvent::create(eventNames().pointercancelEvent, pointerId, capturingData.pointerType, isPrimary); 396 target->dispatchEvent(cancelEvent); 397 target->dispatchEvent(PointerEvent::create(eventNames().pointeroutEvent, pointerId, capturingData.pointerType, isPrimary)); 398 target->dispatchEvent(PointerEvent::create(eventNames().pointerleaveEvent, pointerId, capturingData.pointerType, isPrimary)); 399 processPendingPointerCapture(WTFMove(cancelEvent)); 395 400 } 396 401
Note: See TracChangeset
for help on using the changeset viewer.