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

Reply via email to