Module: wine Branch: master Commit: e5c40735ca05043e971faf8630933fc18ae09a20 URL: https://gitlab.winehq.org/wine/wine/-/commit/e5c40735ca05043e971faf8630933fc...
Author: Gabriel Ivăncescu gabrielopcode@gmail.com Date: Fri Sep 15 16:54:17 2023 +0300
mshtml: Traverse and unlink ScriptElements using the dispex.
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com
---
dlls/mshtml/htmlscript.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/dlls/mshtml/htmlscript.c b/dlls/mshtml/htmlscript.c index 84dd77dc13d..7bedf3682c7 100644 --- a/dlls/mshtml/htmlscript.c +++ b/dlls/mshtml/htmlscript.c @@ -401,17 +401,24 @@ static HRESULT HTMLScriptElement_bind_to_tree(HTMLDOMNode *iface) return S_OK; }
-static void HTMLScriptElement_traverse(HTMLDOMNode *iface, nsCycleCollectionTraversalCallback *cb) +static inline HTMLScriptElement *impl_from_DispatchEx(DispatchEx *iface) { - HTMLScriptElement *This = impl_from_HTMLDOMNode(iface); + return CONTAINING_RECORD(iface, HTMLScriptElement, element.node.event_target.dispex); +} + +static void HTMLScriptElement_traverse(DispatchEx *dispex, nsCycleCollectionTraversalCallback *cb) +{ + HTMLScriptElement *This = impl_from_DispatchEx(dispex); + HTMLDOMNode_traverse(dispex, cb);
if(This->nsscript) - note_cc_edge((nsISupports*)This->nsscript, "This->nsscript", cb); + note_cc_edge((nsISupports*)This->nsscript, "nsscript", cb); }
-static void HTMLScriptElement_unlink(HTMLDOMNode *iface) +static void HTMLScriptElement_unlink(DispatchEx *dispex) { - HTMLScriptElement *This = impl_from_HTMLDOMNode(iface); + HTMLScriptElement *This = impl_from_DispatchEx(dispex); + HTMLDOMNode_unlink(dispex); unlink_ref(&This->nsscript); }
@@ -425,8 +432,15 @@ static const NodeImplVtbl HTMLScriptElementImplVtbl = { .get_attr_col = HTMLElement_get_attr_col, .get_readystate = HTMLScriptElement_get_readystate, .bind_to_tree = HTMLScriptElement_bind_to_tree, - .traverse = HTMLScriptElement_traverse, - .unlink = HTMLScriptElement_unlink +}; + +static const event_target_vtbl_t HTMLScriptElement_event_target_vtbl = { + { + HTMLELEMENT_DISPEX_VTBL_ENTRIES, + .traverse = HTMLScriptElement_traverse, + .unlink = HTMLScriptElement_unlink + }, + HTMLELEMENT_EVENT_TARGET_VTBL_ENTRIES, };
HRESULT script_elem_from_nsscript(nsIDOMHTMLScriptElement *nsscript, HTMLScriptElement **ret) @@ -457,7 +471,7 @@ static const tid_t HTMLScriptElement_iface_tids[] = {
static dispex_static_data_t HTMLScriptElement_dispex = { "HTMLScriptElement", - &HTMLElement_event_target_vtbl.dispex_vtbl, + &HTMLScriptElement_event_target_vtbl.dispex_vtbl, DispHTMLScriptElement_tid, HTMLScriptElement_iface_tids, HTMLElement_init_dispex_info