WebKit Bugzilla
Attachment 372461 Details for
Bug 198999
: [Pointer Events] Respect pointer capture when dispatching mouse boundary events and updating :hover
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-198999-20190619163143.patch (text/plain), 27.84 KB, created by
Antoine Quint
on 2019-06-19 07:31:45 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Antoine Quint
Created:
2019-06-19 07:31:45 PDT
Size:
27.84 KB
patch
obsolete
>Subversion Revision: 246532 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 61548b320a7c9508f93d4bae785b46e4ae698e61..1c844de2c7357c6861dc71dc9c9250c9bf2849ec 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,47 @@ >+2019-06-19 Antoine Quint <graouts@apple.com> >+ >+ [Pointer Events] Respect pointer capture when dispatching mouse boundary events and updating :hover >+ https://bugs.webkit.org/show_bug.cgi?id=198999 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Up until now, we would not account for pointer capture (see https://w3c.github.io/pointerevents/#pointer-capture) when dispatching >+ mouse boundary events (mouseover, mouseout, mouseenter, mouseleave) and their counterpart pointer events. We would also not account >+ for it when updating :hover styles. >+ >+ Now, when pointer capture changes for an element, we call setCapturingMouseEventsElement() on the EventHandler such that the element >+ that would naturally hit-test is overridden by the pointer capture element when identifying which target to use for the dispatch of >+ boundary mouse events. Additionally, when calling EventHandler::prepareMouseEvent(), we also use the pointer capture element to >+ eventually pass down to Document::updateHoverActiveState() such that :hover styles are applied to the correct element. >+ >+ This also means that we need to re-run EventHandler::prepareMouseEvent() during mouse state changes to ensure that the :hover styles >+ are applied correctly should the pointer capture element change during dispatch of boundary mouse events. >+ >+ * dom/Document.cpp: >+ (WebCore::Document::prepareMouseEvent): If there is one, use the pointer capture element instead of the hit-test target. >+ (WebCore::Document::updateHoverActiveState): Relax the mustBeInActiveChain condition in case the pointer capture element changed when >+ updating the :hover/:active chains. >+ * page/EventHandler.cpp: >+ (WebCore::EventHandler::handleMousePressEvent): Re-process the mouse event if the pointer capture element changed during event dispatch. >+ (WebCore::EventHandler::handleMouseMoveEvent): Re-process the mouse event if the pointer capture element changed during event dispatch. >+ (WebCore::EventHandler::handleMouseReleaseEvent): As we know the pointer capture element will be reset as part of the mouse being >+ released, we reset the pointer capture element and EventHandler's capture element prior to invalidating hover styles and boundary events. >+ (WebCore::EventHandler::setCapturingMouseEventsElement): Dispatch boundary events when a new element is set. >+ (WebCore::EventHandler::dispatchMouseEvent): New dispatchMouseEvent() variant that re-processes the provided MouseEventWithHitTestResults >+ in case the pointer capture element changes during event dispatch, as called by handleMousePressEvent() and handleMouseMoveEvent(). >+ * page/EventHandler.h: >+ * page/PointerCaptureController.cpp: >+ (WebCore::PointerCaptureController::pointerCaptureElement): We now need to query whay the pointer capture element might be from EventHandler, >+ so expose a new method to access it. >+ (WebCore::PointerCaptureController::hasPointerCapture): We would mistakenly return true if the provided element was null, which could be the >+ case of EventHandler's capturing element. Rather than changing call sites to check that the provided value exists, we change the method to >+ return false when the provided element is null. Note that this does not affect the API since it's exposed on Element itself. >+ (WebCore::PointerCaptureController::processPendingPointerCapture): Make sure this method is not re-entrant since it dispatches events. >+ * page/PointerCaptureController.h: >+ * rendering/HitTestRequest.h: >+ (WebCore::HitTestRequest::pointerCaptureElementChanged const): Add a new HitTestRequestType bit such that we can indicate to Document::updateHoverActiveState() >+ that it must be update the :hover/:active chains when the pointer capture element has just changed. >+ > 2019-06-17 Sihui Liu <sihui_liu@apple.com> > > -[WKWebsiteDataStore removeDataOfTypes:modifiedSince:completionHandler:] doesn't delete _WKWebsiteDataTypeCredentials >diff --git a/Source/WebCore/dom/Document.cpp b/Source/WebCore/dom/Document.cpp >index 4457d13f81edaf7f20a872173ea71a1a6f205732..1001a3fd1cca2c7df3ce7ce89c06b715f9d2f6be 100644 >--- a/Source/WebCore/dom/Document.cpp >+++ b/Source/WebCore/dom/Document.cpp >@@ -320,6 +320,10 @@ > #include "GPUCanvasContext.h" > #endif > >+#if ENABLE(POINTER_EVENTS) >+#include "PointerCaptureController.h" >+#endif >+ > namespace WebCore { > > WTF_MAKE_ISO_ALLOCATED_IMPL(Document); >@@ -3732,8 +3736,16 @@ MouseEventWithHitTestResults Document::prepareMouseEvent(const HitTestRequest& r > HitTestResult result(documentPoint); > hitTest(request, result); > >- if (!request.readOnly()) >- updateHoverActiveState(request, result.targetElement()); >+ if (!request.readOnly()) { >+ Element* targetElement = result.targetElement(); >+#if ENABLE(POINTER_EVENTS) >+ if (auto* page = this->page()) { >+ if (auto* captureElement = page->pointerCaptureController().pointerCaptureElement(mousePointerID)) >+ targetElement = captureElement; >+ } >+#endif >+ updateHoverActiveState(request, targetElement); >+ } > > return MouseEventWithHitTestResults(event, result); > } >@@ -6776,8 +6788,9 @@ void Document::updateHoverActiveState(const HitTestRequest& request, Element* in > > // If the mouse is down and if this is a mouse move event, we want to restrict changes in > // :hover/:active to only apply to elements that are in the :active chain that we froze >- // at the time the mouse went down. >- bool mustBeInActiveChain = request.active() && request.move(); >+ // at the time the mouse went down. Unless the pointer capture element was changed, in which >+ // case we want to invalidate the chains anyway. >+ bool mustBeInActiveChain = request.active() && request.move() && !request.pointerCaptureElementChanged(); > > RefPtr<Element> oldHoveredElement = WTFMove(m_hoveredElement); > >diff --git a/Source/WebCore/page/EventHandler.cpp b/Source/WebCore/page/EventHandler.cpp >index a30c9e9437e75a0b25ee7d8530855b25a54a08be..b233508800a7c97d6305884193828b8a7d053523 100644 >--- a/Source/WebCore/page/EventHandler.cpp >+++ b/Source/WebCore/page/EventHandler.cpp >@@ -127,6 +127,12 @@ > #include "PointerLockController.h" > #endif > >+#if ENABLE(POINTER_EVENTS) >+#include "PointerCaptureController.h" >+#include "Quirks.h" >+#include "RuntimeEnabledFeatures.h" >+#endif >+ > namespace WebCore { > > using namespace HTMLNames; >@@ -1789,7 +1795,11 @@ bool EventHandler::handleMousePressEvent(const PlatformMouseEvent& platformMouse > > m_frame.selection().setCaretBlinkingSuspended(true); > >+#if ENABLE(POINTER_EVENTS) >+ bool swallowEvent = !dispatchMouseEvent(eventNames().mousedownEvent, mouseEvent.targetNode(), true, m_clickCount, platformMouseEvent, true, request, mouseEvent); >+#else > bool swallowEvent = !dispatchMouseEvent(eventNames().mousedownEvent, mouseEvent.targetNode(), true, m_clickCount, platformMouseEvent, true); >+#endif > m_capturesDragging = !swallowEvent || mouseEvent.scrollbar(); > > // If the hit testing originally determined the event was in a scrollbar, refetch the MouseEventWithHitTestResults >@@ -2035,7 +2045,12 @@ bool EventHandler::handleMouseMoveEvent(const PlatformMouseEvent& platformMouseE > if (swallowEvent) > return true; > >+#if ENABLE(POINTER_EVENTS) >+ swallowEvent = !dispatchMouseEvent(eventNames().mousemoveEvent, mouseEvent.targetNode(), false, 0, platformMouseEvent, true, request, mouseEvent); >+#else > swallowEvent = !dispatchMouseEvent(eventNames().mousemoveEvent, mouseEvent.targetNode(), false, 0, platformMouseEvent, true); >+#endif >+ > #if ENABLE(DRAG_SUPPORT) > if (!swallowEvent) > swallowEvent = handleMouseDraggedEvent(mouseEvent); >@@ -2139,6 +2154,20 @@ bool EventHandler::handleMouseReleaseEvent(const PlatformMouseEvent& platformMou > return !dispatchMouseEvent(eventNames().mouseupEvent, m_lastElementUnderMouse.get(), cancelable, m_clickCount, platformMouseEvent, setUnder); > } > >+ bool shouldFireBoundaryEventsWithClick = true; >+#if ENABLE(POINTER_EVENTS) >+ if (m_frame.page()->pointerCaptureController().hasPointerCapture(m_capturingMouseEventsElement.get(), mousePointerID)) { >+ // If we have pointer capture enabled, it will be disabled by virtue of receiving a "pointerup" event. For :active and :hover >+ // styles to be set correctly when prepareMouseEvent() is called below, we should already reset pointer capture. >+ m_frame.page()->pointerCaptureController().releasePointerCapture(m_capturingMouseEventsElement.get(), mousePointerID); >+ // We must also reset m_capturingMouseEventsElement to ensure boundary mouse events are dispatched on the hit-testing target. >+ m_capturingMouseEventsElement = nullptr; >+ // The click event target may differ from the hit-testing target, so let's not dispatch boundary mouse events as part of dispatching >+ // the click event below. >+ shouldFireBoundaryEventsWithClick = false; >+ } >+#endif >+ > HitTestRequest request(HitTestRequest::Release | HitTestRequest::DisallowUserAgentShadowContent); > MouseEventWithHitTestResults mouseEvent = prepareMouseEvent(request, platformMouseEvent); > Frame* subframe = m_capturingMouseEventsElement.get() ? subframeForTargetNode(m_capturingMouseEventsElement.get()) : subframeForHitTestResult(mouseEvent); >@@ -2152,7 +2181,12 @@ bool EventHandler::handleMouseReleaseEvent(const PlatformMouseEvent& platformMou > bool contextMenuEvent = platformMouseEvent.button() == RightButton; > > Node* nodeToClick = targetNodeForClickEvent(m_clickNode.get(), mouseEvent.targetNode()); >- bool swallowClickEvent = m_clickCount > 0 && !contextMenuEvent && nodeToClick && !dispatchMouseEvent(eventNames().clickEvent, nodeToClick, true, m_clickCount, platformMouseEvent, true); >+ bool swallowClickEvent = m_clickCount > 0 && !contextMenuEvent && nodeToClick && !dispatchMouseEvent(eventNames().clickEvent, nodeToClick, true, m_clickCount, platformMouseEvent, shouldFireBoundaryEventsWithClick); >+ >+ // Since we did not dispatch boundary mouse events while dispatching the click event, since the click node would have been used, >+ // we need to dispatch them now accounting for the hit-testing node. >+ if (!shouldFireBoundaryEventsWithClick) >+ updateMouseEventTargetNode(mouseEvent.targetNode(), platformMouseEvent, FireMouseOverOut::Yes); > > if (m_resizeLayer) { > m_resizeLayer->setInResizeMode(false); >@@ -2480,6 +2514,12 @@ void EventHandler::setCapturingMouseEventsElement(Element* element) > { > m_capturingMouseEventsElement = element; > m_eventHandlerWillResetCapturingMouseEventsElement = false; >+ >+#if ENABLE(POINTER_EVENTS) >+ // If we have a new capture element, we need to dispatch boundary mouse events. >+ if (element && !element->document().quirks().shouldDisablePointerEventsQuirk() && RuntimeEnabledFeatures::sharedFeatures().pointerEventsEnabled()) >+ updateMouseEventTargetNode(element, m_mouseDown, FireMouseOverOut::Yes); >+#endif > } > > MouseEventWithHitTestResults EventHandler::prepareMouseEvent(const HitTestRequest& request, const PlatformMouseEvent& mouseEvent) >@@ -2603,6 +2643,22 @@ void EventHandler::updateMouseEventTargetNode(Node* targetNode, const PlatformMo > } > } > >+#if ENABLE(POINTER_EVENTS) >+bool EventHandler::dispatchMouseEvent(const AtomString& eventType, Node* targetNode, bool cancelable, int clickCount, const PlatformMouseEvent& platformMouseEvent, bool setUnder, const HitTestRequest& request, MouseEventWithHitTestResults& mouseEvent) >+{ >+ if (!RuntimeEnabledFeatures::sharedFeatures().pointerEventsEnabled() || (targetNode && targetNode->ownerDocument() && targetNode->document().quirks().shouldDisablePointerEventsQuirk())) >+ return dispatchMouseEvent(eventType, targetNode, cancelable, clickCount, platformMouseEvent, setUnder); >+ >+ auto& pointerCaptureController = m_frame.page()->pointerCaptureController(); >+ auto* oldCaptureElement = pointerCaptureController.pointerCaptureElement(mousePointerID); >+ bool defaultPrevented = dispatchMouseEvent(eventType, targetNode, cancelable, clickCount, platformMouseEvent, setUnder); >+ auto* newCaptureElement = pointerCaptureController.pointerCaptureElement(mousePointerID); >+ if (oldCaptureElement != newCaptureElement) >+ mouseEvent = prepareMouseEvent(HitTestRequest(request.type() | HitTestRequest::PointerCaptureElementChanged), platformMouseEvent); >+ return defaultPrevented; >+} >+#endif >+ > bool EventHandler::dispatchMouseEvent(const AtomString& eventType, Node* targetNode, bool /*cancelable*/, int clickCount, const PlatformMouseEvent& platformMouseEvent, bool setUnder) > { > Ref<Frame> protectedFrame(m_frame); >diff --git a/Source/WebCore/page/EventHandler.h b/Source/WebCore/page/EventHandler.h >index 34149e11cbe5d26a42eb50ae805652d7f115b66c..ab72afa74299a1bd86b897b6d4f9b8b5a45b3f0a 100644 >--- a/Source/WebCore/page/EventHandler.h >+++ b/Source/WebCore/page/EventHandler.h >@@ -413,6 +413,9 @@ private: > MouseEventWithHitTestResults prepareMouseEvent(const HitTestRequest&, const PlatformMouseEvent&); > > bool dispatchMouseEvent(const AtomString& eventType, Node* target, bool cancelable, int clickCount, const PlatformMouseEvent&, bool setUnder); >+#if ENABLE(POINTER_EVENTS) >+ bool dispatchMouseEvent(const AtomString& eventType, Node* target, bool cancelable, int clickCount, const PlatformMouseEvent&, bool setUnder, const HitTestRequest&, MouseEventWithHitTestResults&); >+#endif > > #if ENABLE(DRAG_SUPPORT) > bool dispatchDragEvent(const AtomString& eventType, Element& target, const PlatformMouseEvent&, DataTransfer&); >diff --git a/Source/WebCore/page/PointerCaptureController.cpp b/Source/WebCore/page/PointerCaptureController.cpp >index f822abdc11db2fd87cd605939e2c0204ffbf7fc7..3c3d4aad20ca969adadc10130638a9cb7170c55b 100644 >--- a/Source/WebCore/page/PointerCaptureController.cpp >+++ b/Source/WebCore/page/PointerCaptureController.cpp >@@ -48,6 +48,14 @@ PointerCaptureController::PointerCaptureController(Page& page) > reset(); > } > >+Element* PointerCaptureController::pointerCaptureElement(PointerID pointerId) >+{ >+ auto iterator = m_activePointerIdsToCapturingData.find(pointerId); >+ if (iterator != m_activePointerIdsToCapturingData.end()) >+ return iterator->value.pendingTargetOverride.get(); >+ return nullptr; >+} >+ > ExceptionOr<void> PointerCaptureController::setPointerCapture(Element* capturingTarget, PointerID pointerId) > { > // https://w3c.github.io/pointerevents/#setting-pointer-capture >@@ -109,6 +117,9 @@ bool PointerCaptureController::hasPointerCapture(Element* capturingTarget, Point > // In particular, returns true if the pending pointer capture target override for pointerId is set to the element on which this method is > // invoked, and false otherwise. > >+ if (!capturingTarget) >+ return false; >+ > auto iterator = m_activePointerIdsToCapturingData.find(pointerId); > return iterator != m_activePointerIdsToCapturingData.end() && iterator->value.pendingTargetOverride == capturingTarget; > } >@@ -401,6 +412,11 @@ void PointerCaptureController::cancelPointer(PointerID pointerId, const IntPoint > > void PointerCaptureController::processPendingPointerCapture(const PointerEvent& event) > { >+ if (m_processingPendingPointerCapture) >+ return; >+ >+ m_processingPendingPointerCapture = true; >+ > // https://w3c.github.io/pointerevents/#process-pending-pointer-capture > > auto iterator = m_activePointerIdsToCapturingData.find(event.pointerId()); >@@ -411,17 +427,23 @@ void PointerCaptureController::processPendingPointerCapture(const PointerEvent& > > // 1. If the pointer capture target override for this pointer is set and is not equal to the pending pointer capture target override, > // then fire a pointer event named lostpointercapture at the pointer capture target override node. >- if (capturingData.targetOverride && capturingData.targetOverride != capturingData.pendingTargetOverride) >+ if (capturingData.targetOverride && capturingData.targetOverride != capturingData.pendingTargetOverride) { >+ m_page.mainFrame().eventHandler().setCapturingMouseEventsElement(nullptr); > capturingData.targetOverride->dispatchEvent(PointerEvent::createForPointerCapture(eventNames().lostpointercaptureEvent, event)); >+ } > > // 2. If the pending pointer capture target override for this pointer is set and is not equal to the pointer capture target override, > // then fire a pointer event named gotpointercapture at the pending pointer capture target override. >- if (capturingData.pendingTargetOverride && capturingData.targetOverride != capturingData.pendingTargetOverride) >+ if (capturingData.pendingTargetOverride && capturingData.targetOverride != capturingData.pendingTargetOverride) { >+ m_page.mainFrame().eventHandler().setCapturingMouseEventsElement(capturingData.pendingTargetOverride.get()); > capturingData.pendingTargetOverride->dispatchEvent(PointerEvent::createForPointerCapture(eventNames().gotpointercaptureEvent, event)); >+ } > > // 3. Set the pointer capture target override to the pending pointer capture target override, if set. Otherwise, clear the pointer > // capture target override. > capturingData.targetOverride = capturingData.pendingTargetOverride; >+ >+ m_processingPendingPointerCapture = false; > } > > } // namespace WebCore >diff --git a/Source/WebCore/page/PointerCaptureController.h b/Source/WebCore/page/PointerCaptureController.h >index 3041e3a88d5a7851502506b314819466484efdd4..0b1a05d4041e61f3b4c5d427c8c4ab86e505a3d5 100644 >--- a/Source/WebCore/page/PointerCaptureController.h >+++ b/Source/WebCore/page/PointerCaptureController.h >@@ -60,6 +60,7 @@ public: > bool preventsCompatibilityMouseEventsForIdentifier(PointerID); > void dispatchEvent(PointerEvent&, EventTarget*); > WEBCORE_EXPORT void cancelPointer(PointerID, const IntPoint&); >+ Element* pointerCaptureElement(PointerID); > > private: > struct CapturingData { >@@ -82,6 +83,7 @@ private: > // empty and removed values, allowing any int32_t to be provided through the API for lookup in this hashmap. > using PointerIdToCapturingDataMap = HashMap<int64_t, CapturingData, WTF::IntHash<int64_t>, WTF::SignedWithZeroKeyHashTraits<int64_t>>; > PointerIdToCapturingDataMap m_activePointerIdsToCapturingData; >+ bool m_processingPendingPointerCapture { false }; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/rendering/HitTestRequest.h b/Source/WebCore/rendering/HitTestRequest.h >index 1cf51447b40ee491f3dfa3ad6523987d89867ccf..b3c076eaffa81d17ef052acb982ff390d16b007b 100644 >--- a/Source/WebCore/rendering/HitTestRequest.h >+++ b/Source/WebCore/rendering/HitTestRequest.h >@@ -44,7 +44,9 @@ public: > // Collect a list of nodes instead of just one. Used for elementsFromPoint and rect-based tests. > CollectMultipleElements = 1 << 13, > // When using list-based testing, continue hit testing even after a hit has been found. >- IncludeAllElementsUnderPoint = 1 << 14 >+ IncludeAllElementsUnderPoint = 1 << 14, >+ // When the pointer capture target has changed, we should disregard the move and active bits when invalidating the :active and :hover chains. >+ PointerCaptureElementChanged = 1 << 15 > }; > > typedef unsigned HitTestRequestType; >@@ -69,6 +71,7 @@ public: > bool isChildFrameHitTest() const { return m_requestType & ChildFrameHitTest; } > bool resultIsElementList() const { return m_requestType & CollectMultipleElements; } > bool includesAllElementsUnderPoint() const { return m_requestType & IncludeAllElementsUnderPoint; } >+ bool pointerCaptureElementChanged() const { return m_requestType & PointerCaptureElementChanged; } > > // Convenience functions > bool touchMove() const { return move() && touchEvent(); } >diff --git a/LayoutTests/imported/w3c/ChangeLog b/LayoutTests/imported/w3c/ChangeLog >index 65f5c8c0d9bf08d748f5c1990ddcac00b3c4f1f9..2d4f79b992a2a64185fccfe45bd8e0644d321f09 100644 >--- a/LayoutTests/imported/w3c/ChangeLog >+++ b/LayoutTests/imported/w3c/ChangeLog >@@ -1,3 +1,17 @@ >+2019-06-19 Antoine Quint <graouts@apple.com> >+ >+ [Pointer Events] Respect pointer capture when dispatching mouse boundary events and updating :hover >+ https://bugs.webkit.org/show_bug.cgi?id=198999 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Record progressions in two WPT tests and mark updated failures in two other WPT tests. >+ >+ * web-platform-tests/pointerevents/pointerevent_boundary_events_at_implicit_release_hoverable_pointers-expected.txt: >+ * web-platform-tests/pointerevents/pointerevent_click_during_capture-expected.txt: >+ * web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt: >+ * web-platform-tests/pointerevents/pointerevent_setpointercapture_relatedtarget-expected.txt: >+ > 2019-06-14 Ali Juma <ajuma@chromium.org> > > IntersectionObserver rootMargin detection fails when `root` is an element >diff --git a/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_boundary_events_at_implicit_release_hoverable_pointers-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_boundary_events_at_implicit_release_hoverable_pointers-expected.txt >index 02f6a828305a3776b5804d7aeda39347a21ae6f5..98a62ea474dad81f97854bcfad4ad8fb63bf8769 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_boundary_events_at_implicit_release_hoverable_pointers-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_boundary_events_at_implicit_release_hoverable_pointers-expected.txt >@@ -6,5 +6,5 @@ When a captured pointer is implicitly released after a click, the boundary event > > Click on the black box with mouse and do not move the mouse after or during the click. > >-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" >+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" > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_click_during_capture-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_click_during_capture-expected.txt >index 2db1bcc892f4350eb20eba8157d44743f8f59bb6..9c13337b521364b2e0ee112c37f749b50ba9b1e5 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_click_during_capture-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_click_during_capture-expected.txt >@@ -9,7 +9,7 @@ Repeat the two steps above once again. > > > >-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" >+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" > PASS Click target when pointerup/down targeted at the same element with no capture > PASS Click target when pointerup/down targeted at different elements with no capture > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt >index 8ae0fa221a4940a8fc2a5e64051530324b1b3e4e..199239c6611e4d05d71542fff18d673e4e655f33 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_mouse_capture_change_hover-expected.txt >@@ -1,5 +1,5 @@ > >-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 >-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 >-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" >+PASS Mouse down and capture to green. >+PASS Mouse down at green and capture to blue. >+PASS Mouse down and capture to green, move to blue and release capture > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_setpointercapture_relatedtarget-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_setpointercapture_relatedtarget-expected.txt >index db8c51d0cddf8796a73a2713555c1eec9d785b19..36e040ea01bfc2e4de0fbc131b4ef56eb0e2f5a6 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_setpointercapture_relatedtarget-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/pointerevents/pointerevent_setpointercapture_relatedtarget-expected.txt >@@ -16,14 +16,11 @@ Test complete: Scroll to Summary to view Pass/Fail Results. > > The following pointer types were detected: mouse. > >-The following events were logged: pointerover@target1, gotpointercapture@target0, pointerover@target0, pointerover@target0, lostpointercapture@target0. >+The following events were logged: pointerover@target1, pointerover@target0, gotpointercapture@target0, lostpointercapture@target0. > > Refresh the page to run the tests again with a different pointer type. > > >-Harness Error (FAIL), message = 1 duplicate test name: "relatedTarget should not be null even when the capture is set." >- > PASS pointerover shouldn't trigger for the purple rectangle while the black rectangle has capture > PASS relatedTarget should not be null even when the capture is set. >-PASS relatedTarget should not be null even when the capture is set. >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 198999
:
372461
|
372463
|
372468
|
372472
|
372481
|
372551
|
372685
|
372695
|
372919
|
372923
|
372924
|
372931
|
372955