Changeset 246729 in webkit
- Timestamp:
- Jun 24, 2019 3:45:34 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 7 added
- 1 deleted
- 16 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r246727 r246729 1 2019-06-24 Antoine Quint <graouts@apple.com> 2 3 [Pointer Events] Respect pointer capture when dispatching mouse boundary events and updating :hover 4 https://bugs.webkit.org/show_bug.cgi?id=198999 5 <rdar://problem/51979477> 6 7 Unreviewed. 8 9 Rolling back all changes made for this bug (r246728 + r246716 + r246674) as it regressed one test 10 (imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_pointercapture_in_frame.html). 11 12 * platform/mac-highsierra-wk1/imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt: Added. 13 * platform/mac-highsierra/imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt: Added. 14 * platform/mac-wk1/imported/w3c/web-platform-tests/pointerevents/pointerevent_boundary_events_at_implicit_release_hoverable_pointers-expected.txt: 15 * platform/mac-wk1/imported/w3c/web-platform-tests/pointerevents/pointerevent_click_during_capture-expected.txt: Removed. 16 * platform/mac-wk1/imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_pointercapture_in_frame-expected.txt: Added. 17 * platform/mac-wk1/imported/w3c/web-platform-tests/pointerevents/pointerevent_setpointercapture_relatedtarget-expected.txt: 18 1 19 2019-06-23 Fujii Hironori <Hironori.Fujii@sony.com> 2 20 -
trunk/LayoutTests/imported/w3c/ChangeLog
r246721 r246729 1 2019-06-24 Antoine Quint <graouts@apple.com> 2 3 [Pointer Events] Respect pointer capture when dispatching mouse boundary events and updating :hover 4 https://bugs.webkit.org/show_bug.cgi?id=198999 5 <rdar://problem/51979477> 6 7 Unreviewed. 8 9 Rolling back all changes made for this bug (r246728 + r246716 + r246674) as it regressed one test 10 (imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_pointercapture_in_frame.html). 11 12 * web-platform-tests/pointerevents/pointerevent_boundary_events_at_implicit_release_hoverable_pointers-expected.txt: 13 * web-platform-tests/pointerevents/pointerevent_click_during_capture-expected.txt: 14 * web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt: 15 * web-platform-tests/pointerevents/pointerevent_setpointercapture_relatedtarget-expected.txt: 16 1 17 2019-06-23 Antoine Quint <graouts@apple.com> 2 18 -
trunk/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_boundary_events_at_implicit_release_hoverable_pointers-expected.txt
r246674 r246729 7 7 Click on the black box with mouse and do not move the mouse after or during the click. 8 8 9 FAIL mouse Event sequence at implicit release on click assert_equals: expected "pointerout@target, pointerleave@target, pointerover@capture-target, pointerenter@capture-target, gotpointercapture@capture-target, pointerup@capture-target, lostpointercapture@capture-target, pointerout@capture-target, pointerleave@capture-target, pointerover@target, pointerenter@target" but got " pointerout@target, pointerleave@target, pointerover@capture-target, pointerenter@capture-target, gotpointercapture@capture-target, pointerup@target, lostpointercapture@capture-target, pointerout@capture-target, pointerleave@capture-target, pointerover@target, pointerenter@target"9 FAIL mouse Event sequence at implicit release on click assert_equals: expected "pointerout@target, pointerleave@target, pointerover@capture-target, pointerenter@capture-target, gotpointercapture@capture-target, pointerup@capture-target, lostpointercapture@capture-target, pointerout@capture-target, pointerleave@capture-target, pointerover@target, pointerenter@target" but got "gotpointercapture@capture-target, pointerup@capture-target, lostpointercapture@capture-target" 10 10 -
trunk/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_click_during_capture-expected.txt
r246674 r246729 10 10 11 11 12 FAIL mouse click target during capture assert_equals: An element should only receive click when it is the first common ancestor of pointerdown and pointerup targets expected "pointerdown@green,gotpointercapture@blue,pointerup@blue,click@grey,lostpointercapture@blue" but got "pointerdown@green,gotpointercapture@blue,pointerup@ green,lostpointercapture@blue"12 FAIL mouse click target during capture assert_equals: An element should only receive click when it is the first common ancestor of pointerdown and pointerup targets expected "pointerdown@green,gotpointercapture@blue,pointerup@blue,click@grey,lostpointercapture@blue" but got "pointerdown@green,gotpointercapture@blue,pointerup@blue,lostpointercapture@blue" 13 13 PASS Click target when pointerup/down targeted at the same element with no capture 14 14 PASS Click target when pointerup/down targeted at different elements with no capture -
trunk/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt
r246674 r246729 1 1 2 PASS Mouse down and capture to green. 3 PASS Mouse down at green and capture to blue. 4 PASS Mouse down and capture to green, move to blue and release capture 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,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_mouse_pointercapture_in_frame-expected.txt
r246721 r246729 1 1 2 2 3 FAIL Test pointer capture event route across the same-origin frame: Mouse down at inner frame and set pointer capture. assert_array_equals: Received events: innerFrame received pointermove,innerFrame received pointerdown,innerFrame received gotpointercapture,innerFrame received pointermove,innerFrameDocument received pointermove,innerFrameDocument received pointerup,innerFrame received lostpointercapture property 4, expected "innerFrame received pointermove" but got "innerFrameDocument received pointermove" 4 FAIL Test pointer capture event route across the same-origin frame: Mouse down at outer frame body and set pointer capture. assert_array_equals: Received events: outerFrame received pointermove,outerFrame received pointerdown,outerFrame received gotpointercapture,outerFrame received pointermove,innerFrame received pointerup,outerFrame received lostpointercapture property 4, expected "outerFrame received pointerup" but got "innerFrame received pointerup" 5 FAIL Test pointer capture event route across the same-origin frame: Mouse down with set capture at inner frame, then release on next mouse move. assert_array_equals: Received events: innerFrame received pointermove,innerFrame received pointerdown,innerFrame received gotpointercapture,innerFrame received pointermove,innerFrame received lostpointercapture,innerFrameDocument received pointermove,outerFrame received pointermove,outerFrame received pointerup lengths differ, expected 7 got 8 3 PASS Test pointer capture event route across the same-origin frame: Mouse down at inner frame and set pointer capture. 4 PASS Test pointer capture event route across the same-origin frame: Mouse down at outer frame body and set pointer capture. 5 PASS Test pointer capture event route across the same-origin frame: Mouse down with set capture at inner frame, then release on next mouse move. 6 6 PASS Test pointercapture event route across the same-origin frame: Mouse down with set capture at outer frame, then release on next mouse move. 7 7 -
trunk/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_setpointercapture_relatedtarget-expected.txt
r246674 r246729 17 17 The following pointer types were detected: mouse. 18 18 19 The following events were logged: pointerover@target1, pointerover@target0, gotpointercapture@target0, lostpointercapture@target0.19 The following events were logged: pointerover@target1, gotpointercapture@target0, pointerover@target0, pointerover@target0, lostpointercapture@target0. 20 20 21 21 Refresh the page to run the tests again with a different pointer type. 22 22 23 23 24 Harness Error (FAIL), message = 1 duplicate test name: "relatedTarget should not be null even when the capture is set." 25 24 26 PASS pointerover shouldn't trigger for the purple rectangle while the black rectangle has capture 25 27 PASS relatedTarget should not be null even when the capture is set. 28 PASS relatedTarget should not be null even when the capture is set. 26 29 -
trunk/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/pointerevents/pointerevent_boundary_events_at_implicit_release_hoverable_pointers-expected.txt
r246674 r246729 7 7 Click on the black box with mouse and do not move the mouse after or during the click. 8 8 9 FAIL mouse Event sequence at implicit release on click assert_equals: expected "pointerout@target, pointerleave@target, pointerover@capture-target, pointerenter@capture-target, gotpointercapture@capture-target, pointerup@capture-target, lostpointercapture@capture-target, pointerout@capture-target, pointerleave@capture-target, pointerover@target, pointerenter@target" but got " pointerout@target, pointerleave@target, pointerover@capture-target, pointerenter@capture-target, gotpointercapture@capture-target, pointerup@target, lostpointercapture@capture-target, pointerout@capture-target, pointerleave@capture-target, pointerover@target, pointerenter@target, pointermove@target"9 FAIL mouse Event sequence at implicit release on click assert_equals: expected "pointerout@target, pointerleave@target, pointerover@capture-target, pointerenter@capture-target, gotpointercapture@capture-target, pointerup@capture-target, lostpointercapture@capture-target, pointerout@capture-target, pointerleave@capture-target, pointerover@target, pointerenter@target" but got "gotpointercapture@capture-target, pointerup@capture-target, lostpointercapture@capture-target, pointermove@target" 10 10 -
trunk/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_pointercapture_in_frame-expected.txt
r246728 r246729 1 1 2 2 3 FAIL Test pointer capture event route across the same-origin frame: Mouse down at inner frame and set pointer capture. assert_array_equals: Received events: innerFrame received pointermove,innerFrame received pointerdown,innerFrame received gotpointercapture,innerFrame received pointermove,innerFrame Document received pointermove,innerFrameDocument received pointerup,innerFrame received lostpointercapture property 4, expected "innerFrame received pointermove" but got "innerFrameDocument received pointermove"4 FAIL Test pointer capture event route across the same-origin frame: Mouse down at outer frame body and set pointer capture. assert_array_equals: Received events: outerFrame received pointermove,outerFrame received pointerdown,outerFrame received gotpointercapture,outerFrame received pointermove, innerFrame received pointerup,outerFrame received lostpointercapture property 4, expected "outerFrame received pointerup" but got "innerFrame received pointerup"5 FAIL Test pointer capture event route across the same-origin frame: Mouse down with set capture at inner frame, then release on next mouse move. assert_array_equals: Received events: innerFrame received pointermove,innerFrame received pointerdown,innerFrame received gotpointercapture,innerFrame received pointermove,innerFrame received lostpointercapture,innerFrameDocument received pointermove,outerFrame received pointer move,outerFrame received pointerup lengths differ, expected 7 got 86 PASS Test pointercapture event route across the same-origin frame: Mouse down with set capture at outer frame, then release on next mouse move. 3 FAIL Test pointer capture event route across the same-origin frame: Mouse down at inner frame and set pointer capture. assert_array_equals: Received events: innerFrame received pointermove,innerFrame received pointerdown,innerFrame received gotpointercapture,innerFrame received pointermove,innerFrame received pointermove,innerFrame received pointerup,innerFrame received lostpointercapture,outerFrame received pointermove lengths differ, expected 7 got 8 4 FAIL Test pointer capture event route across the same-origin frame: Mouse down at outer frame body and set pointer capture. assert_array_equals: Received events: outerFrame received pointermove,outerFrame received pointerdown,outerFrame received gotpointercapture,outerFrame received pointermove,outerFrame received pointerup,outerFrame received lostpointercapture,innerFrame received pointermove lengths differ, expected 6 got 7 5 FAIL Test pointer capture event route across the same-origin frame: Mouse down with set capture at inner frame, then release on next mouse move. assert_array_equals: Received events: innerFrame received pointermove,innerFrame received pointerdown,innerFrame received gotpointercapture,innerFrame received pointermove,innerFrame received lostpointercapture,innerFrameDocument received pointermove,outerFrame received pointerup,innerFrameDocument received pointermove,outerFrame received pointermove lengths differ, expected 7 got 9 6 FAIL Test pointercapture event route across the same-origin frame: Mouse down with set capture at outer frame, then release on next mouse move. assert_array_equals: Received events: outerFrame received pointermove,outerFrame received pointerdown,outerFrame received gotpointercapture,outerFrame received pointermove,outerFrame received lostpointercapture,innerFrameElement received pointermove,innerFrameElement received pointerup,innerFrame received pointermove lengths differ, expected 7 got 8 7 7 -
trunk/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/pointerevents/pointerevent_setpointercapture_relatedtarget-expected.txt
r246674 r246729 17 17 The following pointer types were detected: mouse. 18 18 19 The following events were logged: pointerover@target1, pointerover@target0, gotpointercapture@target0, lostpointercapture@target0.19 The following events were logged: pointerover@target1, gotpointercapture@target0, pointerover@target0, pointerover@target0, lostpointercapture@target0, pointerover@target0. 20 20 21 21 Refresh the page to run the tests again with a different pointer type. 22 22 23 23 24 Harness Error (FAIL), message = 1 duplicate test name: "relatedTarget should not be null even when the capture is set." 25 24 26 PASS pointerover shouldn't trigger for the purple rectangle while the black rectangle has capture 25 27 PASS relatedTarget should not be null even when the capture is set. 28 PASS relatedTarget should not be null even when the capture is set. 26 29 -
trunk/Source/WebCore/ChangeLog
r246728 r246729 1 2019-06-24 Antoine Quint <graouts@apple.com> 2 3 [Pointer Events] Respect pointer capture when dispatching mouse boundary events and updating :hover 4 https://bugs.webkit.org/show_bug.cgi?id=198999 5 <rdar://problem/51979477> 6 7 Unreviewed. 8 9 Rolling back all changes made for this bug (r246728 + r246716 + r246674) as it regressed one test 10 (imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_pointercapture_in_frame.html). 11 12 * dom/Document.cpp: 13 (WebCore::Document::prepareMouseEvent): 14 (WebCore::Document::updateHoverActiveState): 15 * page/EventHandler.cpp: 16 (WebCore::EventHandler::handleMousePressEvent): 17 (WebCore::EventHandler::handleMouseMoveEvent): 18 (WebCore::EventHandler::handleMouseReleaseEvent): 19 (WebCore::EventHandler::setCapturingMouseEventsElement): 20 * page/EventHandler.h: 21 * page/PointerCaptureController.cpp: 22 (WebCore::PointerCaptureController::releasePointerCapture): 23 (WebCore::PointerCaptureController::hasPointerCapture): 24 (WebCore::PointerCaptureController::dispatchEventForTouchAtIndex): 25 (WebCore::PointerCaptureController::dispatchEvent): 26 (WebCore::PointerCaptureController::processPendingPointerCapture): 27 (WebCore::PointerCaptureController::pointerCaptureElement): Deleted. 28 * page/PointerCaptureController.h: 29 * rendering/HitTestRequest.h: 30 (WebCore::HitTestRequest::includesAllElementsUnderPoint const): 31 (WebCore::HitTestRequest::pointerCaptureElementChanged const): Deleted. 32 1 33 2019-06-23 Antoine Quint <graouts@apple.com> 2 34 -
trunk/Source/WebCore/dom/Document.cpp
r246674 r246729 321 321 #endif 322 322 323 #if ENABLE(POINTER_EVENTS)324 #include "PointerCaptureController.h"325 #endif326 327 323 namespace WebCore { 328 324 … … 3737 3733 hitTest(request, result); 3738 3734 3739 if (!request.readOnly()) { 3740 auto targetElement = makeRefPtr(result.targetElement()); 3741 #if ENABLE(POINTER_EVENTS) 3742 if (auto* page = this->page()) { 3743 if (auto* captureElement = page->pointerCaptureController().pointerCaptureElement(mousePointerID)) 3744 targetElement = captureElement; 3745 } 3746 #endif 3747 updateHoverActiveState(request, targetElement.get()); 3748 } 3735 if (!request.readOnly()) 3736 updateHoverActiveState(request, result.targetElement()); 3749 3737 3750 3738 return MouseEventWithHitTestResults(event, result); … … 6789 6777 // If the mouse is down and if this is a mouse move event, we want to restrict changes in 6790 6778 // :hover/:active to only apply to elements that are in the :active chain that we froze 6791 // at the time the mouse went down. Unless the pointer capture element was changed, in which 6792 // case we want to invalidate the chains anyway. 6793 bool mustBeInActiveChain = request.active() && request.move() && !request.pointerCaptureElementChanged(); 6779 // at the time the mouse went down. 6780 bool mustBeInActiveChain = request.active() && request.move(); 6794 6781 6795 6782 RefPtr<Element> oldHoveredElement = WTFMove(m_hoveredElement); -
trunk/Source/WebCore/page/EventHandler.cpp
r246674 r246729 128 128 #endif 129 129 130 #if ENABLE(POINTER_EVENTS)131 #include "PointerCaptureController.h"132 #include "Quirks.h"133 #include "RuntimeEnabledFeatures.h"134 #endif135 136 130 namespace WebCore { 137 131 … … 1796 1790 m_frame.selection().setCaretBlinkingSuspended(true); 1797 1791 1798 #if ENABLE(POINTER_EVENTS)1799 bool swallowEvent = !dispatchMouseEvent(eventNames().mousedownEvent, mouseEvent.targetNode(), true, m_clickCount, platformMouseEvent, true, request, mouseEvent);1800 #else1801 1792 bool swallowEvent = !dispatchMouseEvent(eventNames().mousedownEvent, mouseEvent.targetNode(), true, m_clickCount, platformMouseEvent, true); 1802 #endif1803 1793 m_capturesDragging = !swallowEvent || mouseEvent.scrollbar(); 1804 1794 … … 2046 2036 return true; 2047 2037 2048 #if ENABLE(POINTER_EVENTS)2049 swallowEvent = !dispatchMouseEvent(eventNames().mousemoveEvent, mouseEvent.targetNode(), false, 0, platformMouseEvent, true, request, mouseEvent);2050 #else2051 2038 swallowEvent = !dispatchMouseEvent(eventNames().mousemoveEvent, mouseEvent.targetNode(), false, 0, platformMouseEvent, true); 2052 #endif2053 2054 2039 #if ENABLE(DRAG_SUPPORT) 2055 2040 if (!swallowEvent) … … 2154 2139 return !dispatchMouseEvent(eventNames().mouseupEvent, m_lastElementUnderMouse.get(), cancelable, m_clickCount, platformMouseEvent, setUnder); 2155 2140 } 2156 2157 bool shouldFireBoundaryEventsWithClick = true;2158 #if ENABLE(POINTER_EVENTS)2159 if (m_frame.page()->pointerCaptureController().hasPointerCapture(m_capturingMouseEventsElement.get(), mousePointerID)) {2160 // If we have pointer capture enabled, it will be disabled by virtue of receiving a "pointerup" event. For :active and :hover2161 // styles to be set correctly when prepareMouseEvent() is called below, we should already reset pointer capture.2162 // We must also reset m_capturingMouseEventsElement to ensure boundary mouse events are dispatched on the hit-testing target.2163 // Finally, the click event target may differ from the hit-testing target, so let's not dispatch boundary mouse events as part of2164 // dispatching the click event below.2165 m_frame.page()->pointerCaptureController().releasePointerCapture(m_capturingMouseEventsElement.get(), mousePointerID);2166 m_capturingMouseEventsElement = nullptr;2167 shouldFireBoundaryEventsWithClick = false;2168 }2169 #endif2170 2141 2171 2142 HitTestRequest request(HitTestRequest::Release | HitTestRequest::DisallowUserAgentShadowContent); … … 2182 2153 2183 2154 Node* nodeToClick = targetNodeForClickEvent(m_clickNode.get(), mouseEvent.targetNode()); 2184 bool swallowClickEvent = m_clickCount > 0 && !contextMenuEvent && nodeToClick && !dispatchMouseEvent(eventNames().clickEvent, nodeToClick, true, m_clickCount, platformMouseEvent, shouldFireBoundaryEventsWithClick); 2185 2186 // Since we did not dispatch boundary mouse events while dispatching the click event, since the click node would have been used, 2187 // we need to dispatch them now accounting for the hit-testing node. 2188 if (!shouldFireBoundaryEventsWithClick) 2189 updateMouseEventTargetNode(mouseEvent.targetNode(), platformMouseEvent, FireMouseOverOut::Yes); 2155 bool swallowClickEvent = m_clickCount > 0 && !contextMenuEvent && nodeToClick && !dispatchMouseEvent(eventNames().clickEvent, nodeToClick, true, m_clickCount, platformMouseEvent, true); 2190 2156 2191 2157 if (m_resizeLayer) { … … 2513 2479 void EventHandler::setCapturingMouseEventsElement(Element* element) 2514 2480 { 2515 if (m_capturingMouseEventsElement == element)2516 return;2517 2518 2481 m_capturingMouseEventsElement = element; 2519 2482 m_eventHandlerWillResetCapturingMouseEventsElement = false; 2520 2521 #if ENABLE(POINTER_EVENTS)2522 // If we have a new capture element, we need to dispatch boundary mouse events.2523 if (element && !element->document().quirks().shouldDisablePointerEventsQuirk() && RuntimeEnabledFeatures::sharedFeatures().pointerEventsEnabled())2524 updateMouseEventTargetNode(element, m_mouseDown, FireMouseOverOut::Yes);2525 #endif2526 2483 } 2527 2484 … … 2646 2603 } 2647 2604 } 2648 2649 #if ENABLE(POINTER_EVENTS)2650 bool EventHandler::dispatchMouseEvent(const AtomString& eventType, Node* targetNode, bool cancelable, int clickCount, const PlatformMouseEvent& platformMouseEvent, bool setUnder, const HitTestRequest& request, MouseEventWithHitTestResults& mouseEvent)2651 {2652 if (!RuntimeEnabledFeatures::sharedFeatures().pointerEventsEnabled() || (targetNode && targetNode->ownerDocument() && targetNode->document().quirks().shouldDisablePointerEventsQuirk()))2653 return dispatchMouseEvent(eventType, targetNode, cancelable, clickCount, platformMouseEvent, setUnder);2654 2655 auto& pointerCaptureController = m_frame.page()->pointerCaptureController();2656 auto* oldCaptureElement = pointerCaptureController.pointerCaptureElement(mousePointerID);2657 bool defaultPrevented = dispatchMouseEvent(eventType, targetNode, cancelable, clickCount, platformMouseEvent, setUnder);2658 auto* newCaptureElement = pointerCaptureController.pointerCaptureElement(mousePointerID);2659 if (oldCaptureElement != newCaptureElement)2660 mouseEvent = prepareMouseEvent(HitTestRequest(request.type() | HitTestRequest::PointerCaptureElementChanged), platformMouseEvent);2661 return defaultPrevented;2662 }2663 #endif2664 2605 2665 2606 bool EventHandler::dispatchMouseEvent(const AtomString& eventType, Node* targetNode, bool /*cancelable*/, int clickCount, const PlatformMouseEvent& platformMouseEvent, bool setUnder) -
trunk/Source/WebCore/page/EventHandler.h
r246674 r246729 414 414 415 415 bool dispatchMouseEvent(const AtomString& eventType, Node* target, bool cancelable, int clickCount, const PlatformMouseEvent&, bool setUnder); 416 #if ENABLE(POINTER_EVENTS)417 bool dispatchMouseEvent(const AtomString& eventType, Node* target, bool cancelable, int clickCount, const PlatformMouseEvent&, bool setUnder, const HitTestRequest&, MouseEventWithHitTestResults&);418 #endif419 416 420 417 #if ENABLE(DRAG_SUPPORT) -
trunk/Source/WebCore/page/PointerCaptureController.cpp
r246728 r246729 49 49 } 50 50 51 Element* PointerCaptureController::pointerCaptureElement(PointerID pointerId)52 {53 auto iterator = m_activePointerIdsToCapturingData.find(pointerId);54 if (iterator != m_activePointerIdsToCapturingData.end())55 return iterator->value.pendingTargetOverride.get();56 return nullptr;57 }58 59 51 ExceptionOr<void> PointerCaptureController::setPointerCapture(Element* capturingTarget, PointerID pointerId) 60 52 { … … 105 97 106 98 // 3. For the specified pointerId, clear the pending pointer capture target override, if set. 107 auto& capturingData = iterator->value; 108 capturingData.pendingTargetOverride = nullptr; 109 110 // Since we may not call processPendingPointerCapture() until the dispatch of the next event, 111 // we must reset EventHandler's capturing mouse element right now so that the next event processed 112 // does not use it as an overriding target. 113 if (capturingData.pointerType == PointerEvent::mousePointerType()) 114 m_page.mainFrame().eventHandler().setCapturingMouseEventsElement(nullptr); 99 iterator->value.pendingTargetOverride = nullptr; 115 100 116 101 return { }; … … 124 109 // In particular, returns true if the pending pointer capture target override for pointerId is set to the element on which this method is 125 110 // invoked, and false otherwise. 126 127 if (!capturingTarget)128 return false;129 111 130 112 auto iterator = m_activePointerIdsToCapturingData.find(pointerId); … … 193 175 void PointerCaptureController::dispatchEventForTouchAtIndex(EventTarget& target, const PlatformTouchEvent& platformTouchEvent, unsigned index, bool isPrimary, WindowProxy& view) 194 176 { 195 auto dispatch OverOrOutEvent = [&](const String& type) {177 auto dispatchEvent = [&](const String& type) { 196 178 target.dispatchEvent(PointerEvent::create(type, platformTouchEvent, index, isPrimary, view)); 197 179 }; … … 232 214 // For input devices that do not support hover, a user agent MUST also fire a pointer event named pointerover followed by a pointer event named 233 215 // pointerenter prior to dispatching the pointerdown event. 234 dispatch OverOrOutEvent(eventNames().pointeroverEvent);216 dispatchEvent(eventNames().pointeroverEvent); 235 217 dispatchEnterOrLeaveEvent(eventNames().pointerenterEvent); 236 218 } 237 219 238 dispatchEvent(pointerEvent, &target); 220 pointerEventWillBeDispatched(pointerEvent, &target); 221 target.dispatchEvent(pointerEvent); 222 pointerEventWasDispatched(pointerEvent); 239 223 240 224 if (pointerEvent->type() == eventNames().pointerupEvent) { … … 242 226 // For input devices that do not support hover, a user agent MUST also fire a pointer event named pointerout followed by a 243 227 // pointer event named pointerleave after dispatching the pointerup event. 244 dispatch OverOrOutEvent(eventNames().pointeroutEvent);228 dispatchEvent(eventNames().pointeroutEvent); 245 229 dispatchEnterOrLeaveEvent(eventNames().pointerleaveEvent); 246 230 } … … 285 269 void PointerCaptureController::dispatchEvent(PointerEvent& event, EventTarget* target) 286 270 { 271 auto iterator = m_activePointerIdsToCapturingData.find(event.pointerId()); 272 if (iterator != m_activePointerIdsToCapturingData.end()) { 273 auto& capturingData = iterator->value; 274 if (capturingData.pendingTargetOverride && capturingData.targetOverride) 275 target = capturingData.targetOverride.get(); 276 } 277 278 if (!target || event.target()) 279 return; 280 287 281 pointerEventWillBeDispatched(event, target); 288 282 target->dispatchEvent(event); … … 408 402 void PointerCaptureController::processPendingPointerCapture(const PointerEvent& event) 409 403 { 410 if (m_processingPendingPointerCapture)411 return;412 413 m_processingPendingPointerCapture = true;414 415 404 // https://w3c.github.io/pointerevents/#process-pending-pointer-capture 416 405 … … 423 412 // 1. If the pointer capture target override for this pointer is set and is not equal to the pending pointer capture target override, 424 413 // then fire a pointer event named lostpointercapture at the pointer capture target override node. 425 if (capturingData.targetOverride && capturingData.targetOverride != capturingData.pendingTargetOverride) { 426 if (event.pointerType() == PointerEvent::mousePointerType()) 427 m_page.mainFrame().eventHandler().setCapturingMouseEventsElement(nullptr); 414 if (capturingData.targetOverride && capturingData.targetOverride != capturingData.pendingTargetOverride) 428 415 capturingData.targetOverride->dispatchEvent(PointerEvent::createForPointerCapture(eventNames().lostpointercaptureEvent, event)); 429 }430 416 431 417 // 2. If the pending pointer capture target override for this pointer is set and is not equal to the pointer capture target override, 432 418 // then fire a pointer event named gotpointercapture at the pending pointer capture target override. 433 if (capturingData.pendingTargetOverride && capturingData.targetOverride != capturingData.pendingTargetOverride) { 434 if (event.pointerType() == PointerEvent::mousePointerType()) 435 m_page.mainFrame().eventHandler().setCapturingMouseEventsElement(capturingData.pendingTargetOverride.get()); 419 if (capturingData.pendingTargetOverride && capturingData.targetOverride != capturingData.pendingTargetOverride) 436 420 capturingData.pendingTargetOverride->dispatchEvent(PointerEvent::createForPointerCapture(eventNames().gotpointercaptureEvent, event)); 437 }438 421 439 422 // 3. Set the pointer capture target override to the pending pointer capture target override, if set. Otherwise, clear the pointer 440 423 // capture target override. 441 424 capturingData.targetOverride = capturingData.pendingTargetOverride; 442 443 m_processingPendingPointerCapture = false;444 425 } 445 426 -
trunk/Source/WebCore/page/PointerCaptureController.h
r246674 r246729 61 61 void dispatchEvent(PointerEvent&, EventTarget*); 62 62 WEBCORE_EXPORT void cancelPointer(PointerID, const IntPoint&); 63 Element* pointerCaptureElement(PointerID);64 63 65 64 private: … … 84 83 using PointerIdToCapturingDataMap = HashMap<int64_t, CapturingData, WTF::IntHash<int64_t>, WTF::SignedWithZeroKeyHashTraits<int64_t>>; 85 84 PointerIdToCapturingDataMap m_activePointerIdsToCapturingData; 86 bool m_processingPendingPointerCapture { false };87 85 }; 88 86 -
trunk/Source/WebCore/rendering/HitTestRequest.h
r246674 r246729 45 45 CollectMultipleElements = 1 << 13, 46 46 // When using list-based testing, continue hit testing even after a hit has been found. 47 IncludeAllElementsUnderPoint = 1 << 14, 48 // When the pointer capture target has changed, we should disregard the move and active bits when invalidating the :active and :hover chains. 49 PointerCaptureElementChanged = 1 << 15 47 IncludeAllElementsUnderPoint = 1 << 14 50 48 }; 51 49 … … 72 70 bool resultIsElementList() const { return m_requestType & CollectMultipleElements; } 73 71 bool includesAllElementsUnderPoint() const { return m_requestType & IncludeAllElementsUnderPoint; } 74 bool pointerCaptureElementChanged() const { return m_requestType & PointerCaptureElementChanged; }75 72 76 73 // Convenience functions
Note: See TracChangeset
for help on using the changeset viewer.