The first few patches will introduce temporary leaks or cyclic refs, but that's because we'll handle them properly with the dispex CC, and the last patch should fix this. Other objects' traversal will follow in another MR.
EDIT: This now does more prep work and converts nodes to use the dispex CC, using temporary helpers, without any other object or temporary leaks yet.
-- v4: mshtml: Release the event target during node unlink. mshtml: Implement node cycle collection using the dispex. mshtml: Move ccref from the node to the dispex. mshtml: Rename EventTarget_QI to EventTarget_QI_no_cc. mshtml: Rename dispex_query_interface to dispex_query_interface_no_cc. mshtml: Use designated initializers in node vtables. mshtml: Use designated initializers in dispex and event target vtables. mshtml: Make all event target vtbls const. mshtml: Split IUnknown methods for outer windows into separate vtable. mshtml: Move console to the inner window. mshtml: Use ASCII strings for dispex object names.
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/dispex.c | 12 +++++------- dlls/mshtml/htmlanchor.c | 2 +- dlls/mshtml/htmlarea.c | 2 +- dlls/mshtml/htmlattr.c | 2 +- dlls/mshtml/htmlbody.c | 2 +- dlls/mshtml/htmlcomment.c | 2 +- dlls/mshtml/htmlcurstyle.c | 2 +- dlls/mshtml/htmldoc.c | 4 ++-- dlls/mshtml/htmlelem.c | 14 +++++++------- dlls/mshtml/htmlelemcol.c | 2 +- dlls/mshtml/htmlevent.c | 20 ++++++++++---------- dlls/mshtml/htmlform.c | 2 +- dlls/mshtml/htmlframe.c | 4 ++-- dlls/mshtml/htmlgeneric.c | 2 +- dlls/mshtml/htmlhead.c | 8 ++++---- dlls/mshtml/htmlimg.c | 4 ++-- dlls/mshtml/htmlinput.c | 6 +++--- dlls/mshtml/htmllink.c | 2 +- dlls/mshtml/htmllocation.c | 2 +- dlls/mshtml/htmlnode.c | 4 ++-- dlls/mshtml/htmlobject.c | 4 ++-- dlls/mshtml/htmlscript.c | 2 +- dlls/mshtml/htmlselect.c | 6 +++--- dlls/mshtml/htmlstorage.c | 2 +- dlls/mshtml/htmlstyle.c | 4 ++-- dlls/mshtml/htmlstyleelem.c | 2 +- dlls/mshtml/htmlstylesheet.c | 8 ++++---- dlls/mshtml/htmltable.c | 6 +++--- dlls/mshtml/htmltextarea.c | 2 +- dlls/mshtml/htmltextnode.c | 2 +- dlls/mshtml/htmlwindow.c | 2 +- dlls/mshtml/mshtml_private.h | 2 +- dlls/mshtml/mutation.c | 4 ++-- dlls/mshtml/omnavigator.c | 24 ++++++++++++------------ dlls/mshtml/range.c | 4 ++-- dlls/mshtml/selection.c | 2 +- dlls/mshtml/xmlhttprequest.c | 4 ++-- 37 files changed, 88 insertions(+), 90 deletions(-)
diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index 6bd2c9cf6cb..5f1fb98ddab 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -917,7 +917,7 @@ static const dispex_static_data_vtbl_t function_dispex_vtbl = { static const tid_t function_iface_tids[] = {0};
static dispex_static_data_t function_dispex = { - L"Function", + "Function", &function_dispex_vtbl, NULL_tid, function_iface_tids @@ -1549,8 +1549,7 @@ HRESULT dispex_to_string(DispatchEx *dispex, BSTR *ret) static const WCHAR suffix[] = L"]"; WCHAR buf[ARRAY_SIZE(prefix) + 28 + ARRAY_SIZE(suffix)], *p = buf; compat_mode_t compat_mode = dispex_compat_mode(dispex); - const WCHAR *name = dispex->info->desc->name; - unsigned len; + const char *name = dispex->info->desc->name;
if(!ret) return E_INVALIDARG; @@ -1560,10 +1559,9 @@ HRESULT dispex_to_string(DispatchEx *dispex, BSTR *ret) if(compat_mode < COMPAT_MODE_IE9) p--; else { - len = wcslen(name); - assert(len <= 28); - memcpy(p, name, len * sizeof(WCHAR)); - p += len; + while(*name) + *p++ = *name++; + assert(p + ARRAY_SIZE(suffix) - buf <= ARRAY_SIZE(buf)); } memcpy(p, suffix, sizeof(suffix));
diff --git a/dlls/mshtml/htmlanchor.c b/dlls/mshtml/htmlanchor.c index 988daa5d255..9705c7722f5 100644 --- a/dlls/mshtml/htmlanchor.c +++ b/dlls/mshtml/htmlanchor.c @@ -895,7 +895,7 @@ static const tid_t HTMLAnchorElement_iface_tids[] = { };
static dispex_static_data_t HTMLAnchorElement_dispex = { - L"HTMLAnchorElement", + "HTMLAnchorElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLAnchorElement_tid, HTMLAnchorElement_iface_tids, diff --git a/dlls/mshtml/htmlarea.c b/dlls/mshtml/htmlarea.c index 2e4c92f8d4c..3f16f019c3f 100644 --- a/dlls/mshtml/htmlarea.c +++ b/dlls/mshtml/htmlarea.c @@ -502,7 +502,7 @@ static const tid_t HTMLAreaElement_iface_tids[] = { 0 }; static dispex_static_data_t HTMLAreaElement_dispex = { - L"HTMLAreaElement", + "HTMLAreaElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLAreaElement_tid, HTMLAreaElement_iface_tids, diff --git a/dlls/mshtml/htmlattr.c b/dlls/mshtml/htmlattr.c index c99e39a47bd..112c03cb0b5 100644 --- a/dlls/mshtml/htmlattr.c +++ b/dlls/mshtml/htmlattr.c @@ -506,7 +506,7 @@ static const tid_t HTMLDOMAttribute_iface_tids[] = { 0 }; static dispex_static_data_t HTMLDOMAttribute_dispex = { - L"Attr", + "Attr", &HTMLDOMAttribute_dispex_vtbl, DispHTMLDOMAttribute_tid, HTMLDOMAttribute_iface_tids diff --git a/dlls/mshtml/htmlbody.c b/dlls/mshtml/htmlbody.c index 867aec39fc2..72a6366872b 100644 --- a/dlls/mshtml/htmlbody.c +++ b/dlls/mshtml/htmlbody.c @@ -1004,7 +1004,7 @@ static const tid_t HTMLBodyElement_iface_tids[] = { };
static dispex_static_data_t HTMLBodyElement_dispex = { - L"HTMLBodyElement", + "HTMLBodyElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLBody_tid, HTMLBodyElement_iface_tids, diff --git a/dlls/mshtml/htmlcomment.c b/dlls/mshtml/htmlcomment.c index 705d84f4367..6af08f25af8 100644 --- a/dlls/mshtml/htmlcomment.c +++ b/dlls/mshtml/htmlcomment.c @@ -200,7 +200,7 @@ static const tid_t HTMLCommentElement_iface_tids[] = { 0 }; static dispex_static_data_t HTMLCommentElement_dispex = { - L"Comment", + "Comment", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLCommentElement_tid, HTMLCommentElement_iface_tids, diff --git a/dlls/mshtml/htmlcurstyle.c b/dlls/mshtml/htmlcurstyle.c index c7a9a3c086d..8b16e97f357 100644 --- a/dlls/mshtml/htmlcurstyle.c +++ b/dlls/mshtml/htmlcurstyle.c @@ -1300,7 +1300,7 @@ static const tid_t HTMLCurrentStyle_iface_tids[] = { 0 }; static dispex_static_data_t HTMLCurrentStyle_dispex = { - L"MSCurrentStyleCSSProperties", + "MSCurrentStyleCSSProperties", &CSSStyle_dispex_vtbl, DispHTMLCurrentStyle_tid, HTMLCurrentStyle_iface_tids, diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index 23b0064c9a6..d4761db77aa 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -386,7 +386,7 @@ static const tid_t DocumentType_iface_tids[] = { };
static dispex_static_data_t DocumentType_dispex = { - L"DocumentType", + "DocumentType", &DocumentType_event_target_vtbl.dispex_vtbl, DispDOMDocumentType_tid, DocumentType_iface_tids @@ -6180,7 +6180,7 @@ static void HTMLDocumentNode_init_dispex_info(dispex_data_t *info, compat_mode_t }
static dispex_static_data_t HTMLDocumentNode_dispex = { - L"HTMLDocument", + "HTMLDocument", &HTMLDocumentNode_event_target_vtbl.dispex_vtbl, DispHTMLDocument_tid, HTMLDocumentNode_iface_tids, diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 91316a8f237..838f4a2ae66 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -870,7 +870,7 @@ static const tid_t HTMLRect_iface_tids[] = { 0 }; static dispex_static_data_t HTMLRect_dispex = { - L"ClientRect", + "ClientRect", &HTMLRect_dispex_vtbl, IHTMLRect_tid, HTMLRect_iface_tids, @@ -1308,7 +1308,7 @@ static const tid_t HTMLRectCollection_iface_tids[] = { 0 }; static dispex_static_data_t HTMLRectCollection_dispex = { - L"ClientRectList", + "ClientRectList", &HTMLRectCollection_dispex_vtbl, IHTMLRectCollection_tid, HTMLRectCollection_iface_tids @@ -7847,7 +7847,7 @@ static const tid_t token_list_iface_tids[] = { 0 }; static dispex_static_data_t token_list_dispex = { - L"DOMTokenList", + "DOMTokenList", &token_list_dispex_vtbl, IWineDOMTokenList_tid, token_list_iface_tids @@ -7958,7 +7958,7 @@ static const IWineHTMLElementPrivateVtbl WineHTMLElementPrivateVtbl = { };
static dispex_static_data_t HTMLElement_dispex = { - L"HTMLElement", + "HTMLElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLUnknownElement_tid, HTMLElement_iface_tids, @@ -7966,7 +7966,7 @@ static dispex_static_data_t HTMLElement_dispex = { };
static dispex_static_data_t HTMLUnknownElement_dispex = { - L"HTMLUnknownElement", + "HTMLUnknownElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLUnknownElement_tid, HTMLElement_iface_tids, @@ -8275,7 +8275,7 @@ static const tid_t HTMLFiltersCollection_iface_tids[] = { 0 }; static dispex_static_data_t HTMLFiltersCollection_dispex = { - L"FiltersCollection", + "FiltersCollection", &HTMLFiltersCollection_dispex_vtbl, IHTMLFiltersCollection_tid, HTMLFiltersCollection_iface_tids @@ -9045,7 +9045,7 @@ static const tid_t HTMLAttributeCollection_iface_tids[] = { };
static dispex_static_data_t HTMLAttributeCollection_dispex = { - L"NamedNodeMap", + "NamedNodeMap", &HTMLAttributeCollection_dispex_vtbl, DispHTMLAttributeCollection_tid, HTMLAttributeCollection_iface_tids diff --git a/dlls/mshtml/htmlelemcol.c b/dlls/mshtml/htmlelemcol.c index 178ccde9b4d..79dd59fca91 100644 --- a/dlls/mshtml/htmlelemcol.c +++ b/dlls/mshtml/htmlelemcol.c @@ -648,7 +648,7 @@ static const tid_t HTMLElementCollection_iface_tids[] = { };
static dispex_static_data_t HTMLElementCollection_dispex = { - L"HTMLCollection", + "HTMLCollection", &HTMLElementColection_dispex_vtbl, DispHTMLElementCollection_tid, HTMLElementCollection_iface_tids diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index 6b5ea716a75..41c8b36e941 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -900,7 +900,7 @@ static const tid_t HTMLEventObj_iface_tids[] = { };
static dispex_static_data_t HTMLEventObj_dispex = { - L"MSEventObj", + "MSEventObj", &HTMLEventObj_dispex_vtbl, DispCEventObj_tid, HTMLEventObj_iface_tids @@ -2975,7 +2975,7 @@ static const tid_t DOMEvent_iface_tids[] = { };
static dispex_static_data_t DOMEvent_dispex = { - L"Event", + "Event", &DOMEvent_dispex_vtbl, DispDOMEvent_tid, DOMEvent_iface_tids @@ -2993,7 +2993,7 @@ static const tid_t DOMUIEvent_iface_tids[] = { };
static dispex_static_data_t DOMUIEvent_dispex = { - L"UIEvent", + "UIEvent", &DOMUIEvent_dispex_vtbl, DispDOMUIEvent_tid, DOMUIEvent_iface_tids @@ -3012,7 +3012,7 @@ static const tid_t DOMMouseEvent_iface_tids[] = { };
static dispex_static_data_t DOMMouseEvent_dispex = { - L"MouseEvent", + "MouseEvent", &DOMMouseEvent_dispex_vtbl, DispDOMMouseEvent_tid, DOMMouseEvent_iface_tids @@ -3031,7 +3031,7 @@ static const tid_t DOMKeyboardEvent_iface_tids[] = { };
static dispex_static_data_t DOMKeyboardEvent_dispex = { - L"KeyboardEvent", + "KeyboardEvent", &DOMKeyboardEvent_dispex_vtbl, DispDOMKeyboardEvent_tid, DOMKeyboardEvent_iface_tids @@ -3044,7 +3044,7 @@ static void DOMPageTransitionEvent_init_dispex_info(dispex_data_t *info, compat_ }
static dispex_static_data_t DOMPageTransitionEvent_dispex = { - L"PageTransitionEvent", + "PageTransitionEvent", &DOMEvent_dispex_vtbl, DispDOMEvent_tid, DOMEvent_iface_tids, @@ -3063,7 +3063,7 @@ static const tid_t DOMCustomEvent_iface_tids[] = { };
static dispex_static_data_t DOMCustomEvent_dispex = { - L"CustomEvent", + "CustomEvent", &DOMCustomEvent_dispex_vtbl, DispDOMCustomEvent_tid, DOMCustomEvent_iface_tids @@ -3080,7 +3080,7 @@ static const tid_t DOMMessageEvent_iface_tids[] = { };
static dispex_static_data_t DOMMessageEvent_dispex = { - L"MessageEvent", + "MessageEvent", &DOMMessageEvent_dispex_vtbl, DispDOMMessageEvent_tid, DOMMessageEvent_iface_tids, @@ -3099,7 +3099,7 @@ static const tid_t DOMProgressEvent_iface_tids[] = { };
static dispex_static_data_t DOMProgressEvent_dispex = { - L"ProgressEvent", + "ProgressEvent", &DOMProgressEvent_dispex_vtbl, DispDOMProgressEvent_tid, DOMProgressEvent_iface_tids @@ -3117,7 +3117,7 @@ static const tid_t DOMStorageEvent_iface_tids[] = { };
static dispex_static_data_t DOMStorageEvent_dispex = { - L"StorageEvent", + "StorageEvent", &DOMStorageEvent_dispex_vtbl, DispDOMStorageEvent_tid, DOMStorageEvent_iface_tids diff --git a/dlls/mshtml/htmlform.c b/dlls/mshtml/htmlform.c index 78b06391a8f..7ecbbeca31b 100644 --- a/dlls/mshtml/htmlform.c +++ b/dlls/mshtml/htmlform.c @@ -1000,7 +1000,7 @@ static const tid_t HTMLFormElement_iface_tids[] = { };
static dispex_static_data_t HTMLFormElement_dispex = { - L"HTMLFormElement", + "HTMLFormElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLFormElement_tid, HTMLFormElement_iface_tids, diff --git a/dlls/mshtml/htmlframe.c b/dlls/mshtml/htmlframe.c index 126edc56181..c90ebe430dd 100644 --- a/dlls/mshtml/htmlframe.c +++ b/dlls/mshtml/htmlframe.c @@ -1036,7 +1036,7 @@ static const tid_t HTMLFrameElement_iface_tids[] = { };
static dispex_static_data_t HTMLFrameElement_dispex = { - L"HTMLFrameElement", + "HTMLFrameElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLFrameElement_tid, HTMLFrameElement_iface_tids, @@ -1625,7 +1625,7 @@ static const tid_t HTMLIFrame_iface_tids[] = { };
static dispex_static_data_t HTMLIFrame_dispex = { - L"HTMLIFrameElement", + "HTMLIFrameElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLIFrame_tid, HTMLIFrame_iface_tids, diff --git a/dlls/mshtml/htmlgeneric.c b/dlls/mshtml/htmlgeneric.c index 4666348fddb..450d49ff16c 100644 --- a/dlls/mshtml/htmlgeneric.c +++ b/dlls/mshtml/htmlgeneric.c @@ -169,7 +169,7 @@ static const tid_t HTMLGenericElement_iface_tids[] = { };
static dispex_static_data_t HTMLGenericElement_dispex = { - L"HTMLUnknownElement", + "HTMLUnknownElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLGenericElement_tid, HTMLGenericElement_iface_tids, diff --git a/dlls/mshtml/htmlhead.c b/dlls/mshtml/htmlhead.c index 1ef183338c7..92d90a6d5aa 100644 --- a/dlls/mshtml/htmlhead.c +++ b/dlls/mshtml/htmlhead.c @@ -184,7 +184,7 @@ static const tid_t HTMLTitleElement_iface_tids[] = { 0 }; static dispex_static_data_t HTMLTitleElement_dispex = { - L"HTMLTitleElement", + "HTMLTitleElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLTitleElement_tid, HTMLTitleElement_iface_tids, @@ -369,7 +369,7 @@ static const tid_t HTMLHtmlElement_iface_tids[] = { 0 }; static dispex_static_data_t HTMLHtmlElement_dispex = { - L"HTMLHtmlElement", + "HTMLHtmlElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLHtmlElement_tid, HTMLHtmlElement_iface_tids, @@ -606,7 +606,7 @@ static const tid_t HTMLMetaElement_iface_tids[] = { };
static dispex_static_data_t HTMLMetaElement_dispex = { - L"HTMLMetaElement", + "HTMLMetaElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLMetaElement_tid, HTMLMetaElement_iface_tids, @@ -770,7 +770,7 @@ static const tid_t HTMLHeadElement_iface_tids[] = { 0 }; static dispex_static_data_t HTMLHeadElement_dispex = { - L"HTMLHeadElement", + "HTMLHeadElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLHeadElement_tid, HTMLHeadElement_iface_tids, diff --git a/dlls/mshtml/htmlimg.c b/dlls/mshtml/htmlimg.c index cc091429500..aad4d1f6dfa 100644 --- a/dlls/mshtml/htmlimg.c +++ b/dlls/mshtml/htmlimg.c @@ -735,7 +735,7 @@ static void HTMLImgElement_init_dispex_info(dispex_data_t *info, compat_mode_t m }
static dispex_static_data_t HTMLImgElement_dispex = { - L"HTMLImageElement", + "HTMLImageElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLImg_tid, HTMLImgElement_iface_tids, @@ -988,7 +988,7 @@ static const dispex_static_data_vtbl_t HTMLImageElementFactory_dispex_vtbl = { };
static dispex_static_data_t HTMLImageElementFactory_dispex = { - L"Function", + "Function", &HTMLImageElementFactory_dispex_vtbl, IHTMLImageElementFactory_tid, HTMLImageElementFactory_iface_tids diff --git a/dlls/mshtml/htmlinput.c b/dlls/mshtml/htmlinput.c index 415b1aa7c59..68bdc62e0c7 100644 --- a/dlls/mshtml/htmlinput.c +++ b/dlls/mshtml/htmlinput.c @@ -1449,7 +1449,7 @@ static const tid_t HTMLInputElement_iface_tids[] = { 0 }; static dispex_static_data_t HTMLInputElement_dispex = { - L"HTMLInputElement", + "HTMLInputElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLInputElement_tid, HTMLInputElement_iface_tids, @@ -1646,7 +1646,7 @@ static const tid_t HTMLLabelElement_iface_tids[] = { };
static dispex_static_data_t HTMLLabelElement_dispex = { - L"HTMLLabelElement", + "HTMLLabelElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLLabelElement_tid, HTMLLabelElement_iface_tids, @@ -1988,7 +1988,7 @@ static const tid_t HTMLButtonElement_iface_tids[] = { };
static dispex_static_data_t HTMLButtonElement_dispex = { - L"HTMLButtonElement", + "HTMLButtonElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLButtonElement_tid, HTMLButtonElement_iface_tids, diff --git a/dlls/mshtml/htmllink.c b/dlls/mshtml/htmllink.c index 82dc9b6dbe1..6d15d9ee7ba 100644 --- a/dlls/mshtml/htmllink.c +++ b/dlls/mshtml/htmllink.c @@ -441,7 +441,7 @@ static const tid_t HTMLLinkElement_iface_tids[] = { 0 }; static dispex_static_data_t HTMLLinkElement_dispex = { - L"HTMLLinkElement", + "HTMLLinkElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLLinkElement_tid, HTMLLinkElement_iface_tids, diff --git a/dlls/mshtml/htmllocation.c b/dlls/mshtml/htmllocation.c index d9e458d9c5f..1e340487f0b 100644 --- a/dlls/mshtml/htmllocation.c +++ b/dlls/mshtml/htmllocation.c @@ -612,7 +612,7 @@ static const tid_t HTMLLocation_iface_tids[] = { 0 }; static dispex_static_data_t HTMLLocation_dispex = { - L"Location", + "Location", NULL, DispHTMLLocation_tid, HTMLLocation_iface_tids diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index d412b570aec..337dc282fe6 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -458,7 +458,7 @@ static const tid_t HTMLDOMChildrenCollection_iface_tids[] = { };
static dispex_static_data_t HTMLDOMChildrenCollection_dispex = { - L"NodeList", + "NodeList", &HTMLDOMChildrenCollection_dispex_vtbl, DispDOMChildrenCollection_tid, HTMLDOMChildrenCollection_iface_tids, @@ -1512,7 +1512,7 @@ static const tid_t HTMLDOMNode_iface_tids[] = { 0 }; static dispex_static_data_t HTMLDOMNode_dispex = { - L"Node", + "Node", NULL, IHTMLDOMNode_tid, HTMLDOMNode_iface_tids, diff --git a/dlls/mshtml/htmlobject.c b/dlls/mshtml/htmlobject.c index f70da7bb8df..23858d39fbd 100644 --- a/dlls/mshtml/htmlobject.c +++ b/dlls/mshtml/htmlobject.c @@ -771,7 +771,7 @@ static const tid_t HTMLObjectElement_iface_tids[] = { 0 }; static dispex_static_data_t HTMLObjectElement_dispex = { - L"HTMLObjectElement", + "HTMLObjectElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLObjectElement_tid, HTMLObjectElement_iface_tids, @@ -1034,7 +1034,7 @@ static const tid_t HTMLEmbedElement_iface_tids[] = { 0 }; static dispex_static_data_t HTMLEmbedElement_dispex = { - L"HTMLEmbedElement", + "HTMLEmbedElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLEmbed_tid, HTMLEmbedElement_iface_tids, diff --git a/dlls/mshtml/htmlscript.c b/dlls/mshtml/htmlscript.c index b440224309f..6ce48362d96 100644 --- a/dlls/mshtml/htmlscript.c +++ b/dlls/mshtml/htmlscript.c @@ -474,7 +474,7 @@ static const tid_t HTMLScriptElement_iface_tids[] = { };
static dispex_static_data_t HTMLScriptElement_dispex = { - L"HTMLScriptElement", + "HTMLScriptElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLScriptElement_tid, HTMLScriptElement_iface_tids, diff --git a/dlls/mshtml/htmlselect.c b/dlls/mshtml/htmlselect.c index b48805de64d..0a5905e6f1f 100644 --- a/dlls/mshtml/htmlselect.c +++ b/dlls/mshtml/htmlselect.c @@ -412,7 +412,7 @@ static const tid_t HTMLOptionElement_iface_tids[] = { 0 }; static dispex_static_data_t HTMLOptionElement_dispex = { - L"HTMLOptionElement", + "HTMLOptionElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLOptionElement_tid, HTMLOptionElement_iface_tids, @@ -642,7 +642,7 @@ static const dispex_static_data_vtbl_t HTMLOptionElementFactory_dispex_vtbl = { };
static dispex_static_data_t HTMLOptionElementFactory_dispex = { - L"Function", + "Function", &HTMLOptionElementFactory_dispex_vtbl, IHTMLOptionElementFactory_tid, HTMLOptionElementFactory_iface_tids, @@ -1489,7 +1489,7 @@ static const tid_t HTMLSelectElement_tids[] = { };
static dispex_static_data_t HTMLSelectElement_dispex = { - L"HTMLSelectElement", + "HTMLSelectElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLSelectElement_tid, HTMLSelectElement_tids, diff --git a/dlls/mshtml/htmlstorage.c b/dlls/mshtml/htmlstorage.c index 2cf32580b2a..4ed909f79fb 100644 --- a/dlls/mshtml/htmlstorage.c +++ b/dlls/mshtml/htmlstorage.c @@ -1330,7 +1330,7 @@ static const tid_t HTMLStorage_iface_tids[] = { 0 }; static dispex_static_data_t HTMLStorage_dispex = { - L"Storage", + "Storage", &HTMLStorage_dispex_vtbl, IHTMLStorage_tid, HTMLStorage_iface_tids diff --git a/dlls/mshtml/htmlstyle.c b/dlls/mshtml/htmlstyle.c index b696a155fc2..16a1140f97d 100644 --- a/dlls/mshtml/htmlstyle.c +++ b/dlls/mshtml/htmlstyle.c @@ -10023,7 +10023,7 @@ static const tid_t HTMLStyle_iface_tids[] = { 0 }; static dispex_static_data_t HTMLStyle_dispex = { - L"MSStyleCSSProperties", + "MSStyleCSSProperties", &CSSStyle_dispex_vtbl, DispHTMLStyle_tid, HTMLStyle_iface_tids, @@ -10119,7 +10119,7 @@ static const tid_t HTMLW3CComputedStyle_iface_tids[] = { 0 }; static dispex_static_data_t HTMLW3CComputedStyle_dispex = { - L"CSSStyleDeclaration", + "CSSStyleDeclaration", &CSSStyle_dispex_vtbl, DispHTMLW3CComputedStyle_tid, HTMLW3CComputedStyle_iface_tids, diff --git a/dlls/mshtml/htmlstyleelem.c b/dlls/mshtml/htmlstyleelem.c index 4409f982343..ce13fc815ba 100644 --- a/dlls/mshtml/htmlstyleelem.c +++ b/dlls/mshtml/htmlstyleelem.c @@ -454,7 +454,7 @@ static const tid_t HTMLStyleElement_iface_tids[] = { 0 }; static dispex_static_data_t HTMLStyleElement_dispex = { - L"HTMLStyleElement", + "HTMLStyleElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLStyleElement_tid, HTMLStyleElement_iface_tids, diff --git a/dlls/mshtml/htmlstylesheet.c b/dlls/mshtml/htmlstylesheet.c index 010f3ef3f8c..8ce0f85b76e 100644 --- a/dlls/mshtml/htmlstylesheet.c +++ b/dlls/mshtml/htmlstylesheet.c @@ -229,7 +229,7 @@ static const tid_t HTMLStyleSheetRule_iface_tids[] = { 0 }; static dispex_static_data_t HTMLStyleSheetRule_dispex = { - L"CSSStyleRule", + "CSSStyleRule", &HTMLStyleSheetRule_dispex_vtbl, DispHTMLStyleSheetRule_tid, HTMLStyleSheetRule_iface_tids @@ -504,7 +504,7 @@ static const tid_t HTMLStyleSheetRulesCollection_iface_tids[] = { 0 }; static dispex_static_data_t HTMLStyleSheetRulesCollection_dispex = { - L"MSCSSRuleList", + "MSCSSRuleList", &HTMLStyleSheetRulesCollection_dispex_vtbl, DispHTMLStyleSheetRulesCollection_tid, HTMLStyleSheetRulesCollection_iface_tids @@ -941,7 +941,7 @@ static const tid_t HTMLStyleSheetsCollection_iface_tids[] = { 0 }; static dispex_static_data_t HTMLStyleSheetsCollection_dispex = { - L"StyleSheetList", + "StyleSheetList", &HTMLStyleSheetsCollection_dispex_vtbl, DispHTMLStyleSheetsCollection_tid, HTMLStyleSheetsCollection_iface_tids @@ -1529,7 +1529,7 @@ static const tid_t HTMLStyleSheet_iface_tids[] = { 0 }; static dispex_static_data_t HTMLStyleSheet_dispex = { - L"CSSStyleSheet", + "CSSStyleSheet", &HTMLStyleSheet_dispex_vtbl, DispHTMLStyleSheet_tid, HTMLStyleSheet_iface_tids, diff --git a/dlls/mshtml/htmltable.c b/dlls/mshtml/htmltable.c index cde97e5144c..a4b2b1f3621 100644 --- a/dlls/mshtml/htmltable.c +++ b/dlls/mshtml/htmltable.c @@ -516,7 +516,7 @@ static const tid_t HTMLTableCell_iface_tids[] = { };
static dispex_static_data_t HTMLTableCell_dispex = { - L"HTMLTableDataCellElement", + "HTMLTableDataCellElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLTableCell_tid, HTMLTableCell_iface_tids, @@ -956,7 +956,7 @@ static const tid_t HTMLTableRow_iface_tids[] = { };
static dispex_static_data_t HTMLTableRow_dispex = { - L"HTMLTableRowElement", + "HTMLTableRowElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLTableRow_tid, HTMLTableRow_iface_tids, @@ -1984,7 +1984,7 @@ static const tid_t HTMLTable_iface_tids[] = { };
static dispex_static_data_t HTMLTable_dispex = { - L"HTMLTableElement", + "HTMLTableElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLTable_tid, HTMLTable_iface_tids, diff --git a/dlls/mshtml/htmltextarea.c b/dlls/mshtml/htmltextarea.c index 6b40b630112..47be8be4281 100644 --- a/dlls/mshtml/htmltextarea.c +++ b/dlls/mshtml/htmltextarea.c @@ -475,7 +475,7 @@ static const tid_t HTMLTextAreaElement_iface_tids[] = { };
static dispex_static_data_t HTMLTextAreaElement_dispex = { - L"HTMLTextAreaElement", + "HTMLTextAreaElement", &HTMLElement_event_target_vtbl.dispex_vtbl, DispHTMLTextAreaElement_tid, HTMLTextAreaElement_iface_tids, diff --git a/dlls/mshtml/htmltextnode.c b/dlls/mshtml/htmltextnode.c index a09c0758452..af3f57044b8 100644 --- a/dlls/mshtml/htmltextnode.c +++ b/dlls/mshtml/htmltextnode.c @@ -366,7 +366,7 @@ static const tid_t HTMLDOMTextNode_iface_tids[] = { 0 }; static dispex_static_data_t HTMLDOMTextNode_dispex = { - L"Text", + "Text", NULL, DispHTMLDOMTextNode_tid, HTMLDOMTextNode_iface_tids, diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index a90a0da2dde..e668f8a5d2b 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -4065,7 +4065,7 @@ static const tid_t HTMLWindow_iface_tids[] = { };
static dispex_static_data_t HTMLWindow_dispex = { - L"Window", + "Window", &HTMLWindow_event_target_vtbl.dispex_vtbl, DispHTMLWindow2_tid, HTMLWindow_iface_tids, diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 6d57a314870..32ea4c9c9ea 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -371,7 +371,7 @@ typedef struct { } dispex_static_data_vtbl_t;
typedef struct { - const WCHAR *name; + const char *name; const dispex_static_data_vtbl_t *vtbl; const tid_t disp_tid; const tid_t* const iface_tids; diff --git a/dlls/mshtml/mutation.c b/dlls/mshtml/mutation.c index 13d0b757158..7890faa1b16 100644 --- a/dlls/mshtml/mutation.c +++ b/dlls/mshtml/mutation.c @@ -1237,7 +1237,7 @@ static const tid_t mutation_observer_iface_tids[] = { 0 }; static dispex_static_data_t mutation_observer_dispex = { - L"MutationObserver", + "MutationObserver", &mutation_observer_dispex_vtbl, IWineMSHTMLMutationObserver_tid, mutation_observer_iface_tids @@ -1398,7 +1398,7 @@ static const tid_t mutation_observer_ctor_iface_tids[] = { };
static dispex_static_data_t mutation_observer_ctor_dispex = { - L"Function", + "Function", &mutation_observer_ctor_dispex_vtbl, NULL_tid, mutation_observer_ctor_iface_tids diff --git a/dlls/mshtml/omnavigator.c b/dlls/mshtml/omnavigator.c index 2e098bf2d09..b40438361cc 100644 --- a/dlls/mshtml/omnavigator.c +++ b/dlls/mshtml/omnavigator.c @@ -323,7 +323,7 @@ static const tid_t HTMLDOMImplementation_iface_tids[] = { 0 }; static dispex_static_data_t HTMLDOMImplementation_dispex = { - L"DOMImplementation", + "DOMImplementation", &HTMLDOMImplementation_dispex_vtbl, DispHTMLDOMImplementation_tid, HTMLDOMImplementation_iface_tids, @@ -589,7 +589,7 @@ static const tid_t HTMLScreen_iface_tids[] = { 0 }; static dispex_static_data_t HTMLScreen_dispex = { - L"Screen", + "Screen", &HTMLScreen_dispex_vtbl, DispHTMLScreen_tid, HTMLScreen_iface_tids @@ -766,7 +766,7 @@ static const tid_t OmHistory_iface_tids[] = { 0 }; static dispex_static_data_t OmHistory_dispex = { - L"History", + "History", &OmHistory_dispex_vtbl, DispHTMLHistory_tid, OmHistory_iface_tids @@ -944,7 +944,7 @@ static const tid_t HTMLPluginsCollection_iface_tids[] = { 0 }; static dispex_static_data_t HTMLPluginsCollection_dispex = { - L"PluginArray", + "PluginArray", &HTMLPluginsCollection_dispex_vtbl, DispCPlugins_tid, HTMLPluginsCollection_iface_tids @@ -1110,7 +1110,7 @@ static const tid_t HTMLMimeTypesCollection_iface_tids[] = { 0 }; static dispex_static_data_t HTMLMimeTypesCollection_dispex = { - L"MimeTypeArray", + "MimeTypeArray", &HTMLMimeTypesCollection_dispex_vtbl, IHTMLMimeTypesCollection_tid, HTMLMimeTypesCollection_iface_tids @@ -1561,7 +1561,7 @@ static const tid_t OmNavigator_iface_tids[] = { 0 }; static dispex_static_data_t OmNavigator_dispex = { - L"Navigator", + "Navigator", &OmNavigator_dispex_vtbl, DispHTMLNavigator_tid, OmNavigator_iface_tids @@ -1961,7 +1961,7 @@ static const tid_t HTMLPerformanceTiming_iface_tids[] = { 0 }; static dispex_static_data_t HTMLPerformanceTiming_dispex = { - L"PerformanceTiming", + "PerformanceTiming", NULL, IHTMLPerformanceTiming_tid, HTMLPerformanceTiming_iface_tids @@ -2157,7 +2157,7 @@ static const tid_t HTMLPerformanceNavigation_iface_tids[] = { 0 }; static dispex_static_data_t HTMLPerformanceNavigation_dispex = { - L"PerformanceNavigation", + "PerformanceNavigation", &HTMLPerformanceNavigation_dispex_vtbl, IHTMLPerformanceNavigation_tid, HTMLPerformanceNavigation_iface_tids @@ -2359,7 +2359,7 @@ static const tid_t HTMLPerformance_iface_tids[] = { 0 }; static dispex_static_data_t HTMLPerformance_dispex = { - L"Performance", + "Performance", &HTMLPerformance_dispex_vtbl, IHTMLPerformance_tid, HTMLPerformance_iface_tids @@ -2538,7 +2538,7 @@ static const tid_t HTMLNamespaceCollection_iface_tids[] = { 0 }; static dispex_static_data_t HTMLNamespaceCollection_dispex = { - L"MSNamespaceInfoCollection", + "MSNamespaceInfoCollection", &HTMLNamespaceCollection_dispex_vtbl, DispHTMLNamespaceCollection_tid, HTMLNamespaceCollection_iface_tids @@ -2807,7 +2807,7 @@ static const tid_t console_iface_tids[] = { 0 }; static dispex_static_data_t console_dispex = { - L"Console", + "Console", &console_dispex_vtbl, IWineMSHTMLConsole_tid, console_iface_tids @@ -3151,7 +3151,7 @@ static const tid_t media_query_list_iface_tids[] = { 0 }; static dispex_static_data_t media_query_list_dispex = { - L"MediaQueryList", + "MediaQueryList", &media_query_list_dispex_vtbl, IWineMSHTMLMediaQueryList_tid, media_query_list_iface_tids diff --git a/dlls/mshtml/range.c b/dlls/mshtml/range.c index 562dbf35b49..e7234994933 100644 --- a/dlls/mshtml/range.c +++ b/dlls/mshtml/range.c @@ -1743,7 +1743,7 @@ static const tid_t HTMLTxtRange_iface_tids[] = { 0 }; static dispex_static_data_t HTMLTxtRange_dispex = { - L"TextRange", + "TextRange", &HTMLTxtRange_dispex_vtbl, IHTMLTxtRange_tid, HTMLTxtRange_iface_tids @@ -2107,7 +2107,7 @@ static const tid_t HTMLDOMRange_iface_tids[] = { };
static dispex_static_data_t HTMLDOMRange_dispex = { - L"Range", + "Range", &HTMLDOMRange_dispex_vtbl, DispHTMLDOMRange_tid, HTMLDOMRange_iface_tids diff --git a/dlls/mshtml/selection.c b/dlls/mshtml/selection.c index cc9c0acece6..3067b1a43b1 100644 --- a/dlls/mshtml/selection.c +++ b/dlls/mshtml/selection.c @@ -355,7 +355,7 @@ static const tid_t HTMLSelectionObject_iface_tids[] = { 0 }; static dispex_static_data_t HTMLSelectionObject_dispex = { - L"MSSelection", + "MSSelection", &HTMLSelectionObject_dispex_vtbl, IHTMLSelectionObject_tid, /* FIXME: We have a test for that, but it doesn't expose IHTMLSelectionObject2 iface. */ HTMLSelectionObject_iface_tids diff --git a/dlls/mshtml/xmlhttprequest.c b/dlls/mshtml/xmlhttprequest.c index 75f52fb6c8e..417923cf444 100644 --- a/dlls/mshtml/xmlhttprequest.c +++ b/dlls/mshtml/xmlhttprequest.c @@ -1606,7 +1606,7 @@ static const tid_t HTMLXMLHttpRequest_iface_tids[] = { 0 }; static dispex_static_data_t HTMLXMLHttpRequest_dispex = { - L"XMLHttpRequest", + "XMLHttpRequest", &HTMLXMLHttpRequest_event_target_vtbl.dispex_vtbl, DispHTMLXMLHttpRequest_tid, HTMLXMLHttpRequest_iface_tids, @@ -1825,7 +1825,7 @@ static const tid_t HTMLXMLHttpRequestFactory_iface_tids[] = { 0 }; static dispex_static_data_t HTMLXMLHttpRequestFactory_dispex = { - L"Function", + "Function", &HTMLXMLHttpRequestFactory_dispex_vtbl, IHTMLXMLHttpRequestFactory_tid, HTMLXMLHttpRequestFactory_iface_tids
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlwindow.c | 16 +++++++--------- dlls/mshtml/mshtml_private.h | 3 +-- 2 files changed, 8 insertions(+), 11 deletions(-)
diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index e668f8a5d2b..26964b3216f 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -257,9 +257,6 @@ static ULONG WINAPI HTMLWindow2_Release(IHTMLWindow2 *iface) TRACE("(%p) ref=%ld\n", This, ref);
if(!ref) { - if (This->console) - IWineMSHTMLConsole_Release(This->console); - if(is_outer_window(This)) release_outer_window(This->outer_window); else @@ -3255,15 +3252,16 @@ static HRESULT WINAPI window_private_postMessage(IWineHTMLWindowPrivate *iface, static HRESULT WINAPI window_private_get_console(IWineHTMLWindowPrivate *iface, IDispatch **console) { HTMLWindow *This = impl_from_IWineHTMLWindowPrivateVtbl(iface); + HTMLInnerWindow *window = This->inner_window;
TRACE("iface %p, console %p.\n", iface, console);
- if (!This->console) - create_console(dispex_compat_mode(&This->inner_window->event_target.dispex), &This->console); + if (!window->console) + create_console(dispex_compat_mode(&window->event_target.dispex), &window->console);
- *console = (IDispatch *)This->console; - if (This->console) - IWineMSHTMLConsole_AddRef(This->console); + *console = (IDispatch *)window->console; + if (window->console) + IWineMSHTMLConsole_AddRef(window->console); return S_OK; }
@@ -3725,7 +3723,7 @@ static void HTMLWindow_unlink(DispatchEx *dispex)
TRACE("%p\n", This);
- unlink_ref(&This->base.console); + unlink_ref(&This->console); detach_inner_window(This);
if(This->doc) { diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 32ea4c9c9ea..2a608efcfc6 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -569,8 +569,6 @@ struct HTMLWindow { IWineHTMLWindowPrivate IWineHTMLWindowPrivate_iface; IWineHTMLWindowCompatPrivate IWineHTMLWindowCompatPrivate_iface;
- IWineMSHTMLConsole *console; - LONG ref;
HTMLInnerWindow *inner_window; @@ -625,6 +623,7 @@ struct HTMLInnerWindow { IOmNavigator *navigator; IHTMLStorage *session_storage; IHTMLStorage *local_storage; + IWineMSHTMLConsole *console;
BOOL performance_initialized; VARIANT performance;
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlwindow.c | 174 +++++++++++++++++++++++++++++++++------ 1 file changed, 150 insertions(+), 24 deletions(-)
diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index 26964b3216f..ef71246d723 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -62,11 +62,6 @@ HTMLOuterWindow *mozwindow_to_window(const mozIDOMWindowProxy *mozwindow) return entry ? WINE_RB_ENTRY_VALUE(entry, HTMLOuterWindow, entry) : NULL; }
-static inline BOOL is_outer_window(HTMLWindow *window) -{ - return &window->outer_window->base == window; -} - static void get_location(HTMLOuterWindow *This, HTMLLocation **ret) { if(!This->location.dispex.outer) @@ -146,12 +141,18 @@ static inline HTMLWindow *impl_from_IHTMLWindow2(IHTMLWindow2 *iface) return CONTAINING_RECORD(iface, HTMLWindow, IHTMLWindow2_iface); }
-static HRESULT WINAPI HTMLWindow2_QueryInterface(IHTMLWindow2 *iface, REFIID riid, void **ppv) +static inline HTMLInnerWindow *HTMLInnerWindow_from_IHTMLWindow2(IHTMLWindow2 *iface) { - HTMLWindow *This = impl_from_IHTMLWindow2(iface); + return CONTAINING_RECORD(iface, HTMLInnerWindow, base.IHTMLWindow2_iface); +}
- TRACE("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv); +static inline HTMLOuterWindow *HTMLOuterWindow_from_IHTMLWindow2(IHTMLWindow2 *iface) +{ + return CONTAINING_RECORD(iface, HTMLOuterWindow, base.IHTMLWindow2_iface); +}
+static HRESULT base_query_interface(HTMLWindow *This, REFIID riid, void **ppv) +{ if(IsEqualGUID(&IID_IUnknown, riid)) { *ppv = &This->IHTMLWindow2_iface; }else if(IsEqualGUID(&IID_IDispatch, riid)) { @@ -194,21 +195,69 @@ static HRESULT WINAPI HTMLWindow2_QueryInterface(IHTMLWindow2 *iface, REFIID rii *ppv = NULL; FIXME("(%p)->(IID_IMarshal %p)\n", This, ppv); return E_NOINTERFACE; - }else if(dispex_query_interface(&This->inner_window->event_target.dispex, riid, ppv)) { - assert(!*ppv); - return E_NOINTERFACE; }else { - return EventTarget_QI(&This->inner_window->event_target, riid, ppv); + return S_FALSE; }
IUnknown_AddRef((IUnknown*)*ppv); return S_OK; }
+static HRESULT WINAPI HTMLWindow2_QueryInterface(IHTMLWindow2 *iface, REFIID riid, void **ppv) +{ + HTMLInnerWindow *This = HTMLInnerWindow_from_IHTMLWindow2(iface); + HRESULT hres; + + TRACE("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv); + + hres = base_query_interface(&This->base, riid, ppv); + if(hres != S_FALSE) + return hres; + + return EventTarget_QI(&This->event_target, riid, ppv); +} + static ULONG WINAPI HTMLWindow2_AddRef(IHTMLWindow2 *iface) { - HTMLWindow *This = impl_from_IHTMLWindow2(iface); - LONG ref = InterlockedIncrement(&This->ref); + HTMLInnerWindow *This = HTMLInnerWindow_from_IHTMLWindow2(iface); + LONG ref = InterlockedIncrement(&This->base.ref); + + TRACE("(%p) ref=%ld\n", This, ref); + + return ref; +} + +static ULONG WINAPI HTMLWindow2_Release(IHTMLWindow2 *iface) +{ + HTMLInnerWindow *This = HTMLInnerWindow_from_IHTMLWindow2(iface); + LONG ref = InterlockedDecrement(&This->base.ref); + + TRACE("(%p) ref=%ld\n", This, ref); + + if(!ref) + release_dispex(&This->event_target.dispex); + + return ref; +} + +static HRESULT WINAPI outer_window_QueryInterface(IHTMLWindow2 *iface, REFIID riid, void **ppv) +{ + HTMLOuterWindow *This = HTMLOuterWindow_from_IHTMLWindow2(iface); + HRESULT hres; + + TRACE("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv); + + hres = base_query_interface(&This->base, riid, ppv); + if(hres != S_FALSE) + return hres; + + return EventTarget_QI(&This->base.inner_window->event_target, riid, ppv); +} + +static ULONG WINAPI outer_window_AddRef(IHTMLWindow2 *iface) +{ + HTMLOuterWindow *This = HTMLOuterWindow_from_IHTMLWindow2(iface); + LONG ref = InterlockedIncrement(&This->base.ref);
TRACE("(%p) ref=%ld\n", This, ref);
@@ -249,19 +298,15 @@ static void release_outer_window(HTMLOuterWindow *This) free(This); }
-static ULONG WINAPI HTMLWindow2_Release(IHTMLWindow2 *iface) +static ULONG WINAPI outer_window_Release(IHTMLWindow2 *iface) { - HTMLWindow *This = impl_from_IHTMLWindow2(iface); - LONG ref = InterlockedDecrement(&This->ref); + HTMLOuterWindow *This = HTMLOuterWindow_from_IHTMLWindow2(iface); + LONG ref = InterlockedDecrement(&This->base.ref);
TRACE("(%p) ref=%ld\n", This, ref);
- if(!ref) { - if(is_outer_window(This)) - release_outer_window(This->outer_window); - else - release_dispex(&This->inner_window->event_target.dispex); - } + if(!ref) + release_outer_window(This);
return ref; } @@ -1548,6 +1593,86 @@ static const IHTMLWindow2Vtbl HTMLWindow2Vtbl = { HTMLWindow2_get_external };
+static const IHTMLWindow2Vtbl outer_window_HTMLWindow2Vtbl = { + outer_window_QueryInterface, + outer_window_AddRef, + outer_window_Release, + HTMLWindow2_GetTypeInfoCount, + HTMLWindow2_GetTypeInfo, + HTMLWindow2_GetIDsOfNames, + HTMLWindow2_Invoke, + HTMLWindow2_item, + HTMLWindow2_get_length, + HTMLWindow2_get_frames, + HTMLWindow2_put_defaultStatus, + HTMLWindow2_get_defaultStatus, + HTMLWindow2_put_status, + HTMLWindow2_get_status, + HTMLWindow2_setTimeout, + HTMLWindow2_clearTimeout, + HTMLWindow2_alert, + HTMLWindow2_confirm, + HTMLWindow2_prompt, + HTMLWindow2_get_Image, + HTMLWindow2_get_location, + HTMLWindow2_get_history, + HTMLWindow2_close, + HTMLWindow2_put_opener, + HTMLWindow2_get_opener, + HTMLWindow2_get_navigator, + HTMLWindow2_put_name, + HTMLWindow2_get_name, + HTMLWindow2_get_parent, + HTMLWindow2_open, + HTMLWindow2_get_self, + HTMLWindow2_get_top, + HTMLWindow2_get_window, + HTMLWindow2_navigate, + HTMLWindow2_put_onfocus, + HTMLWindow2_get_onfocus, + HTMLWindow2_put_onblur, + HTMLWindow2_get_onblur, + HTMLWindow2_put_onload, + HTMLWindow2_get_onload, + HTMLWindow2_put_onbeforeunload, + HTMLWindow2_get_onbeforeunload, + HTMLWindow2_put_onunload, + HTMLWindow2_get_onunload, + HTMLWindow2_put_onhelp, + HTMLWindow2_get_onhelp, + HTMLWindow2_put_onerror, + HTMLWindow2_get_onerror, + HTMLWindow2_put_onresize, + HTMLWindow2_get_onresize, + HTMLWindow2_put_onscroll, + HTMLWindow2_get_onscroll, + HTMLWindow2_get_document, + HTMLWindow2_get_event, + HTMLWindow2_get__newEnum, + HTMLWindow2_showModalDialog, + HTMLWindow2_showHelp, + HTMLWindow2_get_screen, + HTMLWindow2_get_Option, + HTMLWindow2_focus, + HTMLWindow2_get_closed, + HTMLWindow2_blur, + HTMLWindow2_scroll, + HTMLWindow2_get_clientInformation, + HTMLWindow2_setInterval, + HTMLWindow2_clearInterval, + HTMLWindow2_put_offscreenBuffering, + HTMLWindow2_get_offscreenBuffering, + HTMLWindow2_execScript, + HTMLWindow2_toString, + HTMLWindow2_scrollBy, + HTMLWindow2_scrollTo, + HTMLWindow2_moveTo, + HTMLWindow2_moveBy, + HTMLWindow2_resizeTo, + HTMLWindow2_resizeBy, + HTMLWindow2_get_external +}; + static inline HTMLWindow *impl_from_IHTMLWindow3(IHTMLWindow3 *iface) { return CONTAINING_RECORD(iface, HTMLWindow, IHTMLWindow3_iface); @@ -4078,7 +4203,6 @@ static void *alloc_window(size_t size) if(!window) return NULL;
- window->IHTMLWindow2_iface.lpVtbl = &HTMLWindow2Vtbl; window->IHTMLWindow3_iface.lpVtbl = &HTMLWindow3Vtbl; window->IHTMLWindow4_iface.lpVtbl = &HTMLWindow4Vtbl; window->IHTMLWindow5_iface.lpVtbl = &HTMLWindow5Vtbl; @@ -4105,6 +4229,7 @@ static HRESULT create_inner_window(HTMLOuterWindow *outer_window, IMoniker *mon, window = alloc_window(sizeof(HTMLInnerWindow)); if(!window) return E_OUTOFMEMORY; + window->base.IHTMLWindow2_iface.lpVtbl = &HTMLWindow2Vtbl;
hres = create_performance_timing(&window->performance_timing); if(FAILED(hres)) { @@ -4144,6 +4269,7 @@ HRESULT create_outer_window(GeckoBrowser *browser, mozIDOMWindowProxy *mozwindow window = alloc_window(sizeof(HTMLOuterWindow)); if(!window) return E_OUTOFMEMORY; + window->base.IHTMLWindow2_iface.lpVtbl = &outer_window_HTMLWindow2Vtbl;
window->base.outer_window = window; window->base.inner_window = NULL;
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmldoc.c | 2 +- dlls/mshtml/xmlhttprequest.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index d4761db77aa..77916ca1a0f 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -365,7 +365,7 @@ static IHTMLEventObj *DocumentType_set_current_event(DispatchEx *dispex, IHTMLEv return default_set_current_event(This->node.doc->window, event); }
-static event_target_vtbl_t DocumentType_event_target_vtbl = { +static const event_target_vtbl_t DocumentType_event_target_vtbl = { { NULL, }, diff --git a/dlls/mshtml/xmlhttprequest.c b/dlls/mshtml/xmlhttprequest.c index 417923cf444..9bfaefcd892 100644 --- a/dlls/mshtml/xmlhttprequest.c +++ b/dlls/mshtml/xmlhttprequest.c @@ -1592,7 +1592,7 @@ static void HTMLXMLHttpRequest_init_dispex_info(dispex_data_t *info, compat_mode compat_mode < COMPAT_MODE_IE11 ? private_ie10_hooks : NULL); }
-static event_target_vtbl_t HTMLXMLHttpRequest_event_target_vtbl = { +static const event_target_vtbl_t HTMLXMLHttpRequest_event_target_vtbl = { { HTMLXMLHttpRequest_destructor, HTMLXMLHttpRequest_unlink
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/dispex.c | 8 +--- dlls/mshtml/htmlattr.c | 4 +- dlls/mshtml/htmldoc.c | 34 ++++++---------- dlls/mshtml/htmlelem.c | 77 +++++++++++++++--------------------- dlls/mshtml/htmlelemcol.c | 12 +++--- dlls/mshtml/htmlevent.c | 36 ++++++++--------- dlls/mshtml/htmlimg.c | 8 +--- dlls/mshtml/htmlnode.c | 12 +++--- dlls/mshtml/htmlselect.c | 8 +--- dlls/mshtml/htmlstorage.c | 15 +++---- dlls/mshtml/htmlstyle.c | 9 ++--- dlls/mshtml/htmlstylesheet.c | 30 +++++++------- dlls/mshtml/htmlwindow.c | 25 +++++------- dlls/mshtml/mutation.c | 9 ++--- dlls/mshtml/omnavigator.c | 36 ++++++++--------- dlls/mshtml/range.c | 8 ++-- dlls/mshtml/selection.c | 4 +- dlls/mshtml/xmlhttprequest.c | 13 +++--- 18 files changed, 146 insertions(+), 202 deletions(-)
diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index 5f1fb98ddab..636c9f78d04 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -906,12 +906,8 @@ static HRESULT function_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPAR }
static const dispex_static_data_vtbl_t function_dispex_vtbl = { - function_destructor, - NULL, - function_value, - NULL, - NULL, - NULL + .destructor = function_destructor, + .value = function_value, };
static const tid_t function_iface_tids[] = {0}; diff --git a/dlls/mshtml/htmlattr.c b/dlls/mshtml/htmlattr.c index 112c03cb0b5..862b23fd0e6 100644 --- a/dlls/mshtml/htmlattr.c +++ b/dlls/mshtml/htmlattr.c @@ -496,8 +496,8 @@ static void HTMLDOMAttribute_destructor(DispatchEx *dispex) }
static const dispex_static_data_vtbl_t HTMLDOMAttribute_dispex_vtbl = { - HTMLDOMAttribute_destructor, - HTMLDOMAttribute_unlink + .destructor = HTMLDOMAttribute_destructor, + .unlink = HTMLDOMAttribute_unlink };
static const tid_t HTMLDOMAttribute_iface_tids[] = { diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index 77916ca1a0f..b0c88719b44 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -369,12 +369,9 @@ static const event_target_vtbl_t DocumentType_event_target_vtbl = { { NULL, }, - DocumentType_get_gecko_target, - NULL, - DocumentType_get_parent_event_target, - NULL, - NULL, - DocumentType_set_current_event + .get_gecko_target = DocumentType_get_gecko_target, + .get_parent_event_target = DocumentType_get_parent_event_target, + .set_current_event = DocumentType_set_current_event };
static const tid_t DocumentType_iface_tids[] = { @@ -6086,23 +6083,16 @@ static HRESULT HTMLDocumentNode_location_hook(DispatchEx *dispex, WORD flags, DI
static const event_target_vtbl_t HTMLDocumentNode_event_target_vtbl = { { - NULL, - NULL, - NULL, - NULL, - HTMLDocumentNode_get_name, - HTMLDocumentNode_invoke, - NULL, - HTMLDocumentNode_next_dispid, - HTMLDocumentNode_get_compat_mode, - NULL + .get_name = HTMLDocumentNode_get_name, + .invoke = HTMLDocumentNode_invoke, + .next_dispid = HTMLDocumentNode_next_dispid, + .get_compat_mode = HTMLDocumentNode_get_compat_mode, }, - HTMLDocumentNode_get_gecko_target, - HTMLDocumentNode_bind_event, - HTMLDocumentNode_get_parent_event_target, - NULL, - HTMLDocumentNode_get_cp_container, - HTMLDocumentNode_set_current_event + .get_gecko_target = HTMLDocumentNode_get_gecko_target, + .bind_event = HTMLDocumentNode_bind_event, + .get_parent_event_target = HTMLDocumentNode_get_parent_event_target, + .get_cp_container = HTMLDocumentNode_get_cp_container, + .set_current_event = HTMLDocumentNode_set_current_event };
static const NodeImplVtbl HTMLDocumentFragmentImplVtbl = { diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 838f4a2ae66..2c13dadbbe0 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -861,8 +861,8 @@ void HTMLRect_init_dispex_info(dispex_data_t *info, compat_mode_t mode) }
static const dispex_static_data_vtbl_t HTMLRect_dispex_vtbl = { - HTMLRect_destructor, - HTMLRect_unlink + .destructor = HTMLRect_destructor, + .unlink = HTMLRect_unlink };
static const tid_t HTMLRect_iface_tids[] = { @@ -1295,13 +1295,11 @@ static HRESULT HTMLRectCollection_invoke(DispatchEx *dispex, DISPID id, LCID lci }
static const dispex_static_data_vtbl_t HTMLRectCollection_dispex_vtbl = { - HTMLRectCollection_destructor, - HTMLRectCollection_unlink, - NULL, - HTMLRectCollection_get_dispid, - HTMLRectCollection_get_name, - HTMLRectCollection_invoke, - NULL + .destructor = HTMLRectCollection_destructor, + .unlink = HTMLRectCollection_unlink, + .get_dispid = HTMLRectCollection_get_dispid, + .get_name = HTMLRectCollection_get_name, + .invoke = HTMLRectCollection_invoke, }; static const tid_t HTMLRectCollection_iface_tids[] = { IHTMLRectCollection_tid, @@ -7356,23 +7354,17 @@ static const tid_t HTMLElement_iface_tids[] = {
const event_target_vtbl_t HTMLElement_event_target_vtbl = { { - NULL, - NULL, - NULL, - HTMLElement_get_dispid, - HTMLElement_get_name, - HTMLElement_invoke, - NULL, - NULL, - NULL, - HTMLElement_populate_props + .get_dispid = HTMLElement_get_dispid, + .get_name = HTMLElement_get_name, + .invoke = HTMLElement_invoke, + .populate_props = HTMLElement_populate_props }, - HTMLElement_get_gecko_target, - HTMLElement_bind_event, - HTMLElement_get_parent_event_target, - HTMLElement_handle_event_default, - HTMLElement_get_cp_container, - HTMLElement_set_current_event + .get_gecko_target = HTMLElement_get_gecko_target, + .bind_event = HTMLElement_bind_event, + .get_parent_event_target = HTMLElement_get_parent_event_target, + .handle_event_default = HTMLElement_handle_event_default, + .get_cp_container = HTMLElement_get_cp_container, + .set_current_event = HTMLElement_set_current_event };
struct token_list { @@ -7834,12 +7826,12 @@ static HRESULT token_list_invoke(DispatchEx *dispex, DISPID id, LCID lcid, WORD }
static const dispex_static_data_vtbl_t token_list_dispex_vtbl = { - token_list_destructor, - token_list_unlink, - token_list_value, - token_list_get_dispid, - token_list_get_name, - token_list_invoke + .destructor = token_list_destructor, + .unlink = token_list_unlink, + .value = token_list_value, + .get_dispid = token_list_get_dispid, + .get_name = token_list_get_name, + .invoke = token_list_invoke };
static const tid_t token_list_iface_tids[] = { @@ -8261,13 +8253,10 @@ static HRESULT HTMLFiltersCollection_invoke(DispatchEx *dispex, DISPID id, LCID }
static const dispex_static_data_vtbl_t HTMLFiltersCollection_dispex_vtbl = { - HTMLFiltersCollection_destructor, - NULL, - NULL, - HTMLFiltersCollection_get_dispid, - HTMLFiltersCollection_get_name, - HTMLFiltersCollection_invoke, - NULL + .destructor = HTMLFiltersCollection_destructor, + .get_dispid = HTMLFiltersCollection_get_dispid, + .get_name = HTMLFiltersCollection_get_name, + .invoke = HTMLFiltersCollection_invoke, };
static const tid_t HTMLFiltersCollection_iface_tids[] = { @@ -9028,13 +9017,11 @@ static HRESULT HTMLAttributeCollection_invoke(DispatchEx *dispex, DISPID id, LCI }
static const dispex_static_data_vtbl_t HTMLAttributeCollection_dispex_vtbl = { - HTMLAttributeCollection_destructor, - HTMLAttributeCollection_unlink, - NULL, - HTMLAttributeCollection_get_dispid, - HTMLAttributeCollection_get_name, - HTMLAttributeCollection_invoke, - NULL + .destructor = HTMLAttributeCollection_destructor, + .unlink = HTMLAttributeCollection_unlink, + .get_dispid = HTMLAttributeCollection_get_dispid, + .get_name = HTMLAttributeCollection_get_name, + .invoke = HTMLAttributeCollection_invoke, };
static const tid_t HTMLAttributeCollection_iface_tids[] = { diff --git a/dlls/mshtml/htmlelemcol.c b/dlls/mshtml/htmlelemcol.c index 79dd59fca91..852c21ad3bd 100644 --- a/dlls/mshtml/htmlelemcol.c +++ b/dlls/mshtml/htmlelemcol.c @@ -633,13 +633,11 @@ static HRESULT HTMLElementCollection_invoke(DispatchEx *dispex, DISPID id, LCID }
static const dispex_static_data_vtbl_t HTMLElementColection_dispex_vtbl = { - HTMLElementCollection_destructor, - HTMLElementCollection_unlink, - NULL, - HTMLElementCollection_get_dispid, - HTMLElementCollection_get_name, - HTMLElementCollection_invoke, - NULL + .destructor = HTMLElementCollection_destructor, + .unlink = HTMLElementCollection_unlink, + .get_dispid = HTMLElementCollection_get_dispid, + .get_name = HTMLElementCollection_get_name, + .invoke = HTMLElementCollection_invoke, };
static const tid_t HTMLElementCollection_iface_tids[] = { diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index 41c8b36e941..c9290fdae60 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -890,8 +890,8 @@ static void HTMLEventObj_destructor(DispatchEx *dispex) }
static const dispex_static_data_vtbl_t HTMLEventObj_dispex_vtbl = { - HTMLEventObj_destructor, - HTMLEventObj_unlink + .destructor = HTMLEventObj_destructor, + .unlink = HTMLEventObj_unlink };
static const tid_t HTMLEventObj_iface_tids[] = { @@ -2965,8 +2965,8 @@ static void DOMStorageEvent_destructor(DispatchEx *dispex) }
static const dispex_static_data_vtbl_t DOMEvent_dispex_vtbl = { - DOMEvent_destructor, - DOMEvent_unlink + .destructor = DOMEvent_destructor, + .unlink = DOMEvent_unlink };
static const tid_t DOMEvent_iface_tids[] = { @@ -2982,8 +2982,8 @@ static dispex_static_data_t DOMEvent_dispex = { };
static const dispex_static_data_vtbl_t DOMUIEvent_dispex_vtbl = { - DOMEvent_destructor, - DOMUIEvent_unlink + .destructor = DOMEvent_destructor, + .unlink = DOMUIEvent_unlink };
static const tid_t DOMUIEvent_iface_tids[] = { @@ -3000,8 +3000,8 @@ static dispex_static_data_t DOMUIEvent_dispex = { };
static const dispex_static_data_vtbl_t DOMMouseEvent_dispex_vtbl = { - DOMEvent_destructor, - DOMMouseEvent_unlink + .destructor = DOMEvent_destructor, + .unlink = DOMMouseEvent_unlink };
static const tid_t DOMMouseEvent_iface_tids[] = { @@ -3019,8 +3019,8 @@ static dispex_static_data_t DOMMouseEvent_dispex = { };
static const dispex_static_data_vtbl_t DOMKeyboardEvent_dispex_vtbl = { - DOMEvent_destructor, - DOMKeyboardEvent_unlink + .destructor = DOMEvent_destructor, + .unlink = DOMKeyboardEvent_unlink };
static const tid_t DOMKeyboardEvent_iface_tids[] = { @@ -3052,8 +3052,8 @@ static dispex_static_data_t DOMPageTransitionEvent_dispex = { };
static const dispex_static_data_vtbl_t DOMCustomEvent_dispex_vtbl = { - DOMCustomEvent_destructor, - DOMCustomEvent_unlink + .destructor = DOMCustomEvent_destructor, + .unlink = DOMCustomEvent_unlink };
static const tid_t DOMCustomEvent_iface_tids[] = { @@ -3070,8 +3070,8 @@ static dispex_static_data_t DOMCustomEvent_dispex = { };
static const dispex_static_data_vtbl_t DOMMessageEvent_dispex_vtbl = { - DOMMessageEvent_destructor, - DOMMessageEvent_unlink + .destructor = DOMMessageEvent_destructor, + .unlink = DOMMessageEvent_unlink };
static const tid_t DOMMessageEvent_iface_tids[] = { @@ -3088,8 +3088,8 @@ static dispex_static_data_t DOMMessageEvent_dispex = { };
static const dispex_static_data_vtbl_t DOMProgressEvent_dispex_vtbl = { - DOMEvent_destructor, - DOMProgressEvent_unlink + .destructor = DOMEvent_destructor, + .unlink = DOMProgressEvent_unlink };
static const tid_t DOMProgressEvent_iface_tids[] = { @@ -3106,8 +3106,8 @@ static dispex_static_data_t DOMProgressEvent_dispex = { };
static const dispex_static_data_vtbl_t DOMStorageEvent_dispex_vtbl = { - DOMStorageEvent_destructor, - DOMEvent_unlink + .destructor = DOMStorageEvent_destructor, + .unlink = DOMEvent_unlink };
static const tid_t DOMStorageEvent_iface_tids[] = { diff --git a/dlls/mshtml/htmlimg.c b/dlls/mshtml/htmlimg.c index aad4d1f6dfa..746e1622af8 100644 --- a/dlls/mshtml/htmlimg.c +++ b/dlls/mshtml/htmlimg.c @@ -979,12 +979,8 @@ static const tid_t HTMLImageElementFactory_iface_tids[] = { };
static const dispex_static_data_vtbl_t HTMLImageElementFactory_dispex_vtbl = { - HTMLImageElementFactory_destructor, - NULL, - HTMLImageElementFactory_value, - NULL, - NULL, - NULL + .destructor = HTMLImageElementFactory_destructor, + .value = HTMLImageElementFactory_value, };
static dispex_static_data_t HTMLImageElementFactory_dispex = { diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index 337dc282fe6..9fa0b657100 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -443,13 +443,11 @@ static HRESULT HTMLDOMChildrenCollection_invoke(DispatchEx *dispex, DISPID id, L }
static const dispex_static_data_vtbl_t HTMLDOMChildrenCollection_dispex_vtbl = { - HTMLDOMChildrenCollection_destructor, - HTMLDOMChildrenCollection_unlink, - NULL, - HTMLDOMChildrenCollection_get_dispid, - HTMLDOMChildrenCollection_get_name, - HTMLDOMChildrenCollection_invoke, - NULL + .destructor = HTMLDOMChildrenCollection_destructor, + .unlink = HTMLDOMChildrenCollection_unlink, + .get_dispid = HTMLDOMChildrenCollection_get_dispid, + .get_name = HTMLDOMChildrenCollection_get_name, + .invoke = HTMLDOMChildrenCollection_invoke, };
static const tid_t HTMLDOMChildrenCollection_iface_tids[] = { diff --git a/dlls/mshtml/htmlselect.c b/dlls/mshtml/htmlselect.c index 0a5905e6f1f..f03a2e4d8a0 100644 --- a/dlls/mshtml/htmlselect.c +++ b/dlls/mshtml/htmlselect.c @@ -633,12 +633,8 @@ static const tid_t HTMLOptionElementFactory_iface_tids[] = { };
static const dispex_static_data_vtbl_t HTMLOptionElementFactory_dispex_vtbl = { - HTMLOptionElementFactory_destructor, - NULL, - HTMLOptionElementFactory_value, - NULL, - NULL, - NULL + .destructor = HTMLOptionElementFactory_destructor, + .value = HTMLOptionElementFactory_value, };
static dispex_static_data_t HTMLOptionElementFactory_dispex = { diff --git a/dlls/mshtml/htmlstorage.c b/dlls/mshtml/htmlstorage.c index 4ed909f79fb..6d321939296 100644 --- a/dlls/mshtml/htmlstorage.c +++ b/dlls/mshtml/htmlstorage.c @@ -1314,15 +1314,12 @@ static HRESULT HTMLStorage_next_dispid(DispatchEx *dispex, DISPID id, DISPID *pi }
static const dispex_static_data_vtbl_t HTMLStorage_dispex_vtbl = { - HTMLStorage_destructor, - NULL, - NULL, - HTMLStorage_get_dispid, - HTMLStorage_get_name, - HTMLStorage_invoke, - HTMLStorage_delete, - HTMLStorage_next_dispid, - NULL + .destructor = HTMLStorage_destructor, + .get_dispid = HTMLStorage_get_dispid, + .get_name = HTMLStorage_get_name, + .invoke = HTMLStorage_invoke, + .delete = HTMLStorage_delete, + .next_dispid = HTMLStorage_next_dispid, };
static const tid_t HTMLStorage_iface_tids[] = { diff --git a/dlls/mshtml/htmlstyle.c b/dlls/mshtml/htmlstyle.c index 16a1140f97d..25ce20ab815 100644 --- a/dlls/mshtml/htmlstyle.c +++ b/dlls/mshtml/htmlstyle.c @@ -10005,12 +10005,9 @@ void CSSStyle_init_dispex_info(dispex_data_t *info, compat_mode_t mode) }
const dispex_static_data_vtbl_t CSSStyle_dispex_vtbl = { - CSSStyle_destructor, - CSSStyle_unlink, - NULL, - CSSStyle_get_dispid, - NULL, - NULL + .destructor = CSSStyle_destructor, + .unlink = CSSStyle_unlink, + .get_dispid = CSSStyle_get_dispid, };
static const tid_t HTMLStyle_iface_tids[] = { diff --git a/dlls/mshtml/htmlstylesheet.c b/dlls/mshtml/htmlstylesheet.c index 8ce0f85b76e..4ee2da02d95 100644 --- a/dlls/mshtml/htmlstylesheet.c +++ b/dlls/mshtml/htmlstylesheet.c @@ -220,8 +220,8 @@ static void HTMLStyleSheetRule_destructor(DispatchEx *dispex) }
static const dispex_static_data_vtbl_t HTMLStyleSheetRule_dispex_vtbl = { - HTMLStyleSheetRule_destructor, - HTMLStyleSheetRule_unlink + .destructor = HTMLStyleSheetRule_destructor, + .unlink = HTMLStyleSheetRule_unlink };
static const tid_t HTMLStyleSheetRule_iface_tids[] = { @@ -492,12 +492,11 @@ static HRESULT HTMLStyleSheetRulesCollection_invoke(DispatchEx *dispex, DISPID i }
static const dispex_static_data_vtbl_t HTMLStyleSheetRulesCollection_dispex_vtbl = { - HTMLStyleSheetRulesCollection_destructor, - HTMLStyleSheetRulesCollection_unlink, - NULL, - HTMLStyleSheetRulesCollection_get_dispid, - HTMLStyleSheetRulesCollection_get_name, - HTMLStyleSheetRulesCollection_invoke + .destructor = HTMLStyleSheetRulesCollection_destructor, + .unlink = HTMLStyleSheetRulesCollection_unlink, + .get_dispid = HTMLStyleSheetRulesCollection_get_dispid, + .get_name = HTMLStyleSheetRulesCollection_get_name, + .invoke = HTMLStyleSheetRulesCollection_invoke }; static const tid_t HTMLStyleSheetRulesCollection_iface_tids[] = { IHTMLStyleSheetRulesCollection_tid, @@ -929,12 +928,11 @@ static HRESULT HTMLStyleSheetsCollection_invoke(DispatchEx *dispex, DISPID id, L }
static const dispex_static_data_vtbl_t HTMLStyleSheetsCollection_dispex_vtbl = { - HTMLStyleSheetsCollection_destructor, - HTMLStyleSheetsCollection_unlink, - NULL, - HTMLStyleSheetsCollection_get_dispid, - HTMLStyleSheetsCollection_get_name, - HTMLStyleSheetsCollection_invoke + .destructor = HTMLStyleSheetsCollection_destructor, + .unlink = HTMLStyleSheetsCollection_unlink, + .get_dispid = HTMLStyleSheetsCollection_get_dispid, + .get_name = HTMLStyleSheetsCollection_get_name, + .invoke = HTMLStyleSheetsCollection_invoke }; static const tid_t HTMLStyleSheetsCollection_iface_tids[] = { IHTMLStyleSheetsCollection_tid, @@ -1520,8 +1518,8 @@ static void HTMLStyleSheet_init_dispex_info(dispex_data_t *info, compat_mode_t m }
static const dispex_static_data_vtbl_t HTMLStyleSheet_dispex_vtbl = { - HTMLStyleSheet_destructor, - HTMLStyleSheet_unlink + .destructor = HTMLStyleSheet_destructor, + .unlink = HTMLStyleSheet_unlink };
static const tid_t HTMLStyleSheet_iface_tids[] = { diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index ef71246d723..571b04d23c8 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -4163,23 +4163,16 @@ static IHTMLEventObj *HTMLWindow_set_current_event(DispatchEx *dispex, IHTMLEven
static const event_target_vtbl_t HTMLWindow_event_target_vtbl = { { - HTMLWindow_destructor, - HTMLWindow_unlink, - NULL, - NULL, - HTMLWindow_get_name, - HTMLWindow_invoke, - NULL, - HTMLWindow_next_dispid, - HTMLWindow_get_compat_mode, - NULL + .destructor = HTMLWindow_destructor, + .unlink = HTMLWindow_unlink, + .get_name = HTMLWindow_get_name, + .invoke = HTMLWindow_invoke, + .next_dispid = HTMLWindow_next_dispid, + .get_compat_mode = HTMLWindow_get_compat_mode, }, - HTMLWindow_get_gecko_target, - HTMLWindow_bind_event, - NULL, - NULL, - NULL, - HTMLWindow_set_current_event + .get_gecko_target = HTMLWindow_get_gecko_target, + .bind_event = HTMLWindow_bind_event, + .set_current_event = HTMLWindow_set_current_event };
static const tid_t HTMLWindow_iface_tids[] = { diff --git a/dlls/mshtml/mutation.c b/dlls/mshtml/mutation.c index 7890faa1b16..098f0eb61ba 100644 --- a/dlls/mshtml/mutation.c +++ b/dlls/mshtml/mutation.c @@ -1228,8 +1228,8 @@ static void mutation_observer_destructor(DispatchEx *dispex) }
static const dispex_static_data_vtbl_t mutation_observer_dispex_vtbl = { - mutation_observer_destructor, - mutation_observer_unlink + .destructor = mutation_observer_destructor, + .unlink = mutation_observer_unlink };
static const tid_t mutation_observer_iface_tids[] = { @@ -1388,9 +1388,8 @@ static HRESULT mutation_observer_ctor_value(DispatchEx *dispex, LCID lcid, }
static dispex_static_data_vtbl_t mutation_observer_ctor_dispex_vtbl = { - mutation_observer_ctor_destructor, - NULL, - mutation_observer_ctor_value + .destructor = mutation_observer_ctor_destructor, + .value = mutation_observer_ctor_value };
static const tid_t mutation_observer_ctor_iface_tids[] = { diff --git a/dlls/mshtml/omnavigator.c b/dlls/mshtml/omnavigator.c index b40438361cc..e89f6b43271 100644 --- a/dlls/mshtml/omnavigator.c +++ b/dlls/mshtml/omnavigator.c @@ -308,8 +308,8 @@ static void HTMLDOMImplementation_destructor(DispatchEx *dispex) }
static const dispex_static_data_vtbl_t HTMLDOMImplementation_dispex_vtbl = { - HTMLDOMImplementation_destructor, - HTMLDOMImplementation_unlink + .destructor = HTMLDOMImplementation_destructor, + .unlink = HTMLDOMImplementation_unlink };
static void HTMLDOMImplementation_init_dispex_info(dispex_data_t *info, compat_mode_t compat_mode) @@ -581,7 +581,7 @@ static void HTMLScreen_destructor(DispatchEx *dispex) }
static const dispex_static_data_vtbl_t HTMLScreen_dispex_vtbl = { - HTMLScreen_destructor, + .destructor = HTMLScreen_destructor, };
static const tid_t HTMLScreen_iface_tids[] = { @@ -758,7 +758,7 @@ static void OmHistory_destructor(DispatchEx *dispex) }
static const dispex_static_data_vtbl_t OmHistory_dispex_vtbl = { - OmHistory_destructor, + .destructor = OmHistory_destructor, };
static const tid_t OmHistory_iface_tids[] = { @@ -935,8 +935,8 @@ static void HTMLPluginsCollection_destructor(DispatchEx *dispex) }
static const dispex_static_data_vtbl_t HTMLPluginsCollection_dispex_vtbl = { - HTMLPluginsCollection_destructor, - HTMLPluginsCollection_unlink + .destructor = HTMLPluginsCollection_destructor, + .unlink = HTMLPluginsCollection_unlink };
static const tid_t HTMLPluginsCollection_iface_tids[] = { @@ -1101,8 +1101,8 @@ static void HTMLMimeTypesCollection_destructor(DispatchEx *dispex) }
static const dispex_static_data_vtbl_t HTMLMimeTypesCollection_dispex_vtbl = { - HTMLMimeTypesCollection_destructor, - HTMLMimeTypesCollection_unlink + .destructor = HTMLMimeTypesCollection_destructor, + .unlink = HTMLMimeTypesCollection_unlink };
static const tid_t HTMLMimeTypesCollection_iface_tids[] = { @@ -1552,8 +1552,8 @@ static void OmNavigator_destructor(DispatchEx *dispex) }
static const dispex_static_data_vtbl_t OmNavigator_dispex_vtbl = { - OmNavigator_destructor, - OmNavigator_unlink + .destructor = OmNavigator_destructor, + .unlink = OmNavigator_unlink };
static const tid_t OmNavigator_iface_tids[] = { @@ -2148,8 +2148,8 @@ static void HTMLPerformanceNavigation_destructor(DispatchEx *dispex) }
static const dispex_static_data_vtbl_t HTMLPerformanceNavigation_dispex_vtbl = { - HTMLPerformanceNavigation_destructor, - HTMLPerformanceNavigation_unlink + .destructor = HTMLPerformanceNavigation_destructor, + .unlink = HTMLPerformanceNavigation_unlink };
static const tid_t HTMLPerformanceNavigation_iface_tids[] = { @@ -2350,8 +2350,8 @@ static void HTMLPerformance_destructor(DispatchEx *dispex) }
static const dispex_static_data_vtbl_t HTMLPerformance_dispex_vtbl = { - HTMLPerformance_destructor, - HTMLPerformance_unlink + .destructor = HTMLPerformance_destructor, + .unlink = HTMLPerformance_unlink };
static const tid_t HTMLPerformance_iface_tids[] = { @@ -2530,7 +2530,7 @@ static void HTMLNamespaceCollection_destructor(DispatchEx *dispex) }
static const dispex_static_data_vtbl_t HTMLNamespaceCollection_dispex_vtbl = { - HTMLNamespaceCollection_destructor, + .destructor = HTMLNamespaceCollection_destructor, };
static const tid_t HTMLNamespaceCollection_iface_tids[] = { @@ -2799,7 +2799,7 @@ static void console_destructor(DispatchEx *dispex) }
static const dispex_static_data_vtbl_t console_dispex_vtbl = { - console_destructor, + .destructor = console_destructor, };
static const tid_t console_iface_tids[] = { @@ -3142,8 +3142,8 @@ static void media_query_list_destructor(DispatchEx *dispex) }
static const dispex_static_data_vtbl_t media_query_list_dispex_vtbl = { - media_query_list_destructor, - media_query_list_unlink + .destructor = media_query_list_destructor, + .unlink = media_query_list_unlink };
static const tid_t media_query_list_iface_tids[] = { diff --git a/dlls/mshtml/range.c b/dlls/mshtml/range.c index e7234994933..904fa736327 100644 --- a/dlls/mshtml/range.c +++ b/dlls/mshtml/range.c @@ -1734,8 +1734,8 @@ static void HTMLTxtRange_destructor(DispatchEx *dispex) }
static const dispex_static_data_vtbl_t HTMLTxtRange_dispex_vtbl = { - HTMLTxtRange_destructor, - HTMLTxtRange_unlink + .destructor = HTMLTxtRange_destructor, + .unlink = HTMLTxtRange_unlink };
static const tid_t HTMLTxtRange_iface_tids[] = { @@ -2097,8 +2097,8 @@ static void HTMLDOMRange_destructor(DispatchEx *dispex) }
static const dispex_static_data_vtbl_t HTMLDOMRange_dispex_vtbl = { - HTMLDOMRange_destructor, - HTMLDOMRange_unlink + .destructor = HTMLDOMRange_destructor, + .unlink = HTMLDOMRange_unlink };
static const tid_t HTMLDOMRange_iface_tids[] = { diff --git a/dlls/mshtml/selection.c b/dlls/mshtml/selection.c index 3067b1a43b1..e06fb9c81d5 100644 --- a/dlls/mshtml/selection.c +++ b/dlls/mshtml/selection.c @@ -345,8 +345,8 @@ static void HTMLSelectionObject_destructor(DispatchEx *dispex) }
static const dispex_static_data_vtbl_t HTMLSelectionObject_dispex_vtbl = { - HTMLSelectionObject_destructor, - HTMLSelectionObject_unlink + .destructor = HTMLSelectionObject_destructor, + .unlink = HTMLSelectionObject_unlink };
static const tid_t HTMLSelectionObject_iface_tids[] = { diff --git a/dlls/mshtml/xmlhttprequest.c b/dlls/mshtml/xmlhttprequest.c index 9bfaefcd892..3a24c5cea5b 100644 --- a/dlls/mshtml/xmlhttprequest.c +++ b/dlls/mshtml/xmlhttprequest.c @@ -1594,11 +1594,11 @@ static void HTMLXMLHttpRequest_init_dispex_info(dispex_data_t *info, compat_mode
static const event_target_vtbl_t HTMLXMLHttpRequest_event_target_vtbl = { { - HTMLXMLHttpRequest_destructor, - HTMLXMLHttpRequest_unlink + .destructor = HTMLXMLHttpRequest_destructor, + .unlink = HTMLXMLHttpRequest_unlink }, - HTMLXMLHttpRequest_get_gecko_target, - HTMLXMLHttpRequest_bind_event + .get_gecko_target = HTMLXMLHttpRequest_get_gecko_target, + .bind_event = HTMLXMLHttpRequest_bind_event };
static const tid_t HTMLXMLHttpRequest_iface_tids[] = { @@ -1815,9 +1815,8 @@ static HRESULT HTMLXMLHttpRequestFactory_value(DispatchEx *iface, LCID lcid, WOR }
static const dispex_static_data_vtbl_t HTMLXMLHttpRequestFactory_dispex_vtbl = { - HTMLXMLHttpRequestFactory_destructor, - NULL, - HTMLXMLHttpRequestFactory_value + .destructor = HTMLXMLHttpRequestFactory_destructor, + .value = HTMLXMLHttpRequestFactory_value };
static const tid_t HTMLXMLHttpRequestFactory_iface_tids[] = {
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlanchor.c | 27 +++++-------- dlls/mshtml/htmlarea.c | 27 +++++-------- dlls/mshtml/htmlbody.c | 32 ++++++--------- dlls/mshtml/htmlcomment.c | 14 +++---- dlls/mshtml/htmldoc.c | 57 ++++++++------------------ dlls/mshtml/htmlelem.c | 14 +++---- dlls/mshtml/htmlform.c | 30 ++++++-------- dlls/mshtml/htmlframe.c | 66 ++++++++++++++---------------- dlls/mshtml/htmlgeneric.c | 14 +++---- dlls/mshtml/htmlhead.c | 70 +++++++++++++------------------- dlls/mshtml/htmlimg.c | 28 +++++-------- dlls/mshtml/htmlinput.c | 76 ++++++++++++++-------------------- dlls/mshtml/htmllink.c | 29 +++++-------- dlls/mshtml/htmlnode.c | 9 ++--- dlls/mshtml/htmlobject.c | 45 +++++++++------------ dlls/mshtml/htmlscript.c | 29 +++++-------- dlls/mshtml/htmlselect.c | 59 +++++++++++---------------- dlls/mshtml/htmlstyleelem.c | 27 +++++-------- dlls/mshtml/htmltable.c | 81 +++++++++++++------------------------ dlls/mshtml/htmltextarea.c | 31 ++++++-------- dlls/mshtml/htmltextnode.c | 9 ++--- dlls/mshtml/svg.c | 52 +++++++++++------------- 22 files changed, 324 insertions(+), 502 deletions(-)
diff --git a/dlls/mshtml/htmlanchor.c b/dlls/mshtml/htmlanchor.c index 9705c7722f5..e784de12443 100644 --- a/dlls/mshtml/htmlanchor.c +++ b/dlls/mshtml/htmlanchor.c @@ -868,24 +868,15 @@ static void HTMLAnchorElement_unlink(HTMLDOMNode *iface) }
static const NodeImplVtbl HTMLAnchorElementImplVtbl = { - &CLSID_HTMLAnchorElement, - HTMLAnchorElement_QI, - HTMLElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLAnchorElement_handle_event, - HTMLElement_get_attr_col, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - HTMLAnchorElement_traverse, - HTMLAnchorElement_unlink + .clsid = &CLSID_HTMLAnchorElement, + .qi = HTMLAnchorElement_QI, + .destructor = HTMLElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLAnchorElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col, + .traverse = HTMLAnchorElement_traverse, + .unlink = HTMLAnchorElement_unlink };
static const tid_t HTMLAnchorElement_iface_tids[] = { diff --git a/dlls/mshtml/htmlarea.c b/dlls/mshtml/htmlarea.c index 3f16f019c3f..d0e377ba96c 100644 --- a/dlls/mshtml/htmlarea.c +++ b/dlls/mshtml/htmlarea.c @@ -476,24 +476,15 @@ static void HTMLAreaElement_unlink(HTMLDOMNode *iface) }
static const NodeImplVtbl HTMLAreaElementImplVtbl = { - &CLSID_HTMLAreaElement, - HTMLAreaElement_QI, - HTMLElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLAreaElement_handle_event, - HTMLElement_get_attr_col, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - HTMLAreaElement_traverse, - HTMLAreaElement_unlink + .clsid = &CLSID_HTMLAreaElement, + .qi = HTMLAreaElement_QI, + .destructor = HTMLElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLAreaElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col, + .traverse = HTMLAreaElement_traverse, + .unlink = HTMLAreaElement_unlink };
static const tid_t HTMLAreaElement_iface_tids[] = { diff --git a/dlls/mshtml/htmlbody.c b/dlls/mshtml/htmlbody.c index 72a6366872b..277b9ed8cf0 100644 --- a/dlls/mshtml/htmlbody.c +++ b/dlls/mshtml/htmlbody.c @@ -973,26 +973,18 @@ static const cpc_entry_t HTMLBodyElement_cpc[] = { };
static const NodeImplVtbl HTMLBodyElementImplVtbl = { - &CLSID_HTMLBody, - HTMLBodyElement_QI, - HTMLElement_destructor, - HTMLBodyElement_cpc, - HTMLElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col, - HTMLBodyElement_get_event_prop_target, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - HTMLBodyElement_traverse, - HTMLBodyElement_unlink, - HTMLBodyElement_is_text_edit, - HTMLBodyElement_is_settable + .clsid = &CLSID_HTMLBody, + .qi = HTMLBodyElement_QI, + .destructor = HTMLElement_destructor, + .cpc_entries = HTMLBodyElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col, + .get_event_prop_target = HTMLBodyElement_get_event_prop_target, + .traverse = HTMLBodyElement_traverse, + .unlink = HTMLBodyElement_unlink, + .is_text_edit = HTMLBodyElement_is_text_edit, + .is_settable = HTMLBodyElement_is_settable };
static const tid_t HTMLBodyElement_iface_tids[] = { diff --git a/dlls/mshtml/htmlcomment.c b/dlls/mshtml/htmlcomment.c index 6af08f25af8..f9c945bee8a 100644 --- a/dlls/mshtml/htmlcomment.c +++ b/dlls/mshtml/htmlcomment.c @@ -185,13 +185,13 @@ static HRESULT HTMLCommentElement_clone(HTMLDOMNode *iface, nsIDOMNode *nsnode, }
static const NodeImplVtbl HTMLCommentElementImplVtbl = { - &CLSID_HTMLCommentElement, - HTMLCommentElement_QI, - HTMLCommentElement_destructor, - HTMLElement_cpc, - HTMLCommentElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col + .clsid = &CLSID_HTMLCommentElement, + .qi = HTMLCommentElement_QI, + .destructor = HTMLCommentElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLCommentElement_clone, + .handle_event = HTMLElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col };
static const tid_t HTMLCommentElement_iface_tids[] = { diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index b0c88719b44..79f17a626af 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -325,11 +325,10 @@ static HRESULT DocumentType_clone(HTMLDOMNode *iface, nsIDOMNode *nsnode, HTMLDO static const cpc_entry_t DocumentType_cpc[] = {{NULL}};
static const NodeImplVtbl DocumentTypeImplVtbl = { - NULL, - DocumentType_QI, - DocumentType_destructor, - DocumentType_cpc, - DocumentType_clone + .qi = DocumentType_QI, + .destructor = DocumentType_destructor, + .cpc_entries = DocumentType_cpc, + .clone = DocumentType_clone };
static nsISupports *DocumentType_get_gecko_target(DispatchEx *dispex) @@ -5860,24 +5859,12 @@ static void HTMLDocumentNode_unlink(HTMLDOMNode *iface) }
static const NodeImplVtbl HTMLDocumentNodeImplVtbl = { - &CLSID_HTMLDocument, - HTMLDocumentNode_QI, - HTMLDocumentNode_destructor, - HTMLDocumentNode_cpc, - HTMLDocumentNode_clone, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - HTMLDocumentNode_unlink + .clsid = &CLSID_HTMLDocument, + .qi = HTMLDocumentNode_QI, + .destructor = HTMLDocumentNode_destructor, + .cpc_entries = HTMLDocumentNode_cpc, + .clone = HTMLDocumentNode_clone, + .unlink = HTMLDocumentNode_unlink };
static HRESULT HTMLDocumentFragment_clone(HTMLDOMNode *iface, nsIDOMNode *nsnode, HTMLDOMNode **ret) @@ -6096,24 +6083,12 @@ static const event_target_vtbl_t HTMLDocumentNode_event_target_vtbl = { };
static const NodeImplVtbl HTMLDocumentFragmentImplVtbl = { - &CLSID_HTMLDocument, - HTMLDocumentNode_QI, - HTMLDocumentNode_destructor, - HTMLDocumentNode_cpc, - HTMLDocumentFragment_clone, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - HTMLDocumentFragment_unlink + .clsid = &CLSID_HTMLDocument, + .qi = HTMLDocumentNode_QI, + .destructor = HTMLDocumentNode_destructor, + .cpc_entries = HTMLDocumentNode_cpc, + .clone = HTMLDocumentFragment_clone, + .unlink = HTMLDocumentFragment_unlink };
static const tid_t HTMLDocumentNode_iface_tids[] = { diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 2c13dadbbe0..82b8791968a 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -6945,13 +6945,13 @@ const cpc_entry_t HTMLElement_cpc[] = { };
static const NodeImplVtbl HTMLElementImplVtbl = { - &CLSID_HTMLUnknownElement, - HTMLElement_QI, - HTMLElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col + .clsid = &CLSID_HTMLUnknownElement, + .qi = HTMLElement_QI, + .destructor = HTMLElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col };
static inline HTMLElement *impl_from_DispatchEx(DispatchEx *iface) diff --git a/dlls/mshtml/htmlform.c b/dlls/mshtml/htmlform.c index 7ecbbeca31b..b8497fd224d 100644 --- a/dlls/mshtml/htmlform.c +++ b/dlls/mshtml/htmlform.c @@ -973,24 +973,18 @@ static void HTMLFormElement_unlink(HTMLDOMNode *iface) }
static const NodeImplVtbl HTMLFormElementImplVtbl = { - &CLSID_HTMLFormElement, - HTMLFormElement_QI, - HTMLElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLFormElement_handle_event, - HTMLElement_get_attr_col, - NULL, - NULL, - NULL, - NULL, - NULL, - HTMLFormElement_get_dispid, - HTMLFormElement_dispex_get_name, - HTMLFormElement_invoke, - NULL, - HTMLFormElement_traverse, - HTMLFormElement_unlink + .clsid = &CLSID_HTMLFormElement, + .qi = HTMLFormElement_QI, + .destructor = HTMLElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLFormElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col, + .get_dispid = HTMLFormElement_get_dispid, + .get_name = HTMLFormElement_dispex_get_name, + .invoke = HTMLFormElement_invoke, + .traverse = HTMLFormElement_traverse, + .unlink = HTMLFormElement_unlink };
static const tid_t HTMLFormElement_iface_tids[] = { diff --git a/dlls/mshtml/htmlframe.c b/dlls/mshtml/htmlframe.c index c90ebe430dd..e5e43e55c65 100644 --- a/dlls/mshtml/htmlframe.c +++ b/dlls/mshtml/htmlframe.c @@ -1007,24 +1007,21 @@ static void HTMLFrameElement_unlink(HTMLDOMNode *iface) }
static const NodeImplVtbl HTMLFrameElementImplVtbl = { - &CLSID_HTMLFrameElement, - HTMLFrameElement_QI, - HTMLFrameElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col, - NULL, - NULL, - NULL, - HTMLFrameElement_get_document, - HTMLFrameElement_get_readystate, - HTMLFrameElement_get_dispid, - HTMLFrameElement_get_name, - HTMLFrameElement_invoke, - HTMLFrameElement_bind_to_tree, - HTMLFrameElement_traverse, - HTMLFrameElement_unlink + .clsid = &CLSID_HTMLFrameElement, + .qi = HTMLFrameElement_QI, + .destructor = HTMLFrameElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col, + .get_document = HTMLFrameElement_get_document, + .get_readystate = HTMLFrameElement_get_readystate, + .get_dispid = HTMLFrameElement_get_dispid, + .get_name = HTMLFrameElement_get_name, + .invoke = HTMLFrameElement_invoke, + .bind_to_tree = HTMLFrameElement_bind_to_tree, + .traverse = HTMLFrameElement_traverse, + .unlink = HTMLFrameElement_unlink };
static const tid_t HTMLFrameElement_iface_tids[] = { @@ -1594,24 +1591,21 @@ static void HTMLIFrame_unlink(HTMLDOMNode *iface) }
static const NodeImplVtbl HTMLIFrameImplVtbl = { - &CLSID_HTMLIFrame, - HTMLIFrame_QI, - HTMLIFrame_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col, - NULL, - NULL, - NULL, - HTMLIFrame_get_document, - HTMLIFrame_get_readystate, - HTMLIFrame_get_dispid, - HTMLIFrame_get_name, - HTMLIFrame_invoke, - HTMLIFrame_bind_to_tree, - HTMLIFrame_traverse, - HTMLIFrame_unlink + .clsid = &CLSID_HTMLIFrame, + .qi = HTMLIFrame_QI, + .destructor = HTMLIFrame_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col, + .get_document = HTMLIFrame_get_document, + .get_readystate = HTMLIFrame_get_readystate, + .get_dispid = HTMLIFrame_get_dispid, + .get_name = HTMLIFrame_get_name, + .invoke = HTMLIFrame_invoke, + .bind_to_tree = HTMLIFrame_bind_to_tree, + .traverse = HTMLIFrame_traverse, + .unlink = HTMLIFrame_unlink };
static const tid_t HTMLIFrame_iface_tids[] = { diff --git a/dlls/mshtml/htmlgeneric.c b/dlls/mshtml/htmlgeneric.c index 450d49ff16c..5836ebd208a 100644 --- a/dlls/mshtml/htmlgeneric.c +++ b/dlls/mshtml/htmlgeneric.c @@ -153,13 +153,13 @@ static void HTMLGenericElement_destructor(HTMLDOMNode *iface) }
static const NodeImplVtbl HTMLGenericElementImplVtbl = { - &CLSID_HTMLGenericElement, - HTMLGenericElement_QI, - HTMLGenericElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col + .clsid = &CLSID_HTMLGenericElement, + .qi = HTMLGenericElement_QI, + .destructor = HTMLGenericElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col };
static const tid_t HTMLGenericElement_iface_tids[] = { diff --git a/dlls/mshtml/htmlhead.c b/dlls/mshtml/htmlhead.c index 92d90a6d5aa..e11e0f05f7e 100644 --- a/dlls/mshtml/htmlhead.c +++ b/dlls/mshtml/htmlhead.c @@ -169,13 +169,13 @@ static void HTMLTitleElement_destructor(HTMLDOMNode *iface) }
static const NodeImplVtbl HTMLTitleElementImplVtbl = { - &CLSID_HTMLTitleElement, - HTMLTitleElement_QI, - HTMLTitleElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col + .clsid = &CLSID_HTMLTitleElement, + .qi = HTMLTitleElement_QI, + .destructor = HTMLTitleElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col };
static const tid_t HTMLTitleElement_iface_tids[] = { @@ -341,26 +341,14 @@ static BOOL HTMLHtmlElement_is_settable(HTMLDOMNode *iface, DISPID dispid) }
static const NodeImplVtbl HTMLHtmlElementImplVtbl = { - &CLSID_HTMLHtmlElement, - HTMLHtmlElement_QI, - HTMLHtmlElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - HTMLHtmlElement_is_settable + .clsid = &CLSID_HTMLHtmlElement, + .qi = HTMLHtmlElement_QI, + .destructor = HTMLHtmlElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col, + .is_settable = HTMLHtmlElement_is_settable };
static const tid_t HTMLHtmlElement_iface_tids[] = { @@ -590,13 +578,13 @@ static void HTMLMetaElement_destructor(HTMLDOMNode *iface) }
static const NodeImplVtbl HTMLMetaElementImplVtbl = { - &CLSID_HTMLMetaElement, - HTMLMetaElement_QI, - HTMLMetaElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col + .clsid = &CLSID_HTMLMetaElement, + .qi = HTMLMetaElement_QI, + .destructor = HTMLMetaElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col };
static const tid_t HTMLMetaElement_iface_tids[] = { @@ -755,13 +743,13 @@ static void HTMLHeadElement_destructor(HTMLDOMNode *iface) }
static const NodeImplVtbl HTMLHeadElementImplVtbl = { - &CLSID_HTMLHeadElement, - HTMLHeadElement_QI, - HTMLHeadElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col + .clsid = &CLSID_HTMLHeadElement, + .qi = HTMLHeadElement_QI, + .destructor = HTMLHeadElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col };
static const tid_t HTMLHeadElement_iface_tids[] = { diff --git a/dlls/mshtml/htmlimg.c b/dlls/mshtml/htmlimg.c index 746e1622af8..5486243eb08 100644 --- a/dlls/mshtml/htmlimg.c +++ b/dlls/mshtml/htmlimg.c @@ -697,24 +697,16 @@ static void HTMLImgElement_unlink(HTMLDOMNode *iface) }
static const NodeImplVtbl HTMLImgElementImplVtbl = { - &CLSID_HTMLImg, - HTMLImgElement_QI, - HTMLElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col, - NULL, - NULL, - NULL, - NULL, - HTMLImgElement_get_readystate, - NULL, - NULL, - NULL, - NULL, - HTMLImgElement_traverse, - HTMLImgElement_unlink + .clsid = &CLSID_HTMLImg, + .qi = HTMLImgElement_QI, + .destructor = HTMLElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col, + .get_readystate = HTMLImgElement_get_readystate, + .traverse = HTMLImgElement_traverse, + .unlink = HTMLImgElement_unlink };
static const tid_t HTMLImgElement_iface_tids[] = { diff --git a/dlls/mshtml/htmlinput.c b/dlls/mshtml/htmlinput.c index 68bdc62e0c7..d71e5e0a5d5 100644 --- a/dlls/mshtml/htmlinput.c +++ b/dlls/mshtml/htmlinput.c @@ -1421,25 +1421,18 @@ static void HTMLInputElement_unlink(HTMLDOMNode *iface) }
static const NodeImplVtbl HTMLInputElementImplVtbl = { - &CLSID_HTMLInputElement, - HTMLInputElement_QI, - HTMLElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col, - NULL, - HTMLInputElementImpl_put_disabled, - HTMLInputElementImpl_get_disabled, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - HTMLInputElement_traverse, - HTMLInputElement_unlink, - HTMLInputElement_is_text_edit + .clsid = &CLSID_HTMLInputElement, + .qi = HTMLInputElement_QI, + .destructor = HTMLElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col, + .put_disabled = HTMLInputElementImpl_put_disabled, + .get_disabled = HTMLInputElementImpl_get_disabled, + .traverse = HTMLInputElement_traverse, + .unlink = HTMLInputElement_unlink, + .is_text_edit = HTMLInputElement_is_text_edit };
static const tid_t HTMLInputElement_iface_tids[] = { @@ -1630,13 +1623,13 @@ static HRESULT HTMLLabelElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv) }
static const NodeImplVtbl HTMLLabelElementImplVtbl = { - &CLSID_HTMLLabelElement, - HTMLLabelElement_QI, - HTMLElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col, + .clsid = &CLSID_HTMLLabelElement, + .qi = HTMLLabelElement_QI, + .destructor = HTMLElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col, };
static const tid_t HTMLLabelElement_iface_tids[] = { @@ -1960,25 +1953,18 @@ static void HTMLButtonElement_unlink(HTMLDOMNode *iface) }
static const NodeImplVtbl HTMLButtonElementImplVtbl = { - &CLSID_HTMLButtonElement, - HTMLButtonElement_QI, - HTMLElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col, - NULL, - HTMLButtonElementImpl_put_disabled, - HTMLButtonElementImpl_get_disabled, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - HTMLButtonElement_traverse, - HTMLButtonElement_unlink, - HTMLButtonElement_is_text_edit + .clsid = &CLSID_HTMLButtonElement, + .qi = HTMLButtonElement_QI, + .destructor = HTMLElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col, + .put_disabled = HTMLButtonElementImpl_put_disabled, + .get_disabled = HTMLButtonElementImpl_get_disabled, + .traverse = HTMLButtonElement_traverse, + .unlink = HTMLButtonElement_unlink, + .is_text_edit = HTMLButtonElement_is_text_edit };
static const tid_t HTMLButtonElement_iface_tids[] = { diff --git a/dlls/mshtml/htmllink.c b/dlls/mshtml/htmllink.c index 6d15d9ee7ba..a13024f61cc 100644 --- a/dlls/mshtml/htmllink.c +++ b/dlls/mshtml/htmllink.c @@ -415,24 +415,17 @@ static void HTMLLinkElement_unlink(HTMLDOMNode *iface) unlink_ref(&This->nslink); } static const NodeImplVtbl HTMLLinkElementImplVtbl = { - &CLSID_HTMLLinkElement, - HTMLLinkElement_QI, - HTMLElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col, - NULL, - HTMLLinkElementImpl_put_disabled, - HTMLLinkElementImpl_get_disabled, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - HTMLLinkElement_traverse, - HTMLLinkElement_unlink + .clsid = &CLSID_HTMLLinkElement, + .qi = HTMLLinkElement_QI, + .destructor = HTMLElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col, + .put_disabled = HTMLLinkElementImpl_put_disabled, + .get_disabled = HTMLLinkElementImpl_get_disabled, + .traverse = HTMLLinkElement_traverse, + .unlink = HTMLLinkElement_unlink };
static const tid_t HTMLLinkElement_iface_tids[] = { diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index 9fa0b657100..03abc97b2de 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -1476,11 +1476,10 @@ void HTMLDOMNode_init_dispex_info(dispex_data_t *info, compat_mode_t mode) static const cpc_entry_t HTMLDOMNode_cpc[] = {{NULL}};
static const NodeImplVtbl HTMLDOMNodeImplVtbl = { - NULL, - HTMLDOMNode_QI, - HTMLDOMNode_destructor, - HTMLDOMNode_cpc, - HTMLDOMNode_clone + .qi = HTMLDOMNode_QI, + .destructor = HTMLDOMNode_destructor, + .cpc_entries = HTMLDOMNode_cpc, + .clone = HTMLDOMNode_clone };
void HTMLDOMNode_Init(HTMLDocumentNode *doc, HTMLDOMNode *node, nsIDOMNode *nsnode, dispex_static_data_t *dispex_data) diff --git a/dlls/mshtml/htmlobject.c b/dlls/mshtml/htmlobject.c index 23858d39fbd..5d5e5e9ec33 100644 --- a/dlls/mshtml/htmlobject.c +++ b/dlls/mshtml/htmlobject.c @@ -744,24 +744,19 @@ static void HTMLObjectElement_unlink(HTMLDOMNode *iface) }
static const NodeImplVtbl HTMLObjectElementImplVtbl = { - &CLSID_HTMLObjectElement, - HTMLObjectElement_QI, - HTMLObjectElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col, - NULL, - NULL, - NULL, - NULL, - HTMLObjectElement_get_readystate, - HTMLObjectElement_get_dispid, - HTMLObjectElement_dispex_get_name, - HTMLObjectElement_invoke, - NULL, - HTMLObjectElement_traverse, - HTMLObjectElement_unlink + .clsid = &CLSID_HTMLObjectElement, + .qi = HTMLObjectElement_QI, + .destructor = HTMLObjectElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col, + .get_readystate = HTMLObjectElement_get_readystate, + .get_dispid = HTMLObjectElement_get_dispid, + .get_name = HTMLObjectElement_dispex_get_name, + .invoke = HTMLObjectElement_invoke, + .traverse = HTMLObjectElement_traverse, + .unlink = HTMLObjectElement_unlink };
static const tid_t HTMLObjectElement_iface_tids[] = { @@ -1019,13 +1014,13 @@ static void HTMLEmbedElement_destructor(HTMLDOMNode *iface) }
static const NodeImplVtbl HTMLEmbedElementImplVtbl = { - &CLSID_HTMLEmbed, - HTMLEmbedElement_QI, - HTMLEmbedElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col + .clsid = &CLSID_HTMLEmbed, + .qi = HTMLEmbedElement_QI, + .destructor = HTMLEmbedElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col };
static const tid_t HTMLEmbedElement_iface_tids[] = { diff --git a/dlls/mshtml/htmlscript.c b/dlls/mshtml/htmlscript.c index 6ce48362d96..7a9655150f8 100644 --- a/dlls/mshtml/htmlscript.c +++ b/dlls/mshtml/htmlscript.c @@ -427,24 +427,17 @@ static void HTMLScriptElement_unlink(HTMLDOMNode *iface) }
static const NodeImplVtbl HTMLScriptElementImplVtbl = { - &CLSID_HTMLScriptElement, - HTMLScriptElement_QI, - HTMLScriptElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col, - NULL, - NULL, - NULL, - NULL, - HTMLScriptElement_get_readystate, - NULL, - NULL, - NULL, - HTMLScriptElement_bind_to_tree, - HTMLScriptElement_traverse, - HTMLScriptElement_unlink + .clsid = &CLSID_HTMLScriptElement, + .qi = HTMLScriptElement_QI, + .destructor = HTMLScriptElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLElement_handle_event, + .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 };
HRESULT script_elem_from_nsscript(nsIDOMHTMLScriptElement *nsscript, HTMLScriptElement **ret) diff --git a/dlls/mshtml/htmlselect.c b/dlls/mshtml/htmlselect.c index f03a2e4d8a0..38f0b0fed9a 100644 --- a/dlls/mshtml/htmlselect.c +++ b/dlls/mshtml/htmlselect.c @@ -386,24 +386,15 @@ static void HTMLOptionElement_unlink(HTMLDOMNode *iface) }
static const NodeImplVtbl HTMLOptionElementImplVtbl = { - &CLSID_HTMLOptionElement, - HTMLOptionElement_QI, - HTMLElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - HTMLOptionElement_traverse, - HTMLOptionElement_unlink + .clsid = &CLSID_HTMLOptionElement, + .qi = HTMLOptionElement_QI, + .destructor = HTMLElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col, + .traverse = HTMLOptionElement_traverse, + .unlink = HTMLOptionElement_unlink };
static const tid_t HTMLOptionElement_iface_tids[] = { @@ -1458,24 +1449,20 @@ static void HTMLSelectElement_unlink(HTMLDOMNode *iface) }
static const NodeImplVtbl HTMLSelectElementImplVtbl = { - &CLSID_HTMLSelectElement, - HTMLSelectElement_QI, - HTMLElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col, - NULL, - HTMLSelectElementImpl_put_disabled, - HTMLSelectElementImpl_get_disabled, - NULL, - NULL, - HTMLSelectElement_get_dispid, - HTMLSelectElement_dispex_get_name, - HTMLSelectElement_invoke, - NULL, - HTMLSelectElement_traverse, - HTMLSelectElement_unlink + .clsid = &CLSID_HTMLSelectElement, + .qi = HTMLSelectElement_QI, + .destructor = HTMLElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col, + .put_disabled = HTMLSelectElementImpl_put_disabled, + .get_disabled = HTMLSelectElementImpl_get_disabled, + .get_dispid = HTMLSelectElement_get_dispid, + .get_name = HTMLSelectElement_dispex_get_name, + .invoke = HTMLSelectElement_invoke, + .traverse = HTMLSelectElement_traverse, + .unlink = HTMLSelectElement_unlink };
static const tid_t HTMLSelectElement_tids[] = { diff --git a/dlls/mshtml/htmlstyleelem.c b/dlls/mshtml/htmlstyleelem.c index ce13fc815ba..7f6eeb0132b 100644 --- a/dlls/mshtml/htmlstyleelem.c +++ b/dlls/mshtml/htmlstyleelem.c @@ -429,24 +429,15 @@ static void HTMLStyleElement_init_dispex_info(dispex_data_t *info, compat_mode_t }
static const NodeImplVtbl HTMLStyleElementImplVtbl = { - &CLSID_HTMLStyleElement, - HTMLStyleElement_QI, - HTMLStyleElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - HTMLStyleElement_traverse, - HTMLStyleElement_unlink + .clsid = &CLSID_HTMLStyleElement, + .qi = HTMLStyleElement_QI, + .destructor = HTMLStyleElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col, + .traverse = HTMLStyleElement_traverse, + .unlink = HTMLStyleElement_unlink };
static const tid_t HTMLStyleElement_iface_tids[] = { diff --git a/dlls/mshtml/htmltable.c b/dlls/mshtml/htmltable.c index a4b2b1f3621..7f4c4fafb0e 100644 --- a/dlls/mshtml/htmltable.c +++ b/dlls/mshtml/htmltable.c @@ -489,24 +489,15 @@ static void HTMLTableCell_unlink(HTMLDOMNode *iface) }
static const NodeImplVtbl HTMLTableCellImplVtbl = { - &CLSID_HTMLTableCell, - HTMLTableCell_QI, - HTMLTableCell_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - HTMLTableCell_traverse, - HTMLTableCell_unlink + .clsid = &CLSID_HTMLTableCell, + .qi = HTMLTableCell_QI, + .destructor = HTMLTableCell_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col, + .traverse = HTMLTableCell_traverse, + .unlink = HTMLTableCell_unlink };
static const tid_t HTMLTableCell_iface_tids[] = { @@ -929,24 +920,15 @@ static void HTMLTableRow_unlink(HTMLDOMNode *iface) }
static const NodeImplVtbl HTMLTableRowImplVtbl = { - &CLSID_HTMLTableRow, - HTMLTableRow_QI, - HTMLElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - HTMLTableRow_traverse, - HTMLTableRow_unlink + .clsid = &CLSID_HTMLTableRow, + .qi = HTMLTableRow_QI, + .destructor = HTMLElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col, + .traverse = HTMLTableRow_traverse, + .unlink = HTMLTableRow_unlink };
static const tid_t HTMLTableRow_iface_tids[] = { @@ -1955,24 +1937,15 @@ static const cpc_entry_t HTMLTable_cpc[] = { };
static const NodeImplVtbl HTMLTableImplVtbl = { - &CLSID_HTMLTable, - HTMLTable_QI, - HTMLElement_destructor, - HTMLTable_cpc, - HTMLElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - HTMLTable_traverse, - HTMLTable_unlink + .clsid = &CLSID_HTMLTable, + .qi = HTMLTable_QI, + .destructor = HTMLElement_destructor, + .cpc_entries = HTMLTable_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col, + .traverse = HTMLTable_traverse, + .unlink = HTMLTable_unlink };
static const tid_t HTMLTable_iface_tids[] = { diff --git a/dlls/mshtml/htmltextarea.c b/dlls/mshtml/htmltextarea.c index 47be8be4281..472f2814ae4 100644 --- a/dlls/mshtml/htmltextarea.c +++ b/dlls/mshtml/htmltextarea.c @@ -447,25 +447,18 @@ static void HTMLTextAreaElement_unlink(HTMLDOMNode *iface) }
static const NodeImplVtbl HTMLTextAreaElementImplVtbl = { - &CLSID_HTMLTextAreaElement, - HTMLTextAreaElement_QI, - HTMLElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - HTMLElement_handle_event, - HTMLElement_get_attr_col, - NULL, - HTMLTextAreaElementImpl_put_disabled, - HTMLTextAreaElementImpl_get_disabled, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - HTMLTextAreaElement_traverse, - HTMLTextAreaElement_unlink, - HTMLTextAreaElement_is_text_edit + .clsid = &CLSID_HTMLTextAreaElement, + .qi = HTMLTextAreaElement_QI, + .destructor = HTMLElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .handle_event = HTMLElement_handle_event, + .get_attr_col = HTMLElement_get_attr_col, + .put_disabled = HTMLTextAreaElementImpl_put_disabled, + .get_disabled = HTMLTextAreaElementImpl_get_disabled, + .traverse = HTMLTextAreaElement_traverse, + .unlink = HTMLTextAreaElement_unlink, + .is_text_edit = HTMLTextAreaElement_is_text_edit };
static const tid_t HTMLTextAreaElement_iface_tids[] = { diff --git a/dlls/mshtml/htmltextnode.c b/dlls/mshtml/htmltextnode.c index af3f57044b8..55b00fb4670 100644 --- a/dlls/mshtml/htmltextnode.c +++ b/dlls/mshtml/htmltextnode.c @@ -351,11 +351,10 @@ static HRESULT HTMLDOMTextNode_clone(HTMLDOMNode *iface, nsIDOMNode *nsnode, HTM static const cpc_entry_t HTMLDOMTextNode_cpc[] = {{NULL}};
static const NodeImplVtbl HTMLDOMTextNodeImplVtbl = { - NULL, - HTMLDOMTextNode_QI, - HTMLDOMNode_destructor, - HTMLDOMTextNode_cpc, - HTMLDOMTextNode_clone + .qi = HTMLDOMTextNode_QI, + .destructor = HTMLDOMNode_destructor, + .cpc_entries = HTMLDOMTextNode_cpc, + .clone = HTMLDOMTextNode_clone };
static const tid_t HTMLDOMTextNode_iface_tids[] = { diff --git a/dlls/mshtml/svg.c b/dlls/mshtml/svg.c index b03ad073244..5fb83fd3597 100644 --- a/dlls/mshtml/svg.c +++ b/dlls/mshtml/svg.c @@ -193,13 +193,12 @@ static HRESULT SVGElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv) }
static const NodeImplVtbl SVGElementImplVtbl = { - &CLSID_SVGElement, - SVGElement_QI, - HTMLElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - NULL, - HTMLElement_get_attr_col, + .clsid = &CLSID_SVGElement, + .qi = SVGElement_QI, + .destructor = HTMLElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .get_attr_col = HTMLElement_get_attr_col, };
static void init_svg_element(SVGElement *svg_element, HTMLDocumentNode *doc, nsIDOMSVGElement *nselem) @@ -734,13 +733,12 @@ static HRESULT SVGSVGElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv) }
static const NodeImplVtbl SVGSVGElementImplVtbl = { - &CLSID_SVGSVGElement, - SVGSVGElement_QI, - HTMLElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - NULL, - HTMLElement_get_attr_col, + .clsid = &CLSID_SVGSVGElement, + .qi = SVGSVGElement_QI, + .destructor = HTMLElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .get_attr_col = HTMLElement_get_attr_col, };
static HRESULT create_viewport_element(HTMLDocumentNode *doc, nsIDOMSVGElement *nselem, HTMLElement **elem) @@ -903,13 +901,12 @@ static HRESULT SVGCircleElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv) }
static const NodeImplVtbl SVGCircleElementImplVtbl = { - &CLSID_SVGCircleElement, - SVGCircleElement_QI, - HTMLElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - NULL, - HTMLElement_get_attr_col, + .clsid = &CLSID_SVGCircleElement, + .qi = SVGCircleElement_QI, + .destructor = HTMLElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .get_attr_col = HTMLElement_get_attr_col, };
static HRESULT create_circle_element(HTMLDocumentNode *doc, nsIDOMSVGElement *nselem, HTMLElement **elem) @@ -1147,13 +1144,12 @@ static HRESULT SVGTSpanElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv) }
static const NodeImplVtbl SVGTSpanElementImplVtbl = { - &CLSID_SVGTSpanElement, - SVGTSpanElement_QI, - HTMLElement_destructor, - HTMLElement_cpc, - HTMLElement_clone, - NULL, - HTMLElement_get_attr_col, + .clsid = &CLSID_SVGTSpanElement, + .qi = SVGTSpanElement_QI, + .destructor = HTMLElement_destructor, + .cpc_entries = HTMLElement_cpc, + .clone = HTMLElement_clone, + .get_attr_col = HTMLElement_get_attr_col, };
static HRESULT create_tspan_element(HTMLDocumentNode *doc, nsIDOMSVGElement *nselem, HTMLElement **elem)
From: Gabriel Ivăncescu gabrielopcode@gmail.com
The new dispex_query_interface will use the cycle collector later.
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/dispex.c | 4 ++-- dlls/mshtml/htmlattr.c | 2 +- dlls/mshtml/htmlelem.c | 10 +++++----- dlls/mshtml/htmlelemcol.c | 2 +- dlls/mshtml/htmlevent.c | 6 +++--- dlls/mshtml/htmlimg.c | 2 +- dlls/mshtml/htmllocation.c | 2 +- dlls/mshtml/htmlnode.c | 2 +- dlls/mshtml/htmlselect.c | 2 +- dlls/mshtml/htmlstorage.c | 2 +- dlls/mshtml/htmlstyle.c | 2 +- dlls/mshtml/htmlstylesheet.c | 8 ++++---- dlls/mshtml/mshtml_private.h | 2 +- dlls/mshtml/mutation.c | 4 ++-- dlls/mshtml/omnavigator.c | 24 ++++++++++++------------ dlls/mshtml/range.c | 4 ++-- dlls/mshtml/selection.c | 2 +- dlls/mshtml/xmlhttprequest.c | 2 +- 18 files changed, 41 insertions(+), 41 deletions(-)
diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index 636c9f78d04..aa1708beb39 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -798,7 +798,7 @@ static HRESULT WINAPI Function_QueryInterface(IUnknown *iface, REFIID riid, void
if(IsEqualGUID(&IID_IUnknown, riid)) { *ppv = &This->IUnknown_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { *ppv = NULL; @@ -1969,7 +1969,7 @@ static IDispatchExVtbl DispatchExVtbl = { DispatchEx_GetNameSpaceParent };
-BOOL dispex_query_interface(DispatchEx *This, REFIID riid, void **ppv) +BOOL dispex_query_interface_no_cc(DispatchEx *This, REFIID riid, void **ppv) { if(IsEqualGUID(&IID_IDispatch, riid)) *ppv = &This->IDispatchEx_iface; diff --git a/dlls/mshtml/htmlattr.c b/dlls/mshtml/htmlattr.c index 862b23fd0e6..78db9857e2c 100644 --- a/dlls/mshtml/htmlattr.c +++ b/dlls/mshtml/htmlattr.c @@ -50,7 +50,7 @@ static HRESULT WINAPI HTMLDOMAttribute_QueryInterface(IHTMLDOMAttribute *iface, *ppv = &This->IHTMLDOMAttribute_iface; }else if(IsEqualGUID(&IID_IHTMLDOMAttribute2, riid)) { *ppv = &This->IHTMLDOMAttribute2_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { WARN("%s not supported\n", debugstr_mshtml_guid(riid)); diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 82b8791968a..e84dba83650 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -553,7 +553,7 @@ static HRESULT WINAPI HTMLRect_QueryInterface(IHTMLRect *iface, REFIID riid, voi *ppv = &This->IHTMLRect_iface; }else if (IsEqualGUID(&IID_IHTMLRect2, riid)) { *ppv = &This->IHTMLRect2_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { FIXME("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv); @@ -1055,7 +1055,7 @@ static HRESULT WINAPI HTMLRectCollection_QueryInterface(IHTMLRectCollection *ifa *ppv = &This->IHTMLRectCollection_iface; }else if(IsEqualGUID(&IID_IHTMLRectCollection, riid)) { *ppv = &This->IHTMLRectCollection_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { FIXME("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv); @@ -7390,7 +7390,7 @@ static HRESULT WINAPI token_list_QueryInterface(IWineDOMTokenList *iface, REFIID *ppv = &token_list->IWineDOMTokenList_iface; }else if(IsEqualGUID(&IID_IWineDOMTokenList, riid)) { *ppv = &token_list->IWineDOMTokenList_iface; - }else if(dispex_query_interface(&token_list->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&token_list->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { WARN("(%p)->(%s %p)\n", token_list, debugstr_mshtml_guid(riid), ppv); @@ -8097,7 +8097,7 @@ static HRESULT WINAPI HTMLFiltersCollection_QueryInterface(IHTMLFiltersCollectio }else if(IsEqualGUID(&IID_IHTMLFiltersCollection, riid)) { TRACE("(%p)->(IID_IHTMLFiltersCollection %p)\n", This, ppv); *ppv = &This->IHTMLFiltersCollection_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { *ppv = NULL; @@ -8554,7 +8554,7 @@ static HRESULT WINAPI HTMLAttributeCollection_QueryInterface(IHTMLAttributeColle *ppv = &This->IHTMLAttributeCollection2_iface; }else if(IsEqualGUID(&IID_IHTMLAttributeCollection3, riid)) { *ppv = &This->IHTMLAttributeCollection3_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { *ppv = NULL; diff --git a/dlls/mshtml/htmlelemcol.c b/dlls/mshtml/htmlelemcol.c index 852c21ad3bd..a9e489d2ca6 100644 --- a/dlls/mshtml/htmlelemcol.c +++ b/dlls/mshtml/htmlelemcol.c @@ -223,7 +223,7 @@ static HRESULT WINAPI HTMLElementCollection_QueryInterface(IHTMLElementCollectio *ppv = &This->IHTMLElementCollection_iface; }else if(IsEqualGUID(&IID_IHTMLElementCollection, riid)) { *ppv = &This->IHTMLElementCollection_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { *ppv = NULL; diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index c9290fdae60..b54cd4a5cda 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -356,7 +356,7 @@ static HRESULT WINAPI HTMLEventObj_QueryInterface(IHTMLEventObj *iface, REFIID r *ppv = &This->IHTMLEventObj_iface; }else if(IsEqualGUID(&IID_IHTMLEventObj, riid)) { *ppv = &This->IHTMLEventObj_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { *ppv = NULL; @@ -958,7 +958,7 @@ static HRESULT WINAPI DOMEvent_QueryInterface(IDOMEvent *iface, REFIID riid, voi *ppv = &This->IDOMEvent_iface; else if(IsEqualGUID(&IID_IDOMEvent, riid)) *ppv = &This->IDOMEvent_iface; - else if(dispex_query_interface(&This->dispex, riid, ppv)) + else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) return *ppv ? S_OK : E_NOINTERFACE; else if(!This->query_interface || !(*ppv = This->query_interface(This, riid))) { *ppv = NULL; @@ -4491,7 +4491,7 @@ HRESULT EventTarget_QI(EventTarget *event_target, REFIID riid, void **ppv) return S_OK; }
- if(dispex_query_interface(&event_target->dispex, riid, ppv)) + if(dispex_query_interface_no_cc(&event_target->dispex, riid, ppv)) return *ppv ? S_OK : E_NOINTERFACE;
WARN("(%p)->(%s %p)\n", event_target, debugstr_mshtml_guid(riid), ppv); diff --git a/dlls/mshtml/htmlimg.c b/dlls/mshtml/htmlimg.c index 5486243eb08..39959fd9552 100644 --- a/dlls/mshtml/htmlimg.c +++ b/dlls/mshtml/htmlimg.c @@ -771,7 +771,7 @@ static HRESULT WINAPI HTMLImageElementFactory_QueryInterface(IHTMLImageElementFa *ppv = &This->IHTMLImageElementFactory_iface; }else if(IsEqualGUID(&IID_IHTMLImageElementFactory, riid)) { *ppv = &This->IHTMLImageElementFactory_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { *ppv = NULL; diff --git a/dlls/mshtml/htmllocation.c b/dlls/mshtml/htmllocation.c index 1e340487f0b..02f503969db 100644 --- a/dlls/mshtml/htmllocation.c +++ b/dlls/mshtml/htmllocation.c @@ -78,7 +78,7 @@ static HRESULT WINAPI HTMLLocation_QueryInterface(IHTMLLocation *iface, REFIID r *ppv = NULL; FIXME("(%p)->(IID_IMarshal %p)\n", This, ppv); return E_NOINTERFACE; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { *ppv = NULL; diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index 03abc97b2de..ea6498e6904 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -210,7 +210,7 @@ static HRESULT WINAPI HTMLDOMChildrenCollection_QueryInterface(IHTMLDOMChildrenC *ppv = &This->IHTMLDOMChildrenCollection_iface; }else if(IsEqualGUID(&IID_IHTMLDOMChildrenCollection, riid)) { *ppv = &This->IHTMLDOMChildrenCollection_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { *ppv = NULL; diff --git a/dlls/mshtml/htmlselect.c b/dlls/mshtml/htmlselect.c index 38f0b0fed9a..9e5ee60c2b1 100644 --- a/dlls/mshtml/htmlselect.c +++ b/dlls/mshtml/htmlselect.c @@ -449,7 +449,7 @@ static HRESULT WINAPI HTMLOptionElementFactory_QueryInterface(IHTMLOptionElement *ppv = &This->IHTMLOptionElementFactory_iface; }else if(IsEqualGUID(&IID_IHTMLOptionElementFactory, riid)) { *ppv = &This->IHTMLOptionElementFactory_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { *ppv = NULL; diff --git a/dlls/mshtml/htmlstorage.c b/dlls/mshtml/htmlstorage.c index 6d321939296..b8c05788507 100644 --- a/dlls/mshtml/htmlstorage.c +++ b/dlls/mshtml/htmlstorage.c @@ -370,7 +370,7 @@ static HRESULT WINAPI HTMLStorage_QueryInterface(IHTMLStorage *iface, REFIID rii *ppv = &This->IHTMLStorage_iface; }else if(IsEqualGUID(&IID_IHTMLStorage, riid)) { *ppv = &This->IHTMLStorage_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { *ppv = NULL; diff --git a/dlls/mshtml/htmlstyle.c b/dlls/mshtml/htmlstyle.c index 25ce20ab815..dca910fd0f7 100644 --- a/dlls/mshtml/htmlstyle.c +++ b/dlls/mshtml/htmlstyle.c @@ -4743,7 +4743,7 @@ static HRESULT WINAPI HTMLCSSStyleDeclaration_QueryInterface(IHTMLCSSStyleDeclar *ppv = &This->IHTMLCSSStyleDeclaration_iface; }else if(IsEqualGUID(&IID_IHTMLCSSStyleDeclaration2, riid)) { *ppv = &This->IHTMLCSSStyleDeclaration2_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else if(!This->qi || !(*ppv = This->qi(This, riid))) { *ppv = NULL; diff --git a/dlls/mshtml/htmlstylesheet.c b/dlls/mshtml/htmlstylesheet.c index 4ee2da02d95..f2acf5add4d 100644 --- a/dlls/mshtml/htmlstylesheet.c +++ b/dlls/mshtml/htmlstylesheet.c @@ -93,7 +93,7 @@ static HRESULT WINAPI HTMLStyleSheetRule_QueryInterface(IHTMLStyleSheetRule *ifa *ppv = &This->IHTMLStyleSheetRule_iface; else if (IsEqualGUID(&IID_IHTMLStyleSheetRule, riid)) *ppv = &This->IHTMLStyleSheetRule_iface; - else if (dispex_query_interface(&This->dispex, riid, ppv)) + else if (dispex_query_interface_no_cc(&This->dispex, riid, ppv)) return *ppv ? S_OK : E_NOINTERFACE; else { @@ -279,7 +279,7 @@ static HRESULT WINAPI HTMLStyleSheetRulesCollection_QueryInterface(IHTMLStyleShe *ppv = &This->IHTMLStyleSheetRulesCollection_iface; }else if(IsEqualGUID(&IID_IHTMLStyleSheetRulesCollection, riid)) { *ppv = &This->IHTMLStyleSheetRulesCollection_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { *ppv = NULL; @@ -673,7 +673,7 @@ static HRESULT WINAPI HTMLStyleSheetsCollection_QueryInterface(IHTMLStyleSheetsC *ppv = &This->IHTMLStyleSheetsCollection_iface; }else if(IsEqualGUID(&IID_IHTMLStyleSheetsCollection, riid)) { *ppv = &This->IHTMLStyleSheetsCollection_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { *ppv = NULL; @@ -986,7 +986,7 @@ static HRESULT WINAPI HTMLStyleSheet_QueryInterface(IHTMLStyleSheet *iface, REFI *ppv = &This->IHTMLStyleSheet_iface; }else if(IsEqualGUID(&IID_IHTMLStyleSheet4, riid)) { *ppv = &This->IHTMLStyleSheet4_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { *ppv = NULL; diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 2a608efcfc6..d4ae83a3e4e 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -427,7 +427,7 @@ extern void (__cdecl *note_cc_edge)(nsISupports*,const char*,nsCycleCollectionTr
void init_dispatch(DispatchEx*,IUnknown*,dispex_static_data_t*,compat_mode_t); void release_dispex(DispatchEx*); -BOOL dispex_query_interface(DispatchEx*,REFIID,void**); +BOOL dispex_query_interface_no_cc(DispatchEx*,REFIID,void**); HRESULT change_type(VARIANT*,VARIANT*,VARTYPE,IServiceProvider*); HRESULT dispex_get_dprop_ref(DispatchEx*,const WCHAR*,BOOL,VARIANT**); HRESULT get_dispids(tid_t,DWORD*,DISPID**); diff --git a/dlls/mshtml/mutation.c b/dlls/mshtml/mutation.c index 098f0eb61ba..823c95b950a 100644 --- a/dlls/mshtml/mutation.c +++ b/dlls/mshtml/mutation.c @@ -1098,7 +1098,7 @@ static HRESULT WINAPI MutationObserver_QueryInterface(IWineMSHTMLMutationObserve
if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IWineMSHTMLMutationObserver, riid)) { *ppv = &This->IWineMSHTMLMutationObserver_iface; - } else if(dispex_query_interface(&This->dispex, riid, ppv)) { + } else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; } else { WARN("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv); @@ -1293,7 +1293,7 @@ static HRESULT WINAPI mutation_observer_ctor_QueryInterface(IUnknown *iface, REF
if(IsEqualGUID(&IID_IUnknown, riid)) { *ppv = &This->IUnknown_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { WARN("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv); diff --git a/dlls/mshtml/omnavigator.c b/dlls/mshtml/omnavigator.c index e89f6b43271..646017aee9e 100644 --- a/dlls/mshtml/omnavigator.c +++ b/dlls/mshtml/omnavigator.c @@ -70,7 +70,7 @@ static HRESULT WINAPI HTMLDOMImplementation_QueryInterface(IHTMLDOMImplementatio *ppv = &This->IHTMLDOMImplementation_iface; }else if(IsEqualGUID(&IID_IHTMLDOMImplementation2, riid)) { *ppv = &This->IHTMLDOMImplementation2_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid)); @@ -389,7 +389,7 @@ static HRESULT WINAPI HTMLScreen_QueryInterface(IHTMLScreen *iface, REFIID riid, *ppv = &This->IHTMLScreen_iface; }else if(IsEqualGUID(&IID_IHTMLScreen, riid)) { *ppv = &This->IHTMLScreen_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { *ppv = NULL; @@ -627,7 +627,7 @@ static HRESULT WINAPI OmHistory_QueryInterface(IOmHistory *iface, REFIID riid, v *ppv = &This->IOmHistory_iface; }else if(IsEqualGUID(&IID_IOmHistory, riid)) { *ppv = &This->IOmHistory_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid)); @@ -816,7 +816,7 @@ static HRESULT WINAPI HTMLPluginsCollection_QueryInterface(IHTMLPluginsCollectio *ppv = &This->IHTMLPluginsCollection_iface; }else if(IsEqualGUID(&IID_IHTMLPluginsCollection, riid)) { *ppv = &This->IHTMLPluginsCollection_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { *ppv = NULL; @@ -993,7 +993,7 @@ static HRESULT WINAPI HTMLMimeTypesCollection_QueryInterface(IHTMLMimeTypesColle *ppv = &This->IHTMLMimeTypesCollection_iface; }else if(IsEqualGUID(&IID_IHTMLMimeTypesCollection, riid)) { *ppv = &This->IHTMLMimeTypesCollection_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid)); @@ -1150,7 +1150,7 @@ static HRESULT WINAPI OmNavigator_QueryInterface(IOmNavigator *iface, REFIID rii *ppv = &This->IOmNavigator_iface; }else if(IsEqualGUID(&IID_IOmNavigator, riid)) { *ppv = &This->IOmNavigator_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid)); @@ -1599,7 +1599,7 @@ static HRESULT WINAPI HTMLPerformanceTiming_QueryInterface(IHTMLPerformanceTimin *ppv = &This->IHTMLPerformanceTiming_iface; }else if(IsEqualGUID(&IID_IHTMLPerformanceTiming, riid)) { *ppv = &This->IHTMLPerformanceTiming_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid)); @@ -2006,7 +2006,7 @@ static HRESULT WINAPI HTMLPerformanceNavigation_QueryInterface(IHTMLPerformanceN *ppv = &This->IHTMLPerformanceNavigation_iface; }else if(IsEqualGUID(&IID_IHTMLPerformanceNavigation, riid)) { *ppv = &This->IHTMLPerformanceNavigation_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid)); @@ -2188,7 +2188,7 @@ static HRESULT WINAPI HTMLPerformance_QueryInterface(IHTMLPerformance *iface, RE *ppv = &This->IHTMLPerformance_iface; }else if(IsEqualGUID(&IID_IHTMLPerformance, riid)) { *ppv = &This->IHTMLPerformance_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid)); @@ -2412,7 +2412,7 @@ static HRESULT WINAPI HTMLNamespaceCollection_QueryInterface(IHTMLNamespaceColle *ppv = &This->IHTMLNamespaceCollection_iface; }else if(IsEqualGUID(&IID_IHTMLNamespaceCollection, riid)) { *ppv = &This->IHTMLNamespaceCollection_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid)); @@ -2580,7 +2580,7 @@ static HRESULT WINAPI console_QueryInterface(IWineMSHTMLConsole *iface, REFIID r *ppv = &console->IWineMSHTMLConsole_iface; }else if(IsEqualGUID(&IID_IWineMSHTMLConsole, riid)) { *ppv = &console->IWineMSHTMLConsole_iface; - }else if(dispex_query_interface(&console->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&console->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { WARN("(%p)->(%s %p)\n", console, debugstr_mshtml_guid(riid), ppv); @@ -2865,7 +2865,7 @@ static HRESULT WINAPI media_query_list_QueryInterface(IWineMSHTMLMediaQueryList
if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IWineMSHTMLMediaQueryList, riid)) { *ppv = &media_query_list->IWineMSHTMLMediaQueryList_iface; - }else if(dispex_query_interface(&media_query_list->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&media_query_list->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { *ppv = NULL; diff --git a/dlls/mshtml/range.c b/dlls/mshtml/range.c index 904fa736327..3ac3fcb73a4 100644 --- a/dlls/mshtml/range.c +++ b/dlls/mshtml/range.c @@ -826,7 +826,7 @@ static HRESULT WINAPI HTMLTxtRange_QueryInterface(IHTMLTxtRange *iface, REFIID r *ppv = &This->IHTMLTxtRange_iface; }else if(IsEqualGUID(&IID_IOleCommandTarget, riid)) { *ppv = &This->IOleCommandTarget_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { *ppv = NULL; @@ -1790,7 +1790,7 @@ static HRESULT WINAPI HTMLDOMRange_QueryInterface(IHTMLDOMRange *iface, REFIID r *ppv = &This->IHTMLDOMRange_iface; }else if(IsEqualGUID(&IID_IHTMLDOMRange, riid)) { *ppv = &This->IHTMLDOMRange_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { *ppv = NULL; diff --git a/dlls/mshtml/selection.c b/dlls/mshtml/selection.c index e06fb9c81d5..ae53d83f642 100644 --- a/dlls/mshtml/selection.c +++ b/dlls/mshtml/selection.c @@ -64,7 +64,7 @@ static HRESULT WINAPI HTMLSelectionObject_QueryInterface(IHTMLSelectionObject *i *ppv = &This->IHTMLSelectionObject_iface; }else if(IsEqualGUID(&IID_IHTMLSelectionObject2, riid)) { *ppv = &This->IHTMLSelectionObject2_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { *ppv = NULL; diff --git a/dlls/mshtml/xmlhttprequest.c b/dlls/mshtml/xmlhttprequest.c index 3a24c5cea5b..c153d3cf827 100644 --- a/dlls/mshtml/xmlhttprequest.c +++ b/dlls/mshtml/xmlhttprequest.c @@ -1632,7 +1632,7 @@ static HRESULT WINAPI HTMLXMLHttpRequestFactory_QueryInterface(IHTMLXMLHttpReque *ppv = &This->IHTMLXMLHttpRequestFactory_iface; }else if(IsEqualGUID(&IID_IHTMLXMLHttpRequestFactory, riid)) { *ppv = &This->IHTMLXMLHttpRequestFactory_iface; - }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + }else if(dispex_query_interface_no_cc(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { *ppv = NULL;
Ok new version should just do more prep work and also convert nodes at the end to use the dispex CC instead. No other objects are done yet in this MR.
Note that I went with renamed versions of original helpers as I think it's cleaner, since eventually we'll get rid of them (when we have CC for every object), so this provides some progress indication rather than renaming them at the end.
From: Gabriel Ivăncescu gabrielopcode@gmail.com
The new EventTarget_QI will use the cycle collector later.
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlevent.c | 2 +- dlls/mshtml/htmlnode.c | 2 +- dlls/mshtml/htmlwindow.c | 4 ++-- dlls/mshtml/mshtml_private.h | 2 +- dlls/mshtml/xmlhttprequest.c | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index b54cd4a5cda..e224185a013 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -4478,7 +4478,7 @@ static HRESULT get_gecko_target(IEventTarget *target, nsIDOMEventTarget **ret) return S_OK; }
-HRESULT EventTarget_QI(EventTarget *event_target, REFIID riid, void **ppv) +HRESULT EventTarget_QI_no_cc(EventTarget *event_target, REFIID riid, void **ppv) { if(IsEqualGUID(riid, &IID_IEventTarget)) { if(use_event_quirks(event_target)) { diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index ea6498e6904..7a3b390100e 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -1444,7 +1444,7 @@ HRESULT HTMLDOMNode_QI(HTMLDOMNode *This, REFIID riid, void **ppv) *ppv = &This->IHTMLDOMNode_iface; return S_OK; }else { - return EventTarget_QI(&This->event_target, riid, ppv); + return EventTarget_QI_no_cc(&This->event_target, riid, ppv); }
IUnknown_AddRef((IUnknown*)*ppv); diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index 571b04d23c8..e6812d100af 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -214,7 +214,7 @@ static HRESULT WINAPI HTMLWindow2_QueryInterface(IHTMLWindow2 *iface, REFIID rii if(hres != S_FALSE) return hres;
- return EventTarget_QI(&This->event_target, riid, ppv); + return EventTarget_QI_no_cc(&This->event_target, riid, ppv); }
static ULONG WINAPI HTMLWindow2_AddRef(IHTMLWindow2 *iface) @@ -251,7 +251,7 @@ static HRESULT WINAPI outer_window_QueryInterface(IHTMLWindow2 *iface, REFIID ri if(hres != S_FALSE) return hres;
- return EventTarget_QI(&This->base.inner_window->event_target, riid, ppv); + return EventTarget_QI_no_cc(&This->base.inner_window->event_target, riid, ppv); }
static ULONG WINAPI outer_window_AddRef(IHTMLWindow2 *iface) diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index d4ae83a3e4e..96e0e9b7fa7 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1221,7 +1221,7 @@ void HTMLDOMNode_Init(HTMLDocumentNode*,HTMLDOMNode*,nsIDOMNode*,dispex_static_d void HTMLElement_Init(HTMLElement*,HTMLDocumentNode*,nsIDOMElement*,dispex_static_data_t*);
void EventTarget_Init(EventTarget*,IUnknown*,dispex_static_data_t*,compat_mode_t); -HRESULT EventTarget_QI(EventTarget*,REFIID,void**); +HRESULT EventTarget_QI_no_cc(EventTarget*,REFIID,void**); void EventTarget_init_dispex_info(dispex_data_t*,compat_mode_t);
HRESULT HTMLDOMNode_QI(HTMLDOMNode*,REFIID,void**); diff --git a/dlls/mshtml/xmlhttprequest.c b/dlls/mshtml/xmlhttprequest.c index c153d3cf827..33770faa1bf 100644 --- a/dlls/mshtml/xmlhttprequest.c +++ b/dlls/mshtml/xmlhttprequest.c @@ -526,7 +526,7 @@ static HRESULT WINAPI HTMLXMLHttpRequest_QueryInterface(IHTMLXMLHttpRequest *ifa }else if(IsEqualGUID(&IID_IProvideClassInfo2, riid)) { *ppv = &This->IProvideClassInfo2_iface; }else { - return EventTarget_QI(&This->event_target, riid, ppv); + return EventTarget_QI_no_cc(&This->event_target, riid, ppv); }
IUnknown_AddRef((IUnknown*)*ppv);
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/dispex.c | 1 + dlls/mshtml/htmlnode.c | 7 +++---- dlls/mshtml/mshtml_private.h | 14 ++++++-------- 3 files changed, 10 insertions(+), 12 deletions(-)
diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index aa1708beb39..0ff22dd5a77 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -2094,6 +2094,7 @@ void init_dispatch(DispatchEx *dispex, IUnknown *outer, dispex_static_data_t *da dispex->IDispatchEx_iface.lpVtbl = &DispatchExVtbl; dispex->outer = outer; dispex->dynamic_data = NULL; + ccref_init(&dispex->ccref, 1);
if(data->vtbl && data->vtbl->get_compat_mode) { /* delayed init */ diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index 7a3b390100e..0546ded5f4a 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -501,7 +501,7 @@ static ULONG WINAPI HTMLDOMNode_AddRef(IHTMLDOMNode *iface) HTMLDOMNode *This = impl_from_IHTMLDOMNode(iface); LONG ref;
- ref = ccref_incr(&This->ccref, (nsISupports*)&This->IHTMLDOMNode_iface); + ref = ccref_incr(&This->event_target.dispex.ccref, (nsISupports*)&This->IHTMLDOMNode_iface);
TRACE("(%p) ref=%ld\n", This, ref);
@@ -511,7 +511,7 @@ static ULONG WINAPI HTMLDOMNode_AddRef(IHTMLDOMNode *iface) static ULONG WINAPI HTMLDOMNode_Release(IHTMLDOMNode *iface) { HTMLDOMNode *This = impl_from_IHTMLDOMNode(iface); - LONG ref = ccref_decr(&This->ccref, (nsISupports*)&This->IHTMLDOMNode_iface, &node_ccp); + LONG ref = ccref_decr(&This->event_target.dispex.ccref, (nsISupports*)&This->IHTMLDOMNode_iface, &node_ccp);
TRACE("(%p) ref=%ld\n", This, ref);
@@ -1490,7 +1490,6 @@ void HTMLDOMNode_Init(HTMLDocumentNode *doc, HTMLDOMNode *node, nsIDOMNode *nsno node->IHTMLDOMNode2_iface.lpVtbl = &HTMLDOMNode2Vtbl; node->IHTMLDOMNode3_iface.lpVtbl = &HTMLDOMNode3Vtbl;
- ccref_init(&node->ccref, 1); EventTarget_Init(&node->event_target, (IUnknown*)&node->IHTMLDOMNode_iface, dispex_data, doc->document_mode);
if(&doc->node != node) @@ -1582,7 +1581,7 @@ static nsresult NSAPI HTMLDOMNode_traverse(void *ccp, void *p, nsCycleCollection
TRACE("%p\n", This);
- describe_cc_node(&This->ccref, "HTMLDOMNode", cb); + describe_cc_node(&This->event_target.dispex.ccref, "HTMLDOMNode", cb);
if(This->nsnode) note_cc_edge((nsISupports*)This->nsnode, "This->nsnode", cb); diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 96e0e9b7fa7..82f673e8486 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -337,6 +337,11 @@ typedef struct dispex_dynamic_data_t dispex_dynamic_data_t; #define MSHTML_CUSTOM_DISPID_CNT (MSHTML_DISPID_CUSTOM_MAX-MSHTML_DISPID_CUSTOM_MIN)
typedef struct DispatchEx DispatchEx; +typedef struct nsCycleCollectionTraversalCallback nsCycleCollectionTraversalCallback; + +typedef struct { + UINT_PTR x; +} nsCycleCollectingAutoRefCnt;
/* dispex is our base IDispatchEx implementation for all mshtml objects, and the vtbl allows @@ -393,23 +398,18 @@ struct DispatchEx { IDispatchEx IDispatchEx_iface;
IUnknown *outer; + nsCycleCollectingAutoRefCnt ccref;
dispex_data_t *info; dispex_dynamic_data_t *dynamic_data; };
-typedef struct { - UINT_PTR x; -} nsCycleCollectingAutoRefCnt; - typedef struct { void *vtbl; int ref_flags; void *callbacks; } ExternalCycleCollectionParticipant;
-typedef struct nsCycleCollectionTraversalCallback nsCycleCollectionTraversalCallback; - typedef struct { nsresult (NSAPI *traverse)(void*,void*,nsCycleCollectionTraversalCallback*); nsresult (NSAPI *unlink)(void*); @@ -851,8 +851,6 @@ struct HTMLDOMNode { IHTMLDOMNode3 IHTMLDOMNode3_iface; const NodeImplVtbl *vtbl;
- nsCycleCollectingAutoRefCnt ccref; - nsIDOMNode *nsnode; HTMLDocumentNode *doc; };
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/dispex.c | 70 ++++++++++++++++- dlls/mshtml/htmldoc.c | 15 ++-- dlls/mshtml/htmlelem.c | 5 +- dlls/mshtml/htmlevent.c | 21 +++++ dlls/mshtml/htmlnode.c | 144 +++++++++++++---------------------- dlls/mshtml/htmltextnode.c | 9 ++- dlls/mshtml/htmlwindow.c | 2 +- dlls/mshtml/mshtml_private.h | 27 +++++-- dlls/mshtml/nsembed.c | 2 +- 9 files changed, 180 insertions(+), 115 deletions(-)
diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index 0ff22dd5a77..237c61e89bf 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -33,6 +33,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
#define MAX_ARGS 16
+ExternalCycleCollectionParticipant dispex_ccp; + static CRITICAL_SECTION cs_dispex_static_data; static CRITICAL_SECTION_DEBUG cs_dispex_static_data_dbg = { @@ -1969,6 +1971,34 @@ static IDispatchExVtbl DispatchExVtbl = { DispatchEx_GetNameSpaceParent };
+BOOL dispex_query_interface(DispatchEx *This, REFIID riid, void **ppv) +{ + if(IsEqualGUID(&IID_IDispatch, riid)) + *ppv = &This->IDispatchEx_iface; + else if(IsEqualGUID(&IID_IDispatchEx, riid)) + *ppv = &This->IDispatchEx_iface; + else if(IsEqualGUID(&IID_nsXPCOMCycleCollectionParticipant, riid)) { + *ppv = &dispex_ccp; + return TRUE; + }else if(IsEqualGUID(&IID_nsCycleCollectionISupports, riid)) { + *ppv = &This->IDispatchEx_iface; + return TRUE; + }else if(IsEqualGUID(&IID_IDispatchJS, riid)) + *ppv = NULL; + else if(IsEqualGUID(&IID_UndocumentedScriptIface, riid)) + *ppv = NULL; + else if(IsEqualGUID(&IID_IMarshal, riid)) + *ppv = NULL; + else if(IsEqualGUID(&IID_IManagedObject, riid)) + *ppv = NULL; + else + return FALSE; + + if(*ppv) + IUnknown_AddRef((IUnknown*)*ppv); + return TRUE; +} + BOOL dispex_query_interface_no_cc(DispatchEx *This, REFIID riid, void **ppv) { if(IsEqualGUID(&IID_IDispatch, riid)) @@ -1991,12 +2021,15 @@ BOOL dispex_query_interface_no_cc(DispatchEx *This, REFIID riid, void **ppv) return TRUE; }
-void dispex_traverse(DispatchEx *This, nsCycleCollectionTraversalCallback *cb) +static nsresult NSAPI dispex_traverse(void *ccp, void *p, nsCycleCollectionTraversalCallback *cb) { + DispatchEx *This = impl_from_IDispatchEx(p); dynamic_prop_t *prop;
+ describe_cc_node(&This->ccref, This->info->desc->name, cb); + if(!This->dynamic_data) - return; + return NS_OK;
for(prop = This->dynamic_data->props; prop < This->dynamic_data->props + This->dynamic_data->prop_cnt; prop++) { if(V_VT(&prop->var) == VT_DISPATCH) @@ -2014,9 +2047,11 @@ void dispex_traverse(DispatchEx *This, nsCycleCollectionTraversalCallback *cb) note_cc_edge((nsISupports*)V_DISPATCH(&iter->val), "func_val", cb); } } + + return NS_OK; }
-void dispex_unlink(DispatchEx *This) +void dispex_props_unlink(DispatchEx *This) { dynamic_prop_t *prop;
@@ -2044,6 +2079,33 @@ void dispex_unlink(DispatchEx *This) } }
+static nsresult NSAPI dispex_unlink(void *p) +{ + DispatchEx *This = impl_from_IDispatchEx(p); + + if(This->info->desc->vtbl->unlink) + This->info->desc->vtbl->unlink(This); + + dispex_props_unlink(This); + return NS_OK; +} + +static void NSAPI dispex_delete_cycle_collectable(void *p) +{ + DispatchEx *This = impl_from_IDispatchEx(p); + release_dispex(This); +} + +void init_dispex_cc(void) +{ + static const CCObjCallback dispex_ccp_callback = { + dispex_traverse, + dispex_unlink, + dispex_delete_cycle_collectable + }; + ccp_init(&dispex_ccp, &dispex_ccp_callback); +} + const void *dispex_get_vtbl(DispatchEx *dispex) { return dispex->info->desc->vtbl; @@ -2083,7 +2145,7 @@ void release_dispex(DispatchEx *This) free(This->dynamic_data);
destructor: - if(This->info->desc->vtbl && This->info->desc->vtbl->destructor) + if(This->info->desc->vtbl) This->info->desc->vtbl->destructor(This); }
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index 79f17a626af..b28c9cfab50 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -308,13 +308,6 @@ static HRESULT DocumentType_QI(HTMLDOMNode *iface, REFIID riid, void **ppv) return S_OK; }
-static void DocumentType_destructor(HTMLDOMNode *iface) -{ - DocumentType *This = DocumentType_from_HTMLDOMNode(iface); - - HTMLDOMNode_destructor(&This->node); -} - static HRESULT DocumentType_clone(HTMLDOMNode *iface, nsIDOMNode *nsnode, HTMLDOMNode **ret) { DocumentType *This = DocumentType_from_HTMLDOMNode(iface); @@ -326,7 +319,6 @@ static const cpc_entry_t DocumentType_cpc[] = {{NULL}};
static const NodeImplVtbl DocumentTypeImplVtbl = { .qi = DocumentType_QI, - .destructor = DocumentType_destructor, .cpc_entries = DocumentType_cpc, .clone = DocumentType_clone }; @@ -366,7 +358,9 @@ static IHTMLEventObj *DocumentType_set_current_event(DispatchEx *dispex, IHTMLEv
static const event_target_vtbl_t DocumentType_event_target_vtbl = { { - NULL, + .destructor = HTMLDOMNode_destructor, + .traverse = HTMLDOMNode_traverse, + .unlink = HTMLDOMNode_unlink }, .get_gecko_target = DocumentType_get_gecko_target, .get_parent_event_target = DocumentType_get_parent_event_target, @@ -6070,6 +6064,9 @@ static HRESULT HTMLDocumentNode_location_hook(DispatchEx *dispex, WORD flags, DI
static const event_target_vtbl_t HTMLDocumentNode_event_target_vtbl = { { + .destructor = HTMLDOMNode_destructor, + .traverse = HTMLDOMNode_traverse, + .unlink = HTMLDOMNode_unlink, .get_name = HTMLDocumentNode_get_name, .invoke = HTMLDocumentNode_invoke, .next_dispid = HTMLDocumentNode_next_dispid, diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index e84dba83650..4b2e88b3ae5 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -6874,8 +6874,6 @@ void HTMLElement_destructor(HTMLDOMNode *iface) }
free(This->filter); - - HTMLDOMNode_destructor(&This->node); }
HRESULT HTMLElement_clone(HTMLDOMNode *iface, nsIDOMNode *nsnode, HTMLDOMNode **ret) @@ -7354,6 +7352,9 @@ static const tid_t HTMLElement_iface_tids[] = {
const event_target_vtbl_t HTMLElement_event_target_vtbl = { { + .destructor = HTMLDOMNode_destructor, + .traverse = HTMLDOMNode_traverse, + .unlink = HTMLDOMNode_unlink, .get_dispid = HTMLElement_get_dispid, .get_name = HTMLElement_get_name, .invoke = HTMLElement_invoke, diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index e224185a013..3b012980960 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -4478,6 +4478,27 @@ static HRESULT get_gecko_target(IEventTarget *target, nsIDOMEventTarget **ret) return S_OK; }
+HRESULT EventTarget_QI(EventTarget *event_target, REFIID riid, void **ppv) +{ + if(IsEqualGUID(riid, &IID_IEventTarget)) { + if(use_event_quirks(event_target)) { + WARN("IEventTarget queried, but not supported by in document mode\n"); + *ppv = NULL; + return E_NOINTERFACE; + } + IEventTarget_AddRef(&event_target->IEventTarget_iface); + *ppv = &event_target->IEventTarget_iface; + return S_OK; + } + + if(dispex_query_interface(&event_target->dispex, riid, ppv)) + return *ppv ? S_OK : E_NOINTERFACE; + + WARN("(%p)->(%s %p)\n", event_target, debugstr_mshtml_guid(riid), ppv); + *ppv = NULL; + return E_NOINTERFACE; +} + HRESULT EventTarget_QI_no_cc(EventTarget *event_target, REFIID riid, void **ppv) { if(IsEqualGUID(riid, &IID_IEventTarget)) { diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index 0546ded5f4a..192e9c5b685 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -35,8 +35,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml); static HTMLDOMNode *get_node_obj(IHTMLDOMNode*); static HRESULT create_node(HTMLDocumentNode*,nsIDOMNode*,HTMLDOMNode**);
-static ExternalCycleCollectionParticipant node_ccp; - typedef struct { DispatchEx dispex; IHTMLDOMChildrenCollection IHTMLDOMChildrenCollection_iface; @@ -499,9 +497,7 @@ static HRESULT WINAPI HTMLDOMNode_QueryInterface(IHTMLDOMNode *iface, static ULONG WINAPI HTMLDOMNode_AddRef(IHTMLDOMNode *iface) { HTMLDOMNode *This = impl_from_IHTMLDOMNode(iface); - LONG ref; - - ref = ccref_incr(&This->event_target.dispex.ccref, (nsISupports*)&This->IHTMLDOMNode_iface); + LONG ref = dispex_ref_incr(&This->event_target.dispex);
TRACE("(%p) ref=%ld\n", This, ref);
@@ -511,7 +507,7 @@ static ULONG WINAPI HTMLDOMNode_AddRef(IHTMLDOMNode *iface) static ULONG WINAPI HTMLDOMNode_Release(IHTMLDOMNode *iface) { HTMLDOMNode *This = impl_from_IHTMLDOMNode(iface); - LONG ref = ccref_decr(&This->event_target.dispex.ccref, (nsISupports*)&This->IHTMLDOMNode_iface, &node_ccp); + LONG ref = dispex_ref_decr(&This->event_target.dispex);
TRACE("(%p) ref=%ld\n", This, ref);
@@ -1423,6 +1419,49 @@ static const IHTMLDOMNode3Vtbl HTMLDOMNode3Vtbl = { HTMLDOMNode3_isSupported };
+static inline HTMLDOMNode *HTMLDOMNode_from_DispatchEx(DispatchEx *iface) +{ + return CONTAINING_RECORD(iface, HTMLDOMNode, event_target.dispex); +} + +void HTMLDOMNode_traverse(DispatchEx *dispex, nsCycleCollectionTraversalCallback *cb) +{ + HTMLDOMNode *This = HTMLDOMNode_from_DispatchEx(dispex); + + if(This->vtbl->traverse) + This->vtbl->traverse(This, cb); + if(This->nsnode) + note_cc_edge((nsISupports*)This->nsnode, "nsnode", cb); + if(This->doc && &This->doc->node != This) + note_cc_edge((nsISupports*)&This->doc->node.IHTMLDOMNode_iface, "doc", cb); +} + +void HTMLDOMNode_unlink(DispatchEx *dispex) +{ + HTMLDOMNode *This = HTMLDOMNode_from_DispatchEx(dispex); + + if(This->vtbl->unlink) + This->vtbl->unlink(This); + + unlink_ref(&This->nsnode); + + if(This->doc) { + HTMLDocumentNode *doc = This->doc; + This->doc = NULL; + if(&doc->node != This) + IHTMLDOMNode_Release(&doc->node.IHTMLDOMNode_iface); + } +} + +void HTMLDOMNode_destructor(DispatchEx *dispex) +{ + HTMLDOMNode *This = HTMLDOMNode_from_DispatchEx(dispex); + release_event_target(&This->event_target); + if(This->vtbl->destructor) + This->vtbl->destructor(This); + free(This); +} + HRESULT HTMLDOMNode_QI(HTMLDOMNode *This, REFIID riid, void **ppv) { TRACE("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv); @@ -1437,29 +1476,14 @@ HRESULT HTMLDOMNode_QI(HTMLDOMNode *This, REFIID riid, void **ppv) *ppv = &This->IHTMLDOMNode2_iface; }else if(IsEqualGUID(&IID_IHTMLDOMNode3, riid)) { *ppv = &This->IHTMLDOMNode3_iface; - }else if(IsEqualGUID(&IID_nsXPCOMCycleCollectionParticipant, riid)) { - *ppv = &node_ccp; - return S_OK; - }else if(IsEqualGUID(&IID_nsCycleCollectionISupports, riid)) { - *ppv = &This->IHTMLDOMNode_iface; - return S_OK; }else { - return EventTarget_QI_no_cc(&This->event_target, riid, ppv); + return EventTarget_QI(&This->event_target, riid, ppv); }
IUnknown_AddRef((IUnknown*)*ppv); return S_OK; }
-void HTMLDOMNode_destructor(HTMLDOMNode *This) -{ - release_event_target(&This->event_target); - if(This->nsnode) - nsIDOMNode_Release(This->nsnode); - if(This->doc && &This->doc->node != This) - IHTMLDOMNode_Release(&This->doc->node.IHTMLDOMNode_iface); -} - static HRESULT HTMLDOMNode_clone(HTMLDOMNode *This, nsIDOMNode *nsnode, HTMLDOMNode **ret) { return create_node(This->doc, nsnode, ret); @@ -1477,7 +1501,6 @@ static const cpc_entry_t HTMLDOMNode_cpc[] = {{NULL}};
static const NodeImplVtbl HTMLDOMNodeImplVtbl = { .qi = HTMLDOMNode_QI, - .destructor = HTMLDOMNode_destructor, .cpc_entries = HTMLDOMNode_cpc, .clone = HTMLDOMNode_clone }; @@ -1503,13 +1526,19 @@ void HTMLDOMNode_Init(HTMLDocumentNode *doc, HTMLDOMNode *node, nsIDOMNode *nsno assert(nsres == NS_OK); }
+static const dispex_static_data_vtbl_t HTMLDOMNode_dispex_vtbl = { + .destructor = HTMLDOMNode_destructor, + .traverse = HTMLDOMNode_traverse, + .unlink = HTMLDOMNode_unlink +}; + static const tid_t HTMLDOMNode_iface_tids[] = { IHTMLDOMNode_tid, 0 }; static dispex_static_data_t HTMLDOMNode_dispex = { "Node", - NULL, + &HTMLDOMNode_dispex_vtbl, IHTMLDOMNode_tid, HTMLDOMNode_iface_tids, HTMLDOMNode_init_dispex_info @@ -1575,73 +1604,6 @@ static HRESULT create_node(HTMLDocumentNode *doc, nsIDOMNode *nsnode, HTMLDOMNod return S_OK; }
-static nsresult NSAPI HTMLDOMNode_traverse(void *ccp, void *p, nsCycleCollectionTraversalCallback *cb) -{ - HTMLDOMNode *This = impl_from_IHTMLDOMNode(p); - - TRACE("%p\n", This); - - describe_cc_node(&This->event_target.dispex.ccref, "HTMLDOMNode", cb); - - if(This->nsnode) - note_cc_edge((nsISupports*)This->nsnode, "This->nsnode", cb); - if(This->doc && &This->doc->node != This) - note_cc_edge((nsISupports*)&This->doc->node.IHTMLDOMNode_iface, "This->doc", cb); - dispex_traverse(&This->event_target.dispex, cb); - - if(This->vtbl->traverse) - This->vtbl->traverse(This, cb); - - return NS_OK; -} - -static nsresult NSAPI HTMLDOMNode_unlink(void *p) -{ - HTMLDOMNode *This = impl_from_IHTMLDOMNode(p); - - TRACE("%p\n", This); - - if(This->vtbl->unlink) - This->vtbl->unlink(This); - - dispex_unlink(&This->event_target.dispex); - unlink_ref(&This->nsnode); - - if(This->doc && &This->doc->node != This) { - HTMLDocumentNode *doc = This->doc; - This->doc = NULL; - IHTMLDOMNode_Release(&doc->node.IHTMLDOMNode_iface); - }else { - This->doc = NULL; - } - - return NS_OK; -} - -static void NSAPI HTMLDOMNode_delete_cycle_collectable(void *p) -{ - HTMLDOMNode *This = impl_from_IHTMLDOMNode(p); - - TRACE("(%p)\n", This); - - if(This->vtbl->unlink) - This->vtbl->unlink(This); - This->vtbl->destructor(This); - release_dispex(&This->event_target.dispex); - free(This); -} - -void init_node_cc(void) -{ - static const CCObjCallback node_ccp_callback = { - HTMLDOMNode_traverse, - HTMLDOMNode_unlink, - HTMLDOMNode_delete_cycle_collectable - }; - - ccp_init(&node_ccp, &node_ccp_callback); -} - HRESULT get_node(nsIDOMNode *nsnode, BOOL create, HTMLDOMNode **ret) { nsIDOMDocument *dom_document; diff --git a/dlls/mshtml/htmltextnode.c b/dlls/mshtml/htmltextnode.c index 55b00fb4670..dd4d078f055 100644 --- a/dlls/mshtml/htmltextnode.c +++ b/dlls/mshtml/htmltextnode.c @@ -352,11 +352,16 @@ static const cpc_entry_t HTMLDOMTextNode_cpc[] = {{NULL}};
static const NodeImplVtbl HTMLDOMTextNodeImplVtbl = { .qi = HTMLDOMTextNode_QI, - .destructor = HTMLDOMNode_destructor, .cpc_entries = HTMLDOMTextNode_cpc, .clone = HTMLDOMTextNode_clone };
+static const dispex_static_data_vtbl_t HTMLDOMTextNode_dispex_vtbl = { + .destructor = HTMLDOMNode_destructor, + .traverse = HTMLDOMNode_traverse, + .unlink = HTMLDOMNode_unlink +}; + static const tid_t HTMLDOMTextNode_iface_tids[] = { IHTMLDOMNode_tid, IHTMLDOMNode2_tid, @@ -366,7 +371,7 @@ static const tid_t HTMLDOMTextNode_iface_tids[] = { }; static dispex_static_data_t HTMLDOMTextNode_dispex = { "Text", - NULL, + &HTMLDOMTextNode_dispex_vtbl, DispHTMLDOMTextNode_tid, HTMLDOMTextNode_iface_tids, HTMLDOMNode_init_dispex_info diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index e6812d100af..c1a258651cf 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -123,7 +123,7 @@ static void detach_inner_window(HTMLInnerWindow *window) detach_document_node(doc);
if(outer_window && outer_window->location.dispex.outer) - dispex_unlink(&outer_window->location.dispex); + dispex_props_unlink(&outer_window->location.dispex);
abort_window_bindings(window); remove_target_tasks(window->task_magic); diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 82f673e8486..63d07c872e3 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -352,8 +352,10 @@ typedef struct { - dynamic props: These props are generally allocated by external code (e.g. 'document.wine = 42' creates 'wine' dynamic prop on document) */ typedef struct { - /* Unlike delete_cycle_collectable, unlink is called before the destructor (if available). */ + /* Used to implement Cycle Collection callbacks; note that the destructor is not optional! + Unlike delete_cycle_collectable, unlink is called before the destructor (if available). */ void (*destructor)(DispatchEx*); + void (*traverse)(DispatchEx*,nsCycleCollectionTraversalCallback*); void (*unlink)(DispatchEx*);
/* Called when the object wants to handle DISPID_VALUE invocations */ @@ -425,16 +427,28 @@ extern void (__cdecl *ccp_init)(ExternalCycleCollectionParticipant*,const CCObjC extern void (__cdecl *describe_cc_node)(nsCycleCollectingAutoRefCnt*,const char*,nsCycleCollectionTraversalCallback*); extern void (__cdecl *note_cc_edge)(nsISupports*,const char*,nsCycleCollectionTraversalCallback*);
+extern ExternalCycleCollectionParticipant dispex_ccp; + +static inline LONG dispex_ref_incr(DispatchEx *dispex) +{ + return ccref_incr(&dispex->ccref, (nsISupports*)&dispex->IDispatchEx_iface); +} + +static inline LONG dispex_ref_decr(DispatchEx *dispex) +{ + return ccref_decr(&dispex->ccref, (nsISupports*)&dispex->IDispatchEx_iface, &dispex_ccp); +} + void init_dispatch(DispatchEx*,IUnknown*,dispex_static_data_t*,compat_mode_t); void release_dispex(DispatchEx*); +BOOL dispex_query_interface(DispatchEx*,REFIID,void**); BOOL dispex_query_interface_no_cc(DispatchEx*,REFIID,void**); +void dispex_props_unlink(DispatchEx*); HRESULT change_type(VARIANT*,VARIANT*,VARTYPE,IServiceProvider*); HRESULT dispex_get_dprop_ref(DispatchEx*,const WCHAR*,BOOL,VARIANT**); HRESULT get_dispids(tid_t,DWORD*,DISPID**); HRESULT remove_attribute(DispatchEx*,DISPID,VARIANT_BOOL*); HRESULT dispex_get_dynid(DispatchEx*,const WCHAR*,BOOL,DISPID*); -void dispex_traverse(DispatchEx*,nsCycleCollectionTraversalCallback*); -void dispex_unlink(DispatchEx*); void release_typelib(void); HRESULT get_class_typeinfo(const CLSID*,ITypeInfo**); const void *dispex_get_vtbl(DispatchEx*); @@ -1072,7 +1086,7 @@ BOOL is_gecko_path(const char*); void set_viewer_zoom(GeckoBrowser*,float); float get_viewer_zoom(GeckoBrowser*);
-void init_node_cc(void); +void init_dispex_cc(void);
HRESULT nsuri_to_url(LPCWSTR,BOOL,BSTR*);
@@ -1219,11 +1233,14 @@ void HTMLDOMNode_Init(HTMLDocumentNode*,HTMLDOMNode*,nsIDOMNode*,dispex_static_d void HTMLElement_Init(HTMLElement*,HTMLDocumentNode*,nsIDOMElement*,dispex_static_data_t*);
void EventTarget_Init(EventTarget*,IUnknown*,dispex_static_data_t*,compat_mode_t); +HRESULT EventTarget_QI(EventTarget*,REFIID,void**); HRESULT EventTarget_QI_no_cc(EventTarget*,REFIID,void**); void EventTarget_init_dispex_info(dispex_data_t*,compat_mode_t);
HRESULT HTMLDOMNode_QI(HTMLDOMNode*,REFIID,void**); -void HTMLDOMNode_destructor(HTMLDOMNode*); +void HTMLDOMNode_destructor(DispatchEx*); +void HTMLDOMNode_traverse(DispatchEx*,nsCycleCollectionTraversalCallback*); +void HTMLDOMNode_unlink(DispatchEx*); void HTMLDOMNode_init_dispex_info(dispex_data_t*,compat_mode_t);
HRESULT HTMLElement_QI(HTMLDOMNode*,REFIID,void**); diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c index 4154fa711f7..d2053235c03 100644 --- a/dlls/mshtml/nsembed.c +++ b/dlls/mshtml/nsembed.c @@ -596,7 +596,7 @@ static BOOL init_xpcom(const PRUnichar *gre_path) ERR("NS_GetComponentRegistrar failed: %08lx\n", nsres); }
- init_node_cc(); + init_dispex_cc();
return TRUE; }
From: Gabriel Ivăncescu gabrielopcode@gmail.com
The event target can participate in a cycle. Also since release_event_target can now potentially be called multiple times, we have to NULL the rb tree to make it re-entrant safe.
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlevent.c | 3 ++- dlls/mshtml/htmlnode.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index 3b012980960..9f3dbae81d7 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -4552,11 +4552,12 @@ void release_event_target(EventTarget *event_target) WINE_RB_FOR_EACH_ENTRY_DESTRUCTOR(iter, iter2, &event_target->handler_map, listener_container_t, entry) { while(!list_empty(&iter->listeners)) { event_listener_t *listener = LIST_ENTRY(list_head(&iter->listeners), event_listener_t, entry); + list_remove(&listener->entry); if(listener->function) IDispatch_Release(listener->function); - list_remove(&listener->entry); free(listener); } free(iter); } + rb_destroy(&event_target->handler_map, NULL, NULL); } diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index 192e9c5b685..893a1a738f7 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -1443,6 +1443,7 @@ void HTMLDOMNode_unlink(DispatchEx *dispex) if(This->vtbl->unlink) This->vtbl->unlink(This);
+ release_event_target(&This->event_target); unlink_ref(&This->nsnode);
if(This->doc) { @@ -1456,7 +1457,6 @@ void HTMLDOMNode_unlink(DispatchEx *dispex) void HTMLDOMNode_destructor(DispatchEx *dispex) { HTMLDOMNode *This = HTMLDOMNode_from_DispatchEx(dispex); - release_event_target(&This->event_target); if(This->vtbl->destructor) This->vtbl->destructor(This); free(This);
This merge request was approved by Jacek Caban.
On Tue Aug 15 20:38:27 2023 +0000, Gabriel Ivăncescu wrote:
Ok new version should just do more prep work and also convert nodes at the end to use the dispex CC instead. No other objects are done yet in this MR. Note that I went with renamed versions of original helpers as I think it's cleaner, since eventually we'll get rid of them (when we have CC for every object), so this provides some progress indication rather than renaming them at the end.
FWIW, I'm not sure if `dispex_query_interface` interface is a final thing, but that's not something we need to worry now. Note that once your conversion is done, we could just forward `AddRef` and `Release` to IDispatchEx like we do for all other IDispatch function. If we did the same to `QueryInterface`, similar to how `HTMLDOMNode` does it with its vtbl, we could even get rid of outer pointer from DispatchEx. (outer was needed for HTMLDocumentObj in the past, but it's no longer the case).
Anyway, those are just some thoughts for the future, I approved the MR.