Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: e0f194b565c5e905b30d76b81cca45dbb68c0ea8
https://github.com/WebKit/WebKit/commit/e0f194b565c5e905b30d76b81cca45dbb68c0ea8
Author: Brent Fulgham <[email protected]>
Date: 2026-03-06 (Fri, 06 Mar 2026)
Changed paths:
A LayoutTests/fast/events/drag-relatedTarget-expected.txt
A LayoutTests/fast/events/drag-relatedTarget.html
A
LayoutTests/imported/w3c/web-platform-tests/html/editing/dnd/events/dragenter-dragleave-related-target-expected.txt
A
LayoutTests/imported/w3c/web-platform-tests/html/editing/dnd/events/dragenter-dragleave-related-target.html
M LayoutTests/platform/glib/TestExpectations
M LayoutTests/platform/ios/TestExpectations
M Source/WebCore/dom/DragEvent.cpp
M Source/WebCore/dom/DragEvent.h
M Source/WebCore/dom/MouseEvent.cpp
M Source/WebCore/dom/MouseEvent.h
M Source/WebCore/page/EventHandler.cpp
M Source/WebCore/page/EventHandler.h
M Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
A Tools/TestWebKitAPI/Tests/WebKitCocoa/drag-relatedTarget.html
M Tools/TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm
M Tools/TestWebKitAPI/Tests/mac/DragAndDropTestsMac.mm
Log Message:
-----------
dragenter & dragleave events do not include relatedTarget in the event object
https://bugs.webkit.org/show_bug.cgi?id=66547
rdar://122588344
Reviewed by Ryosuke Niwa.
Per the DOM Level 2 Events specification, MouseEvent's relatedTarget identifies
the secondary element involved in a boundary-crossing event: for mouseover it is
the element exited, and for mouseout it is the element entered. The HTML Living
Standard extends this to drag boundary events: dragenter's relatedTarget is the
previous drag target, and dragleave's relatedTarget is the new drag target.
WebKit was not setting relatedTarget on either event, leaving it null in all
cases. This change threads a relatedTarget through EventHandler's drag dispatch
helpers and passes m_dragTarget when firing dragenter (the element just exited)
and the newly-entered element when firing dragleave (the element being entered).
Cross-document references are suppressed to avoid leaking nodes across document
boundaries.
Three new tests were added: A WPT test, that sadly does not work on iOS/GTK/WPE
due to
missing testdriver features, a regular WebKit test that also only works on
macOS, and
API tests that work on iOS and macOS.
Tests: fast/events/drag-relatedTarget.html
imported/w3c/web-platform-tests/html/editing/dnd/events/dragenter-dragleave-related-target.html
* LayoutTests/fast/events/drag-relatedTarget-expected.txt: Added.
* LayoutTests/fast/events/drag-relatedTarget.html: Added.
*
LayoutTests/imported/w3c/web-platform-tests/html/editing/dnd/events/dragenter-dragleave-related-target-expected.txt:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/html/editing/dnd/events/dragenter-dragleave-related-target.html:
Added.
* LayoutTests/platform/glib/TestExpectations:
* LayoutTests/platform/ios/TestExpectations:
* Source/WebCore/dom/DragEvent.cpp:
(WebCore::DragEvent::create): Changed relatedTarget parameter from raw
EventTarget* to
RefPtr<EventTarget>&& to express ownership clearly and allow move semantics.
(WebCore::DragEvent::DragEvent): Ditto.
* Source/WebCore/dom/DragEvent.h:
* Source/WebCore/dom/MouseEvent.cpp:
(WebCore::MouseEvent::create): Ditto.
(WebCore::MouseEvent::MouseEvent): Ditto.
(WebCore::m_relatedTarget): Ditto.
(WebCore::MouseEvent::initMouseEvent): Ditto.
* Source/WebCore/dom/MouseEvent.h:
(WebCore::MouseEvent::create): Ditto.
* Source/WebCore/page/EventHandler.cpp:
(WebCore::EventHandler::dispatchDragEvent): Added relatedTarget parameter and
pass
m_dragTarget for dragenter and the incoming new target for dragleave. Suppress
cross-document relatedTarget.
(WebCore::EventHandler::dispatchDragEnterOrDragOverEvent): Added relatedTarget
parameter.
(WebCore::EventHandler::updateDragAndDrop): Pass proper relatedTarget.
(WebCore::EventHandler::cancelDragAndDrop): Ditto.
(WebCore::EventHandler::performDragAndDrop): Ditto.
(WebCore::EventHandler::dispatchEventToDragSourceElement): Ditto.
(WebCore::EventHandler::dispatchDragStartEventOnSourceElement): Ditto.
* Source/WebCore/page/EventHandler.h:
* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/drag-relatedTarget.html: Added.
* Tools/TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
(TestWebKitAPI::TEST(DragAndDropTests, DragEnterAndLeaveRelatedTarget)):
* Tools/TestWebKitAPI/Tests/mac/DragAndDropTestsMac.mm:
(TEST(DragAndDropTests, DragEnterAndLeaveRelatedTarget)):
Canonical link: https://commits.webkit.org/308850@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications