Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 05f145f9a116c459b4d5df49f1832309a5bc5a27
https://github.com/WebKit/WebKit/commit/05f145f9a116c459b4d5df49f1832309a5bc5a27
Author: Ryosuke Niwa <[email protected]>
Date: 2026-04-25 (Sat, 25 Apr 2026)
Changed paths:
A LayoutTests/fast/events/event-disconnected-target-expected.txt
A LayoutTests/fast/events/event-disconnected-target.html
M Source/WebCore/Modules/WebGPU/GPUDevice.cpp
M Source/WebCore/Modules/async-clipboard/Clipboard.cpp
M Source/WebCore/Modules/encryptedmedia/MediaKeySession.cpp
M Source/WebCore/Modules/mediarecorder/MediaRecorder.cpp
M Source/WebCore/Modules/mediasource/DOMURLMediaSource.cpp
M Source/WebCore/Modules/mediasource/SourceBuffer.cpp
M Source/WebCore/Modules/mediasource/SourceBuffer.h
M Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp
M Source/WebCore/Modules/mediastream/NavigatorMediaDevices.cpp
M Source/WebCore/Modules/mediastream/RTCDTMFSender.cpp
M Source/WebCore/Modules/mediastream/RTCDataChannel.cpp
M Source/WebCore/Modules/remoteplayback/RemotePlayback.cpp
M Source/WebCore/Modules/remoteplayback/RemotePlayback.h
M Source/WebCore/Modules/remoteplayback/RemotePlayback.idl
M Source/WebCore/Modules/webaudio/ConstantSourceNode.cpp
M Source/WebCore/Modules/webaudio/IIRFilterNode.cpp
M Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.cpp
M Source/WebCore/Modules/webaudio/WaveShaperDSPKernel.cpp
M Source/WebCore/Modules/webcodecs/WebCodecsAudioDecoder.cpp
M Source/WebCore/Modules/webcodecs/WebCodecsVideoDecoder.cpp
M Source/WebCore/Modules/webxr/WebXRBoundedReferenceSpace.cpp
M Source/WebCore/Modules/webxr/WebXRJointSpace.cpp
M Source/WebCore/Modules/webxr/WebXRLayer.cpp
M Source/WebCore/Modules/webxr/WebXRReferenceSpace.cpp
M Source/WebCore/Modules/webxr/WebXRSpace.cpp
M Source/WebCore/Modules/webxr/WebXRWebGLLayer.cpp
M Source/WebCore/Modules/webxr/XRCompositionLayer.cpp
M Source/WebCore/Modules/webxr/XRCylinderLayer.cpp
M Source/WebCore/Modules/webxr/XRQuadLayer.cpp
M Source/WebCore/bindings/js/JSEventCustom.cpp
M Source/WebCore/dom/Event.cpp
M Source/WebCore/dom/Event.h
M Source/WebCore/dom/Event.idl
M Source/WebCore/dom/EventTarget.cpp
M Source/WebCore/dom/EventTarget.h
M Source/WebCore/dom/EventTargetInlines.h
M Source/WebCore/dom/Node.cpp
M Source/WebCore/dom/Node.h
M Source/WebCore/dom/NodeInlines.h
M Source/WebCore/dom/XMLDocument.cpp
M Source/WebCore/dom/XMLDocument.h
M Source/WebCore/fileapi/Blob.cpp
M Source/WebCore/html/HTMLAudioElement.cpp
M Source/WebCore/html/HTMLAudioElement.h
M Source/WebCore/html/HTMLBDIElement.cpp
M Source/WebCore/html/HTMLBDIElement.h
M Source/WebCore/html/HTMLDListElement.cpp
M Source/WebCore/html/HTMLDListElement.h
M Source/WebCore/html/HTMLDataElement.cpp
M Source/WebCore/html/HTMLDataElement.h
M Source/WebCore/html/HTMLDirectoryElement.cpp
M Source/WebCore/html/HTMLDirectoryElement.h
M Source/WebCore/html/HTMLHeadElement.cpp
M Source/WebCore/html/HTMLHeadElement.h
M Source/WebCore/html/HTMLHeadingElement.cpp
M Source/WebCore/html/HTMLHeadingElement.h
M Source/WebCore/html/HTMLHtmlElement.cpp
M Source/WebCore/html/HTMLHtmlElement.h
M Source/WebCore/html/HTMLMenuElement.cpp
M Source/WebCore/html/HTMLMenuElement.h
M Source/WebCore/html/HTMLParamElement.cpp
M Source/WebCore/html/HTMLParamElement.h
M Source/WebCore/html/HTMLSelectElementWin.cpp
M Source/WebCore/html/HTMLSpanElement.cpp
M Source/WebCore/html/HTMLSpanElement.h
M Source/WebCore/html/HTMLTableRowElement.cpp
M Source/WebCore/html/HTMLTableRowElement.h
M Source/WebCore/html/HTMLTimeElement.cpp
M Source/WebCore/html/HTMLTimeElement.h
M Source/WebCore/html/HTMLUnknownElement.cpp
M Source/WebCore/html/HTMLUnknownElement.h
M Source/WebCore/html/track/InbandDataTextTrack.cpp
M Source/WebCore/html/track/TextTrack.h
M Source/WebCore/html/track/TextTrackCue.cpp
M Source/WebCore/html/track/TextTrackCue.h
M Source/WebCore/html/track/TrackBase.cpp
M Source/WebCore/html/track/TrackBase.h
M Source/WebCore/html/track/TrackListBase.cpp
M Source/WebCore/html/track/TrackListBase.h
M Source/WebCore/loader/SinkDocument.cpp
M Source/WebCore/mathml/MathMLUnknownElement.cpp
M Source/WebCore/mathml/MathMLUnknownElement.h
M Source/WebCore/page/Crypto.cpp
M Source/WebCore/page/UserContentProvider.cpp
M Source/WebCore/svg/SVGDocument.cpp
M Source/WebCore/svg/SVGDocument.h
M Source/WebCore/testing/EventTargetForTesting.cpp
Log Message:
-----------
Event's target can get its JS wrapper GC'ed
https://bugs.webkit.org/show_bug.cgi?id=312491
Reviewed by Geoffrey Garen.
Add the opaque root of Event target when visiting Event to avoid
premature collection of JS wrappers of the event target.
To do this, we introduce a virtual EventTarget::opaqueRoot() const which
each event target overrides to provide the opaque root.
Test: fast/events/event-disconnected-target.html
* LayoutTests/fast/events/event-disconnected-target-expected.txt: Added.
* LayoutTests/fast/events/event-disconnected-target.html: Added.
* Source/WebCore/Modules/WebGPU/GPUDevice.cpp:
* Source/WebCore/Modules/async-clipboard/Clipboard.cpp:
* Source/WebCore/Modules/encryptedmedia/MediaKeySession.cpp:
* Source/WebCore/Modules/mediarecorder/MediaRecorder.cpp:
* Source/WebCore/Modules/mediasource/DOMURLMediaSource.cpp:
* Source/WebCore/Modules/mediasource/SourceBuffer.cpp:
(WebCore::SourceBuffer::opaqueRoot const):
(WebCore::SourceBuffer::opaqueRoot): Deleted.
* Source/WebCore/Modules/mediasource/SourceBuffer.h:
* Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
* Source/WebCore/Modules/mediastream/NavigatorMediaDevices.cpp:
* Source/WebCore/Modules/mediastream/RTCDTMFSender.cpp:
* Source/WebCore/Modules/mediastream/RTCDataChannel.cpp:
* Source/WebCore/Modules/remoteplayback/RemotePlayback.cpp:
(WebCore::RemotePlayback::opaqueRoot const):
(WebCore::RemotePlayback::opaqueRootConcurrently const): Deleted.
* Source/WebCore/Modules/remoteplayback/RemotePlayback.h:
* Source/WebCore/Modules/remoteplayback/RemotePlayback.idl:
* Source/WebCore/Modules/webaudio/ConstantSourceNode.cpp:
* Source/WebCore/Modules/webaudio/IIRFilterNode.cpp:
* Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
* Source/WebCore/Modules/webaudio/WaveShaperDSPKernel.cpp:
* Source/WebCore/Modules/webcodecs/WebCodecsAudioDecoder.cpp:
* Source/WebCore/Modules/webcodecs/WebCodecsVideoDecoder.cpp:
* Source/WebCore/Modules/webxr/WebXRBoundedReferenceSpace.cpp:
* Source/WebCore/Modules/webxr/WebXRJointSpace.cpp:
* Source/WebCore/Modules/webxr/WebXRLayer.cpp:
* Source/WebCore/Modules/webxr/WebXRReferenceSpace.cpp:
* Source/WebCore/Modules/webxr/WebXRSpace.cpp:
* Source/WebCore/Modules/webxr/WebXRWebGLLayer.cpp:
* Source/WebCore/Modules/webxr/XRCompositionLayer.cpp:
* Source/WebCore/Modules/webxr/XRCylinderLayer.cpp:
* Source/WebCore/Modules/webxr/XRQuadLayer.cpp:
* Source/WebCore/bindings/js/JSEventCustom.cpp:
(WebCore::JSEvent::visitAdditionalChildrenInGCThread):
* Source/WebCore/dom/Event.cpp:
(WebCore::Event::setTarget):
(WebCore::Event::visitInGCThread):
* Source/WebCore/dom/Event.h:
* Source/WebCore/dom/Event.idl:
* Source/WebCore/dom/EventTarget.cpp:
(WebCore::EventTarget::opaqueRoot const):
* Source/WebCore/dom/EventTarget.h:
* Source/WebCore/dom/EventTargetInlines.h:
(WebCore::EventTarget::opaqueRoot const):
* Source/WebCore/dom/Node.cpp:
(WebCore::Node::opaqueRoot const):
* Source/WebCore/dom/Node.h:
* Source/WebCore/dom/NodeInlines.h:
(WebCore::Node::opaqueRoot const):
* Source/WebCore/dom/XMLDocument.cpp:
* Source/WebCore/dom/XMLDocument.h:
* Source/WebCore/fileapi/Blob.cpp:
* Source/WebCore/html/HTMLAudioElement.cpp:
* Source/WebCore/html/HTMLAudioElement.h:
* Source/WebCore/html/HTMLBDIElement.cpp:
* Source/WebCore/html/HTMLBDIElement.h:
* Source/WebCore/html/HTMLDListElement.cpp:
* Source/WebCore/html/HTMLDListElement.h:
* Source/WebCore/html/HTMLDataElement.cpp:
* Source/WebCore/html/HTMLDataElement.h:
* Source/WebCore/html/HTMLDirectoryElement.cpp:
* Source/WebCore/html/HTMLDirectoryElement.h:
* Source/WebCore/html/HTMLHeadElement.cpp:
* Source/WebCore/html/HTMLHeadElement.h:
* Source/WebCore/html/HTMLHeadingElement.cpp:
* Source/WebCore/html/HTMLHeadingElement.h:
* Source/WebCore/html/HTMLHtmlElement.cpp:
* Source/WebCore/html/HTMLHtmlElement.h:
* Source/WebCore/html/HTMLMenuElement.cpp:
* Source/WebCore/html/HTMLMenuElement.h:
* Source/WebCore/html/HTMLParamElement.cpp:
* Source/WebCore/html/HTMLParamElement.h:
* Source/WebCore/html/HTMLSelectElementWin.cpp:
* Source/WebCore/html/HTMLSpanElement.cpp:
* Source/WebCore/html/HTMLSpanElement.h:
* Source/WebCore/html/HTMLTableRowElement.cpp:
* Source/WebCore/html/HTMLTableRowElement.h:
* Source/WebCore/html/HTMLTimeElement.cpp:
* Source/WebCore/html/HTMLTimeElement.h:
* Source/WebCore/html/HTMLUnknownElement.cpp:
* Source/WebCore/html/HTMLUnknownElement.h:
* Source/WebCore/html/track/InbandDataTextTrack.cpp:
* Source/WebCore/html/track/TextTrack.h:
* Source/WebCore/html/track/TextTrackCue.cpp:
* Source/WebCore/html/track/TextTrackCue.h:
(WebCore::TextTrackCueBox::~TextTrackCueBox): Deleted.
* Source/WebCore/html/track/TrackBase.cpp:
(WebCore::TrackBase::opaqueRoot const):
(WebCore::TrackBase::opaqueRoot): Deleted.
* Source/WebCore/html/track/TrackBase.h:
* Source/WebCore/html/track/TrackListBase.cpp:
(WebCore::TrackListBase::opaqueRoot const):
(WebCore::TrackListBase::opaqueRoot): Deleted.
* Source/WebCore/html/track/TrackListBase.h:
* Source/WebCore/loader/SinkDocument.cpp:
* Source/WebCore/mathml/MathMLUnknownElement.cpp:
* Source/WebCore/mathml/MathMLUnknownElement.h:
* Source/WebCore/page/Crypto.cpp:
* Source/WebCore/page/UserContentProvider.cpp:
* Source/WebCore/svg/SVGDocument.cpp:
* Source/WebCore/svg/SVGDocument.h:
* Source/WebCore/testing/EventTargetForTesting.cpp:
Canonical link: https://commits.webkit.org/312017@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications