1
0
mirror of https://github.com/wine-mirror/wine synced 2024-07-08 20:06:18 +00:00

mshtml: Traverse EventTarget listeners.

Signed-off-by: Gabriel Ivăncescu <gabrielopcode@gmail.com>
This commit is contained in:
Gabriel Ivăncescu 2023-10-02 21:39:22 +03:00 committed by Alexandre Julliard
parent 30d88426d5
commit 35a6c314d4
5 changed files with 15 additions and 0 deletions

View File

@ -4587,6 +4587,17 @@ void EventTarget_Init(EventTarget *event_target, dispex_static_data_t *dispex_da
wine_rb_init(&event_target->handler_map, event_id_cmp);
}
void traverse_event_target(EventTarget *event_target, nsCycleCollectionTraversalCallback *cb)
{
listener_container_t *iter;
event_listener_t *listener;
RB_FOR_EACH_ENTRY(iter, &event_target->handler_map, listener_container_t, entry)
LIST_FOR_EACH_ENTRY(listener, &iter->listeners, event_listener_t, entry)
if(listener->function)
note_cc_edge((nsISupports*)listener->function, "EventTarget.listener", cb);
}
void release_event_target(EventTarget *event_target)
{
listener_container_t *iter, *iter2;

View File

@ -97,6 +97,7 @@ typedef struct DOMEvent {
const WCHAR *get_event_name(eventid_t);
void check_event_attr(HTMLDocumentNode*,nsIDOMElement*);
void traverse_event_target(EventTarget*,nsCycleCollectionTraversalCallback*);
void release_event_target(EventTarget*);
HRESULT set_event_handler(EventTarget*,eventid_t,VARIANT*);
HRESULT get_event_handler(EventTarget*,eventid_t,VARIANT*);

View File

@ -1425,6 +1425,7 @@ void HTMLDOMNode_traverse(DispatchEx *dispex, nsCycleCollectionTraversalCallback
{
HTMLDOMNode *This = HTMLDOMNode_from_DispatchEx(dispex);
traverse_event_target(&This->event_target, cb);
if(This->nsnode)
note_cc_edge((nsISupports*)This->nsnode, "nsnode", cb);
if(This->doc && &This->doc->node != This)

View File

@ -3922,6 +3922,7 @@ static void HTMLWindow_traverse(DispatchEx *dispex, nsCycleCollectionTraversalCa
HTMLInnerWindow *This = impl_from_DispatchEx(dispex);
HTMLOuterWindow *child;
traverse_event_target(&This->event_target, cb);
LIST_FOR_EACH_ENTRY(child, &This->children, HTMLOuterWindow, sibling_entry)
note_cc_edge((nsISupports*)&child->base.IHTMLWindow2_iface, "child", cb);
if(This->doc)

View File

@ -1514,6 +1514,7 @@ static void HTMLXMLHttpRequest_traverse(DispatchEx *dispex, nsCycleCollectionTra
note_cc_edge((nsISupports*)&This->pending_progress_event->IDOMEvent_iface, "pending_progress_event", cb);
if(This->nsxhr)
note_cc_edge((nsISupports*)This->nsxhr, "nsxhr", cb);
traverse_event_target(&This->event_target, cb);
}
static void HTMLXMLHttpRequest_unlink(DispatchEx *dispex)