Commit 35a6c314 authored by Gabriel Ivăncescu's avatar Gabriel Ivăncescu Committed by Alexandre Julliard

mshtml: Traverse EventTarget listeners.

parent 30d88426
...@@ -4587,6 +4587,17 @@ void EventTarget_Init(EventTarget *event_target, dispex_static_data_t *dispex_da ...@@ -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); 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) void release_event_target(EventTarget *event_target)
{ {
listener_container_t *iter, *iter2; listener_container_t *iter, *iter2;
......
...@@ -97,6 +97,7 @@ typedef struct DOMEvent { ...@@ -97,6 +97,7 @@ typedef struct DOMEvent {
const WCHAR *get_event_name(eventid_t); const WCHAR *get_event_name(eventid_t);
void check_event_attr(HTMLDocumentNode*,nsIDOMElement*); void check_event_attr(HTMLDocumentNode*,nsIDOMElement*);
void traverse_event_target(EventTarget*,nsCycleCollectionTraversalCallback*);
void release_event_target(EventTarget*); void release_event_target(EventTarget*);
HRESULT set_event_handler(EventTarget*,eventid_t,VARIANT*); HRESULT set_event_handler(EventTarget*,eventid_t,VARIANT*);
HRESULT get_event_handler(EventTarget*,eventid_t,VARIANT*); HRESULT get_event_handler(EventTarget*,eventid_t,VARIANT*);
......
...@@ -1425,6 +1425,7 @@ void HTMLDOMNode_traverse(DispatchEx *dispex, nsCycleCollectionTraversalCallback ...@@ -1425,6 +1425,7 @@ void HTMLDOMNode_traverse(DispatchEx *dispex, nsCycleCollectionTraversalCallback
{ {
HTMLDOMNode *This = HTMLDOMNode_from_DispatchEx(dispex); HTMLDOMNode *This = HTMLDOMNode_from_DispatchEx(dispex);
traverse_event_target(&This->event_target, cb);
if(This->nsnode) if(This->nsnode)
note_cc_edge((nsISupports*)This->nsnode, "nsnode", cb); note_cc_edge((nsISupports*)This->nsnode, "nsnode", cb);
if(This->doc && &This->doc->node != This) if(This->doc && &This->doc->node != This)
......
...@@ -3922,6 +3922,7 @@ static void HTMLWindow_traverse(DispatchEx *dispex, nsCycleCollectionTraversalCa ...@@ -3922,6 +3922,7 @@ static void HTMLWindow_traverse(DispatchEx *dispex, nsCycleCollectionTraversalCa
HTMLInnerWindow *This = impl_from_DispatchEx(dispex); HTMLInnerWindow *This = impl_from_DispatchEx(dispex);
HTMLOuterWindow *child; HTMLOuterWindow *child;
traverse_event_target(&This->event_target, cb);
LIST_FOR_EACH_ENTRY(child, &This->children, HTMLOuterWindow, sibling_entry) LIST_FOR_EACH_ENTRY(child, &This->children, HTMLOuterWindow, sibling_entry)
note_cc_edge((nsISupports*)&child->base.IHTMLWindow2_iface, "child", cb); note_cc_edge((nsISupports*)&child->base.IHTMLWindow2_iface, "child", cb);
if(This->doc) if(This->doc)
......
...@@ -1514,6 +1514,7 @@ static void HTMLXMLHttpRequest_traverse(DispatchEx *dispex, nsCycleCollectionTra ...@@ -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); note_cc_edge((nsISupports*)&This->pending_progress_event->IDOMEvent_iface, "pending_progress_event", cb);
if(This->nsxhr) if(This->nsxhr)
note_cc_edge((nsISupports*)This->nsxhr, "nsxhr", cb); note_cc_edge((nsISupports*)This->nsxhr, "nsxhr", cb);
traverse_event_target(&This->event_target, cb);
} }
static void HTMLXMLHttpRequest_unlink(DispatchEx *dispex) static void HTMLXMLHttpRequest_unlink(DispatchEx *dispex)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment