Changeset 244423 in webkit
- Timestamp:
- Apr 18, 2019 6:31:17 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r244421 r244423 1 2019-04-18 Antoine Quint <graouts@apple.com> 2 3 [Pointer Events WPT] Unskip imported/w3c/web-platform-tests/pointerevents/pointerevent_lostpointercapture_for_disconnected_node.html 4 https://bugs.webkit.org/show_bug.cgi?id=197004 5 6 Reviewed by Antti Koivisto. 7 8 * platform/mac/TestExpectations: 9 1 10 2019-04-17 Antoine Quint <graouts@apple.com> 2 11 -
trunk/LayoutTests/imported/w3c/ChangeLog
r244421 r244423 1 2019-04-18 Antoine Quint <graouts@apple.com> 2 3 [Pointer Events WPT] Unskip imported/w3c/web-platform-tests/pointerevents/pointerevent_lostpointercapture_for_disconnected_node.html 4 https://bugs.webkit.org/show_bug.cgi?id=197004 5 6 Reviewed by Antti Koivisto. 7 8 * web-platform-tests/pointerevents/pointerevent_lostpointercapture_for_disconnected_node-expected.txt: Added. 9 1 10 2019-04-17 Antoine Quint <graouts@apple.com> 2 11 -
trunk/LayoutTests/platform/mac/TestExpectations
r244421 r244423 1880 1880 imported/w3c/web-platform-tests/pointerevents/pointerlock/pointerevent_pointermove_on_chorded_mouse_button_when_locked-manual.html [ Skip ] 1881 1881 1882 webkit.org/b/197004 imported/w3c/web-platform-tests/pointerevents/pointerevent_lostpointercapture_for_disconnected_node.html [ Skip ]1883 1882 webkit.org/b/197005 imported/w3c/web-platform-tests/pointerevents/pointerevent_lostpointercapture_is_first.html [ Skip ] 1884 1883 webkit.org/b/197008 imported/w3c/web-platform-tests/pointerevents/pointerevent_suppress_compat_events_on_drag_mouse.html [ Pass Failure ] -
trunk/Source/WebCore/ChangeLog
r244421 r244423 1 2019-04-18 Antoine Quint <graouts@apple.com> 2 3 [Pointer Events WPT] Unskip imported/w3c/web-platform-tests/pointerevents/pointerevent_lostpointercapture_for_disconnected_node.html 4 https://bugs.webkit.org/show_bug.cgi?id=197004 5 6 Reviewed by Antti Koivisto. 7 8 We need to release pointer capture when an element that has pointer capture is disconnected from the DOM. 9 10 * dom/Element.cpp: 11 (WebCore::Element::removedFromAncestor): Notify the PointerCaptureController that an element was disconnected. 12 * dom/PointerEvent.cpp: 13 (WebCore::PointerEvent::create): Broaden createPointerCancelEvent() to take in an event type so that we may use it to create a 14 lostpointercapture event as well. 15 (WebCore::PointerEvent::createPointerCancelEvent): Deleted. 16 * dom/PointerEvent.h: 17 * page/PointerCaptureController.cpp: 18 (WebCore::PointerCaptureController::elementWasRemoved): Check whether the provided element matches one of the target overrides recorded 19 in the map of captured pointer IDs. 20 (WebCore::PointerCaptureController::pointerEventWasDispatched): This block of code was actually useless in this location, the new code 21 added in elementWasRemoved() performs the actions that the spec text mandates. 22 (WebCore::PointerCaptureController::cancelPointer): Replace the call to createPointerCancelEvent() with one to create(). 23 * page/PointerCaptureController.h: 24 1 25 2019-04-17 Antoine Quint <graouts@apple.com> 2 26 -
trunk/Source/WebCore/dom/Element.cpp
r244328 r244423 1991 1991 document().page()->pointerLockController().elementRemoved(*this); 1992 1992 #endif 1993 #if ENABLE(POINTER_EVENTS) 1994 if (document().page() && RuntimeEnabledFeatures::sharedFeatures().pointerEventsEnabled()) 1995 document().page()->pointerCaptureController().elementWasRemoved(*this); 1996 #endif 1993 1997 1994 1998 setSavedLayerScrollPosition(ScrollPosition()); -
trunk/Source/WebCore/dom/PointerEvent.cpp
r243645 r244423 85 85 } 86 86 87 Ref<PointerEvent> PointerEvent::create PointerCancelEvent(PointerID pointerId, const String& pointerType)87 Ref<PointerEvent> PointerEvent::create(const String& type, PointerID pointerId, const String& pointerType) 88 88 { 89 return adoptRef(*new PointerEvent( eventNames().pointercancelEvent, CanBubble::Yes, IsCancelable::No, IsComposed::Yes, pointerId, pointerType));89 return adoptRef(*new PointerEvent(type, CanBubble::Yes, IsCancelable::No, IsComposed::Yes, pointerId, pointerType)); 90 90 } 91 91 -
trunk/Source/WebCore/dom/PointerEvent.h
r243645 r244423 74 74 75 75 static RefPtr<PointerEvent> create(const MouseEvent&); 76 static Ref<PointerEvent> create PointerCancelEvent(PointerID, const String& pointerType);76 static Ref<PointerEvent> create(const String& type, PointerID, const String& pointerType); 77 77 78 78 #if ENABLE(TOUCH_EVENTS) && PLATFORM(IOS_FAMILY) -
trunk/Source/WebCore/page/PointerCaptureController.cpp
r243645 r244423 129 129 } 130 130 131 void PointerCaptureController::elementWasRemoved(Element& element) 132 { 133 for (auto& keyAndValue : m_activePointerIdsToCapturingData) { 134 auto& capturingData = keyAndValue.value; 135 if (capturingData.pendingTargetOverride == &element || capturingData.targetOverride == &element) { 136 // https://w3c.github.io/pointerevents/#implicit-release-of-pointer-capture 137 // When the pointer capture target override is no longer connected, the pending pointer capture target override and pointer capture target 138 // override nodes SHOULD be cleared and also a PointerEvent named lostpointercapture corresponding to the captured pointer SHOULD be fired 139 // at the document. 140 auto pointerId = keyAndValue.key; 141 auto pointerType = capturingData.pointerType; 142 releasePointerCapture(&element, pointerId); 143 element.document().enqueueDocumentEvent(PointerEvent::create(eventNames().lostpointercaptureEvent, pointerId, pointerType)); 144 return; 145 } 146 } 147 } 148 131 149 void PointerCaptureController::touchEndedOrWasCancelledForIdentifier(PointerID pointerId) 132 150 { … … 232 250 if (event.type() == eventNames().pointerupEvent) 233 251 capturingData.pendingTargetOverride = nullptr; 234 235 // When the pointer capture target override is no longer connected, the pending pointer capture target override and pointer236 // capture target override nodes SHOULD be cleared and also a PointerEvent named lostpointercapture corresponding to the captured237 // pointer SHOULD be fired at the document.238 if (capturingData.targetOverride && !capturingData.targetOverride->isConnected()) {239 capturingData.pendingTargetOverride = nullptr;240 capturingData.targetOverride = nullptr;241 }242 252 } 243 253 … … 282 292 return; 283 293 284 auto event = PointerEvent::create PointerCancelEvent(pointerId, capturingData.pointerType);294 auto event = PointerEvent::create(eventNames().pointercancelEvent, pointerId, capturingData.pointerType); 285 295 target->dispatchEvent(event); 286 296 processPendingPointerCapture(WTFMove(event)); -
trunk/Source/WebCore/page/PointerCaptureController.h
r242893 r244423 47 47 48 48 void pointerLockWasApplied(); 49 void elementWasRemoved(Element&); 49 50 50 51 #if ENABLE(TOUCH_EVENTS) && PLATFORM(IOS_FAMILY)
Note: See TracChangeset
for help on using the changeset viewer.