-- v2: mshtml: Get rid of HTMLELEMENT_TIDS. mshtml: Add IHTMLDOMNode2 in every mode in node's init_dispex_info. mshtml: Move HTMLTableDataCellElement prototype props to the mshtml: Don't expose some props from elements in IE11 mode. mshtml: Don't expose some props from elements in IE10+ modes. mshtml: Don't expose expression methods from elements in IE9+ modes. mshtml: Don't expose onpage from elements in IE9+ modes. mshtml: Move normalize from HTMLElement to HTMLDOMNode in IE9+ modes. mshtml: Move hasAttributes from HTMLElement to HTMLDOMNode in IE9+ modes. mshtml: Move toString from HTMLElement to HTMLAnchorElement or HTMLAreaElement mshtml: Don't expose onmspointerhover from elements in IE11 mode. mshtml: Don't expose fireEvent from elements in IE11 mode. mshtml: Expose respective props from Element prototype.
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Instead of HTMLElement.
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/dispex.c | 28 +++++++++- dlls/mshtml/htmlelem.c | 93 +++++++++++++++++++++++++++++++ dlls/mshtml/mshtml_private.h | 1 + dlls/mshtml/tests/documentmode.js | 56 +++++++++++++++++++ 4 files changed, 175 insertions(+), 3 deletions(-)
diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index f0a69c8734c..823b7283d7a 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -438,7 +438,8 @@ static void add_func_info(dispex_data_t *data, tid_t tid, const FUNCDESC *desc, } }
-static HRESULT process_interface(dispex_data_t *data, tid_t tid, ITypeInfo *disp_typeinfo, const dispex_hook_t *hooks) +static HRESULT process_interface(dispex_data_t *data, tid_t tid, ITypeInfo *disp_typeinfo, const dispex_hook_t *hooks, + const DISPID *allow_list) { unsigned i = 7; /* skip IDispatch functions */ ITypeInfo *typeinfo; @@ -451,6 +452,7 @@ static HRESULT process_interface(dispex_data_t *data, tid_t tid, ITypeInfo *disp
while(1) { const dispex_hook_t *hook = NULL; + const DISPID *dispid = NULL;
hres = ITypeInfo_GetFuncDesc(typeinfo, i++, &funcdesc); if(FAILED(hres)) @@ -465,6 +467,17 @@ static HRESULT process_interface(dispex_data_t *data, tid_t tid, ITypeInfo *disp hook = NULL; }
+ if(allow_list) { + for(dispid = allow_list; *dispid != DISPID_UNKNOWN; dispid++) { + if(*dispid == funcdesc->memid) + break; + } + if(*dispid == DISPID_UNKNOWN) { + ITypeInfo_ReleaseFuncDesc(typeinfo, funcdesc); + continue; + } + } + if(!hook || hook->invoke || hook->name) { add_func_info(data, tid, funcdesc, disp_typeinfo ? disp_typeinfo : typeinfo, hook ? hook->invoke : NULL, hook ? hook->name : NULL); @@ -480,7 +493,16 @@ void dispex_info_add_interface(dispex_data_t *info, tid_t tid, const dispex_hook { HRESULT hres;
- hres = process_interface(info, tid, NULL, hooks); + hres = process_interface(info, tid, NULL, hooks, NULL); + if(FAILED(hres)) + ERR("process_interface failed: %08lx\n", hres); +} + +void dispex_info_add_dispids(dispex_data_t *info, tid_t tid, const DISPID *dispids) +{ + HRESULT hres; + + hres = process_interface(info, tid, NULL, NULL, dispids); if(FAILED(hres)) ERR("process_interface failed: %08lx\n", hres); } @@ -574,7 +596,7 @@ static dispex_data_t *preprocess_dispex_data(dispex_static_data_t *desc, compat_
if(desc->iface_tids) { for(tid = desc->iface_tids; *tid; tid++) { - hres = process_interface(data, *tid, dti, NULL); + hres = process_interface(data, *tid, dti, NULL, NULL); if(FAILED(hres)) break; } diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 72aeaae816e..117417b3e7c 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -7236,9 +7236,102 @@ static const IWineHTMLElementPrivateVtbl WineHTMLElementPrivateVtbl = { htmlelement_private_get_classList, };
+static void Element_init_dispex_info(dispex_data_t *info, compat_mode_t mode) +{ + static const DISPID elem_dispids[] = { + DISPID_IHTMLELEMENT_SETATTRIBUTE, + DISPID_IHTMLELEMENT_GETATTRIBUTE, + DISPID_IHTMLELEMENT_REMOVEATTRIBUTE, + DISPID_IHTMLELEMENT_TAGNAME, + DISPID_UNKNOWN + }; + static const DISPID elem2_dispids[] = { + DISPID_IHTMLELEMENT2_GETCLIENTRECTS, + DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT, + DISPID_IHTMLELEMENT2_CLIENTHEIGHT, + DISPID_IHTMLELEMENT2_CLIENTWIDTH, + DISPID_IHTMLELEMENT2_CLIENTTOP, + DISPID_IHTMLELEMENT2_CLIENTLEFT, + DISPID_IHTMLELEMENT2_SCROLLHEIGHT, + DISPID_IHTMLELEMENT2_SCROLLWIDTH, + DISPID_IHTMLELEMENT2_SCROLLTOP, + DISPID_IHTMLELEMENT2_SCROLLLEFT, + DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME, + DISPID_UNKNOWN + }; + static const DISPID elem3_pre_ie11_dispids[] = { + DISPID_IHTMLELEMENT3_FIREEVENT, + DISPID_UNKNOWN + }; + static const DISPID elem4_dispids[] = { + DISPID_IHTMLELEMENT4_GETATTRIBUTENODE, + DISPID_IHTMLELEMENT4_SETATTRIBUTENODE, + DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE, + DISPID_UNKNOWN + }; + static const DISPID elem6_dispids[] = { + DISPID_IHTMLELEMENT6_GETATTRIBUTENS, + DISPID_IHTMLELEMENT6_SETATTRIBUTENS, + DISPID_IHTMLELEMENT6_REMOVEATTRIBUTENS, + DISPID_IHTMLELEMENT6_GETATTRIBUTENODENS, + DISPID_IHTMLELEMENT6_SETATTRIBUTENODENS, + DISPID_IHTMLELEMENT6_HASATTRIBUTENS, + DISPID_IHTMLELEMENT6_IE9_GETATTRIBUTE, + DISPID_IHTMLELEMENT6_IE9_SETATTRIBUTE, + DISPID_IHTMLELEMENT6_IE9_REMOVEATTRIBUTE, + DISPID_IHTMLELEMENT6_IE9_GETATTRIBUTENODE, + DISPID_IHTMLELEMENT6_IE9_SETATTRIBUTENODE, + DISPID_IHTMLELEMENT6_IE9_REMOVEATTRIBUTENODE, + DISPID_IHTMLELEMENT6_IE9_HASATTRIBUTE, + DISPID_IHTMLELEMENT6_GETELEMENTSBYTAGNAMENS, + DISPID_IHTMLELEMENT6_IE9_TAGNAME, + DISPID_IHTMLELEMENT6_MSMATCHESSELECTOR, + DISPID_UNKNOWN + }; + static const DISPID elem7_dispids[] = { + DISPID_IHTMLELEMENT7_ONMSPOINTERDOWN, + DISPID_IHTMLELEMENT7_ONMSPOINTERMOVE, + DISPID_IHTMLELEMENT7_ONMSPOINTERUP, + DISPID_IHTMLELEMENT7_ONMSPOINTEROVER, + DISPID_IHTMLELEMENT7_ONMSPOINTEROUT, + DISPID_IHTMLELEMENT7_ONMSPOINTERCANCEL, + DISPID_IHTMLELEMENT7_ONMSLOSTPOINTERCAPTURE, + DISPID_IHTMLELEMENT7_ONMSGOTPOINTERCAPTURE, + DISPID_IHTMLELEMENT7_ONMSGESTURESTART, + DISPID_IHTMLELEMENT7_ONMSGESTURECHANGE, + DISPID_IHTMLELEMENT7_ONMSGESTUREEND, + DISPID_IHTMLELEMENT7_ONMSGESTUREHOLD, + DISPID_IHTMLELEMENT7_ONMSGESTURETAP, + DISPID_IHTMLELEMENT7_ONMSGESTUREDOUBLETAP, + DISPID_IHTMLELEMENT7_ONMSINERTIASTART, + DISPID_IHTMLELEMENT7_MSSETPOINTERCAPTURE, + DISPID_IHTMLELEMENT7_MSRELEASEPOINTERCAPTURE, + DISPID_UNKNOWN + }; + static const DISPID elem7_ie10_dispids[] = { + DISPID_IHTMLELEMENT7_ONMSPOINTERHOVER, + DISPID_UNKNOWN + }; + + dispex_info_add_dispids(info, IHTMLElement2_tid, elem2_dispids); + dispex_info_add_dispids(info, IHTMLElement6_tid, elem6_dispids); + if(mode >= COMPAT_MODE_IE10) { + dispex_info_add_dispids(info, IHTMLElement7_tid, elem7_dispids); + if(mode == COMPAT_MODE_IE10) + dispex_info_add_dispids(info, IHTMLElement7_tid, elem7_ie10_dispids); + } + if(mode <= COMPAT_MODE_IE10) + dispex_info_add_dispids(info, IHTMLElement3_tid, elem3_pre_ie11_dispids); + dispex_info_add_dispids(info, IHTMLElement_tid, elem_dispids); + dispex_info_add_dispids(info, IHTMLElement4_tid, elem4_dispids); + dispex_info_add_interface(info, IElementSelector_tid, NULL); + dispex_info_add_interface(info, IElementTraversal_tid, NULL); +} + dispex_static_data_t Element_dispex = { .id = PROT_Element, .prototype_id = PROT_Node, + .init_info = Element_init_dispex_info, };
dispex_static_data_t HTMLElement_dispex = { diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 881049c6cd3..9e2bdf38681 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -625,6 +625,7 @@ void release_typelib(void); HRESULT get_class_typeinfo(const CLSID*,ITypeInfo**); const void *dispex_get_vtbl(DispatchEx*); void dispex_info_add_interface(dispex_data_t*,tid_t,const dispex_hook_t*); +void dispex_info_add_dispids(dispex_data_t*,tid_t,const DISPID*); compat_mode_t dispex_compat_mode(DispatchEx*); HRESULT dispex_to_string(DispatchEx*,BSTR*); HRESULT dispex_call_builtin(DispatchEx *dispex, DISPID id, DISPPARAMS *dp, diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index 2cd4623f06e..2e3848349a1 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -3692,11 +3692,67 @@ sync_test("prototype props", function() { check(CSSStyleRule, [ "readOnly", "selectorText", "style" ]); check(CustomEvent, [ "detail", "initCustomEvent" ]); check(DocumentType, [ "entities", "internalSubset", "name", "notations", "publicId", "systemId" ]); + check(Element, [ + "childElementCount", "clientHeight", "clientLeft", "clientTop", "clientWidth", ["fireEvent",9,10], "firstElementChild", + "getAttribute", "getAttributeNS", "getAttributeNode", "getAttributeNodeNS", "getBoundingClientRect", "getClientRects", + "getElementsByTagName", "getElementsByTagNameNS", "hasAttribute", "hasAttributeNS", "lastElementChild", + ["msContentZoomFactor",10], ["msGetRegionContent",10], ["msGetUntransformedBounds",11], "msMatchesSelector", + ["msRegionOverflow",10], ["msReleasePointerCapture",10], ["msRequestFullscreen",11], ["msSetPointerCapture",10], + ["msZoomTo",11], "nextElementSibling", ["ongotpointercapture",11], ["onlostpointercapture",11], ["onmsgesturechange",10], + ["onmsgesturedoubletap",10], ["onmsgestureend",10], ["onmsgesturehold",10], ["onmsgesturestart",10], ["onmsgesturetap",10], + ["onmsgotpointercapture",10], ["onmsinertiastart",10], ["onmslostpointercapture",10], ["onmspointercancel",10], + ["onmspointerdown",10], ["onmspointerenter",11], ["onmspointerhover",10,10], ["onmspointerleave",11], ["onmspointermove",10], + ["onmspointerout",10], ["onmspointerover",10], ["onmspointerup",10], ["onpointercancel",11], ["onpointerdown",11], + ["onpointerenter",11], ["onpointerleave",11], ["onpointermove",11], ["onpointerout",11], ["onpointerover",11], + ["onpointerup",11], "previousElementSibling", "querySelector", "querySelectorAll", ["releasePointerCapture",11], + "removeAttribute", "removeAttributeNS", "removeAttributeNode", "scrollHeight", "scrollLeft", "scrollTop", "scrollWidth", + "setAttribute", "setAttributeNS", "setAttributeNode", "setAttributeNodeNS", ["setPointerCapture",11], "tagName" + ], [ + ["msContentZoomFactor",10], ["msGetRegionContent",10], ["msGetUntransformedBounds",11], ["msRegionOverflow",10], + ["msRequestFullscreen",11], ["msZoomTo",11], ["ongotpointercapture",11], ["onlostpointercapture",11], + ["onmspointerenter",11], ["onmspointerleave",11], ["onpointercancel",11], ["onpointerdown",11], ["onpointerenter",11], + ["onpointerleave",11], ["onpointermove",11], ["onpointerout",11], ["onpointerover",11], ["onpointerup",11], + ["releasePointerCapture",11], ["setPointerCapture",11] + ]); check(Event, [ "AT_TARGET", "BUBBLING_PHASE", "CAPTURING_PHASE", "bubbles", "cancelBubble", "cancelable", "currentTarget", "defaultPrevented", "eventPhase", "initEvent", "isTrusted", "preventDefault", "srcElement", "stopImmediatePropagation", "stopPropagation", "target", "timeStamp", "type" ], [ "AT_TARGET", "BUBBLING_PHASE", "CAPTURING_PHASE" ]); + check(HTMLElement, [ + "accessKey", ["addBehavior",9,10], ["addFilter",9,9], ["all",9,10], "applyElement", ["attachEvent",9,10], ["behaviorUrns",9,10], "blur", + "canHaveChildren", "canHaveHTML", "children", ["classList",10], "className", "clearAttributes", "click", "componentFromPoint", "contains", + "contentEditable", "createControlRange", "currentStyle", ["dataset",11], ["detachEvent",9,10], "dir", "disabled", ["doScroll",9,10], + ["document",9,9], "dragDrop", ["draggable",10], ["filters",9,9], "focus", "getAdjacentText", "getElementsByClassName", ["hidden",11], + "hideFocus", "id", "innerHTML", "innerText", "insertAdjacentElement", "insertAdjacentHTML", "insertAdjacentText", "isContentEditable", + "isDisabled", "isMultiLine", "isTextEdit", "lang", "language", "mergeAttributes", ["msGetInputContext",11], "offsetHeight", "offsetLeft", + "offsetParent", "offsetTop", "offsetWidth", "onabort", "onactivate", ["onafterupdate",9,10], "onbeforeactivate", "onbeforecopy", + "onbeforecut", "onbeforedeactivate", ["onbeforeeditfocus",9,10], "onbeforepaste", ["onbeforeupdate",9,10], "onblur", "oncanplay", + "oncanplaythrough", ["oncellchange",9,10], "onchange", "onclick", "oncontextmenu", ["oncontrolselect",9,10], "oncopy", ["oncuechange",10], + "oncut", ["ondataavailable",9,10], ["ondatasetchanged",9,10], ["ondatasetcomplete",9,10], "ondblclick", "ondeactivate", "ondrag", + "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", + ["onerrorupdate",9,10], ["onfilterchange",9,10], "onfocus", "onfocusin", "onfocusout", "onhelp", "oninput", "onkeydown", "onkeypress", + "onkeyup", ["onlayoutcomplete",9,10], "onload", "onloadeddata", "onloadedmetadata", "onloadstart", ["onlosecapture",9,10], + "onmousedown", "onmouseenter", "onmouseleave", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", ["onmove",9,10], + ["onmoveend",9,10], ["onmovestart",9,10], ["onmscontentzoom",10], ["onmsmanipulationstatechanged",10], "onpaste", "onpause", "onplay", + "onplaying", "onprogress", ["onpropertychange",9,10], "onratechange", ["onreadystatechange",9,10], "onreset", ["onresize",9,10], + ["onresizeend",9,10], ["onresizestart",9,10], ["onrowenter",9,10], ["onrowexit",9,10], ["onrowsdelete",9,10], ["onrowsinserted",9,10], + "onscroll", "onseeked", "onseeking", "onselect", "onselectstart", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", + "onwaiting", "outerHTML", "outerText", "parentElement", "parentTextEdit", ["readyState",9,10], "recordNumber", "releaseCapture", + ["removeBehavior",9,10], ["removeFilter",9,9], "removeNode", "replaceAdjacentText", "replaceNode", "runtimeStyle", ["scopeName",9,9], + "scrollIntoView", "setActive", "setCapture", "sourceIndex", ["spellcheck",10], "style", "swapNode", "tabIndex", ["tagUrn",9,9], "title", + "uniqueID", "uniqueNumber" + ], [ + ["addBehavior",11], ["addFilter",10], ["all",11], ["behaviorUrns",11], ["dataset",11], ["document",10], ["draggable",10], ["filters",10], + ["fireEvent",11], "getExpression", "hasAttributes", ["hidden",11], ["msGetInputContext",11], "normalize", ["onafterupdate",11], + ["onbeforeeditfocus",11], ["onbeforeupdate",11], ["oncellchange",11], ["oncontrolselect",11], ["ondataavailable",11], ["ondatasetchanged",11], + ["ondatasetcomplete",11], ["onerrorupdate",11], ["onfilterchange",11], ["oninvalid",10], ["onlayoutcomplete",11], ["onlosecapture",11], + ["onmove",11], ["onmoveend",11], ["onmovestart",11], ["onmsanimationend",10], ["onmsanimationiteration",10], ["onmsanimationstart",10], + ["onmscontentzoom",10], ["onmspointerhover",11], ["onmstransitionend",10], ["onmstransitionstart",10], "onpage", ["onpropertychange",11], + ["onreadystatechange",11], ["onresize",11], ["onresizeend",11], ["onresizestart",11], ["onrowenter",11], ["onrowexit",11], + ["onrowsdelete",11], ["onrowsinserted",11], ["removeBehavior",11], "removeExpression", ["removeFilter",10], ["scopeName",10], "setExpression", + ["tagUrn",10], "toString", ["xmsAcceleratorKey",10] + ]); check(HTMLUnknownElement, [ "namedRecordset", "recordset" ]); check(KeyboardEvent, [ "DOM_KEY_LOCATION_JOYSTICK", "DOM_KEY_LOCATION_LEFT", "DOM_KEY_LOCATION_MOBILE",
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlelem.c | 6 ++++++ dlls/mshtml/mshtml_private.h | 1 - dlls/mshtml/tests/documentmode.js | 4 ++-- 3 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 117417b3e7c..821cc96722b 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -6687,6 +6687,10 @@ void HTMLElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode) {DISPID_IHTMLELEMENT2_READYSTATE, NULL}, {DISPID_UNKNOWN} }; + static const dispex_hook_t elem3_ie11_hooks[] = { + {DISPID_IHTMLELEMENT3_FIREEVENT, NULL}, + {DISPID_UNKNOWN} + };
HTMLDOMNode_init_dispex_info(info, mode);
@@ -6705,6 +6709,8 @@ void HTMLElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode) dispex_info_add_interface(info, IHTMLElement7_tid, NULL); dispex_info_add_interface(info, IWineHTMLElementPrivate_tid, NULL); } + + dispex_info_add_interface(info, IHTMLElement3_tid, mode >= COMPAT_MODE_IE11 ? elem3_ie11_hooks : NULL); }
const tid_t HTMLElement_iface_tids[] = { diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 9e2bdf38681..cf0a08c5a83 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1060,7 +1060,6 @@ typedef struct { IHTMLDOMNode_tid, \ IHTMLDOMNode2_tid, \ IHTMLElement_tid, \ - IHTMLElement3_tid, \ IHTMLElement4_tid, \ IHTMLUniqueName_tid
diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index 2e3848349a1..ccad6a7672e 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -3744,8 +3744,8 @@ sync_test("prototype props", function() { "uniqueID", "uniqueNumber" ], [ ["addBehavior",11], ["addFilter",10], ["all",11], ["behaviorUrns",11], ["dataset",11], ["document",10], ["draggable",10], ["filters",10], - ["fireEvent",11], "getExpression", "hasAttributes", ["hidden",11], ["msGetInputContext",11], "normalize", ["onafterupdate",11], - ["onbeforeeditfocus",11], ["onbeforeupdate",11], ["oncellchange",11], ["oncontrolselect",11], ["ondataavailable",11], ["ondatasetchanged",11], + "getExpression", "hasAttributes", ["hidden",11], ["msGetInputContext",11], "normalize", ["onafterupdate",11], ["onbeforeeditfocus",11], + ["onbeforeupdate",11], ["oncellchange",11], ["oncontrolselect",11], ["ondataavailable",11], ["ondatasetchanged",11], ["ondatasetcomplete",11], ["onerrorupdate",11], ["onfilterchange",11], ["oninvalid",10], ["onlayoutcomplete",11], ["onlosecapture",11], ["onmove",11], ["onmoveend",11], ["onmovestart",11], ["onmsanimationend",10], ["onmsanimationiteration",10], ["onmsanimationstart",10], ["onmscontentzoom",10], ["onmspointerhover",11], ["onmstransitionend",10], ["onmstransitionstart",10], "onpage", ["onpropertychange",11],
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlelem.c | 6 +++++- dlls/mshtml/tests/documentmode.js | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 821cc96722b..4de4d3ecc5a 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -6691,6 +6691,10 @@ void HTMLElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode) {DISPID_IHTMLELEMENT3_FIREEVENT, NULL}, {DISPID_UNKNOWN} }; + static const dispex_hook_t elem7_ie11_hooks[] = { + {DISPID_IHTMLELEMENT7_ONMSPOINTERHOVER}, + {DISPID_UNKNOWN} + };
HTMLDOMNode_init_dispex_info(info, mode);
@@ -6706,7 +6710,7 @@ void HTMLElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode)
if(mode >= COMPAT_MODE_IE10) { - dispex_info_add_interface(info, IHTMLElement7_tid, NULL); + dispex_info_add_interface(info, IHTMLElement7_tid, mode >= COMPAT_MODE_IE11 ? elem7_ie11_hooks : NULL); dispex_info_add_interface(info, IWineHTMLElementPrivate_tid, NULL); }
diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index ccad6a7672e..f5cd707fb84 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -3748,7 +3748,7 @@ sync_test("prototype props", function() { ["onbeforeupdate",11], ["oncellchange",11], ["oncontrolselect",11], ["ondataavailable",11], ["ondatasetchanged",11], ["ondatasetcomplete",11], ["onerrorupdate",11], ["onfilterchange",11], ["oninvalid",10], ["onlayoutcomplete",11], ["onlosecapture",11], ["onmove",11], ["onmoveend",11], ["onmovestart",11], ["onmsanimationend",10], ["onmsanimationiteration",10], ["onmsanimationstart",10], - ["onmscontentzoom",10], ["onmspointerhover",11], ["onmstransitionend",10], ["onmstransitionstart",10], "onpage", ["onpropertychange",11], + ["onmscontentzoom",10], ["onmstransitionend",10], ["onmstransitionstart",10], "onpage", ["onpropertychange",11], ["onreadystatechange",11], ["onresize",11], ["onresizeend",11], ["onresizestart",11], ["onrowenter",11], ["onrowexit",11], ["onrowsdelete",11], ["onrowsinserted",11], ["removeBehavior",11], "removeExpression", ["removeFilter",10], ["scopeName",10], "setExpression", ["tagUrn",10], "toString", ["xmsAcceleratorKey",10]
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlanchor.c | 9 ++++++++- dlls/mshtml/htmlarea.c | 9 ++++++++- dlls/mshtml/htmlelem.c | 10 ++++++++++ dlls/mshtml/mshtml_private.h | 2 +- dlls/mshtml/tests/documentmode.js | 4 +++- 5 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/dlls/mshtml/htmlanchor.c b/dlls/mshtml/htmlanchor.c index 0e1642b07bf..bd0e48bd7de 100644 --- a/dlls/mshtml/htmlanchor.c +++ b/dlls/mshtml/htmlanchor.c @@ -828,6 +828,13 @@ static const event_target_vtbl_t HTMLAnchorElement_event_target_vtbl = { .handle_event = HTMLAnchorElement_handle_event };
+static void HTMLAnchorElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode) +{ + HTMLElement_init_dispex_info(info, mode); + if(mode >= COMPAT_MODE_IE9) + dispex_info_add_dispids(info, IHTMLElement_tid, HTMLElement_toString_dispids); +} + static const tid_t HTMLAnchorElement_iface_tids[] = { IHTMLAnchorElement_tid, HTMLELEMENT_TIDS, @@ -840,7 +847,7 @@ dispex_static_data_t HTMLAnchorElement_dispex = { .vtbl = &HTMLAnchorElement_event_target_vtbl.dispex_vtbl, .disp_tid = DispHTMLAnchorElement_tid, .iface_tids = HTMLAnchorElement_iface_tids, - .init_info = HTMLElement_init_dispex_info, + .init_info = HTMLAnchorElement_init_dispex_info, };
HRESULT HTMLAnchorElement_Create(HTMLDocumentNode *doc, nsIDOMElement *nselem, HTMLElement **elem) diff --git a/dlls/mshtml/htmlarea.c b/dlls/mshtml/htmlarea.c index 34e58473f72..e0fb7a90ab0 100644 --- a/dlls/mshtml/htmlarea.c +++ b/dlls/mshtml/htmlarea.c @@ -439,6 +439,13 @@ static const event_target_vtbl_t HTMLAreaElement_event_target_vtbl = { .handle_event = HTMLAreaElement_handle_event };
+static void HTMLAreaElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode) +{ + HTMLElement_init_dispex_info(info, mode); + if(mode >= COMPAT_MODE_IE9) + dispex_info_add_dispids(info, IHTMLElement_tid, HTMLElement_toString_dispids); +} + static const tid_t HTMLAreaElement_iface_tids[] = { HTMLELEMENT_TIDS, IHTMLAreaElement_tid, @@ -450,7 +457,7 @@ dispex_static_data_t HTMLAreaElement_dispex = { .vtbl = &HTMLAreaElement_event_target_vtbl.dispex_vtbl, .disp_tid = DispHTMLAreaElement_tid, .iface_tids = HTMLAreaElement_iface_tids, - .init_info = HTMLElement_init_dispex_info, + .init_info = HTMLAreaElement_init_dispex_info, };
HRESULT HTMLAreaElement_Create(HTMLDocumentNode *doc, nsIDOMElement *nselem, HTMLElement **elem) diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 4de4d3ecc5a..d3b23ca4f25 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -6680,6 +6680,10 @@ void HTMLElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode) {DISPID_IHTMLELEMENT6_IE9_SETATTRIBUTE, IHTMLElement6_setAttribute_hook}, {DISPID_UNKNOWN} }; + static const dispex_hook_t elem_ie9_hooks[] = { + {DISPID_IHTMLELEMENT_TOSTRING, NULL}, + {DISPID_UNKNOWN} + }; static const dispex_hook_t elem2_ie11_hooks[] = { {DISPID_IHTMLELEMENT2_ATTACHEVENT, NULL}, {DISPID_IHTMLELEMENT2_DETACHEVENT, NULL}, @@ -6715,8 +6719,14 @@ void HTMLElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode) }
dispex_info_add_interface(info, IHTMLElement3_tid, mode >= COMPAT_MODE_IE11 ? elem3_ie11_hooks : NULL); + dispex_info_add_interface(info, IHTMLElement_tid, mode >= COMPAT_MODE_IE9 ? elem_ie9_hooks : NULL); }
+const DISPID HTMLElement_toString_dispids[] = { + DISPID_IHTMLELEMENT_TOSTRING, + DISPID_UNKNOWN +}; + const tid_t HTMLElement_iface_tids[] = { HTMLELEMENT_TIDS, 0 diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index cf0a08c5a83..a7678c4fc89 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1059,10 +1059,10 @@ typedef struct { #define HTMLELEMENT_TIDS \ IHTMLDOMNode_tid, \ IHTMLDOMNode2_tid, \ - IHTMLElement_tid, \ IHTMLElement4_tid, \ IHTMLUniqueName_tid
+extern const DISPID HTMLElement_toString_dispids[]; extern const tid_t HTMLElement_iface_tids[]; extern cp_static_data_t HTMLElementEvents2_data; #define HTMLELEMENT_CPC {&DIID_HTMLElementEvents2, &HTMLElementEvents2_data} diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index f5cd707fb84..b444726d3b5 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -252,11 +252,13 @@ sync_test("builtin_toString", function() {
e = document.createElement("a"); ok(e.toString() === "", "tag 'a' (without href) toString returned " + e.toString()); + ok(e + "" === "", "tag 'a' (without href) value = " + e); e.href = "https://www.winehq.org/"; test("tag 'a'", e, "HTMLAnchorElement", "https://www.winehq.org/");
e = document.createElement("area"); ok(e.toString() === "", "tag 'area' (without href) toString returned " + e.toString()); + ok(e + "" === "", "tag 'area' (without href) value = " + e); e.href = "https://www.winehq.org/"; test("tag 'area'", e, "HTMLAreaElement", "https://www.winehq.org/");
@@ -3751,7 +3753,7 @@ sync_test("prototype props", function() { ["onmscontentzoom",10], ["onmstransitionend",10], ["onmstransitionstart",10], "onpage", ["onpropertychange",11], ["onreadystatechange",11], ["onresize",11], ["onresizeend",11], ["onresizestart",11], ["onrowenter",11], ["onrowexit",11], ["onrowsdelete",11], ["onrowsinserted",11], ["removeBehavior",11], "removeExpression", ["removeFilter",10], ["scopeName",10], "setExpression", - ["tagUrn",10], "toString", ["xmsAcceleratorKey",10] + ["tagUrn",10], ["xmsAcceleratorKey",10] ]); check(HTMLUnknownElement, [ "namedRecordset", "recordset" ]); check(KeyboardEvent, [
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlelem.c | 10 ++++----- dlls/mshtml/htmlnode.c | 31 ++++++++++++++++++++++++++++ dlls/mshtml/mshtml_private.h | 2 ++ dlls/mshtml/mshtml_private_iface.idl | 15 +++++++++++++- dlls/mshtml/tests/documentmode.js | 4 ++-- 5 files changed, 54 insertions(+), 8 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index d3b23ca4f25..ec631b20858 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -6668,18 +6668,18 @@ static HRESULT IHTMLElement6_setAttribute_hook(DispatchEx *dispex, WORD flags, D
void HTMLElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode) { - static const dispex_hook_t elem6_ie9_hooks[] = { - {DISPID_IHTMLELEMENT6_SETATTRIBUTENS, IHTMLElement6_setAttributeNS_hook}, - {DISPID_UNKNOWN} - }; static const dispex_hook_t elem6_ie10_hooks[] = { {DISPID_IHTMLELEMENT6_HASATTRIBUTENS, IHTMLElement6_hasAttributeNS_hook}, {DISPID_IHTMLELEMENT6_GETATTRIBUTENS, IHTMLElement6_getAttributeNS_hook}, - {DISPID_IHTMLELEMENT6_SETATTRIBUTENS, IHTMLElement6_setAttributeNS_hook}, {DISPID_IHTMLELEMENT6_REMOVEATTRIBUTENS, IHTMLElement6_removeAttributeNS_hook}, {DISPID_IHTMLELEMENT6_IE9_SETATTRIBUTE, IHTMLElement6_setAttribute_hook}, + + /* IE9+ */ + {DISPID_IHTMLELEMENT6_SETATTRIBUTENS, IHTMLElement6_setAttributeNS_hook}, + {DISPID_IHTMLELEMENT6_IE9_HASATTRIBUTES, NULL}, {DISPID_UNKNOWN} }; + const dispex_hook_t *const elem6_ie9_hooks = elem6_ie10_hooks + 4; static const dispex_hook_t elem_ie9_hooks[] = { {DISPID_IHTMLELEMENT_TOSTRING, NULL}, {DISPID_UNKNOWN} diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index 7df7b5bdc6a..aa498fa7fbb 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -1191,6 +1191,33 @@ static const IHTMLDOMNode3Vtbl HTMLDOMNode3Vtbl = { HTMLDOMNode3_isSupported };
+static inline HTMLDOMNode *impl_from_IWineHTMLDOMNodePrivate(IWineHTMLDOMNodePrivate *iface) +{ + return CONTAINING_RECORD(iface, HTMLDOMNode, IWineHTMLDOMNodePrivate_iface); +} + +DISPEX_IDISPATCH_IMPL(HTMLDOMNode_private, IWineHTMLDOMNodePrivate, impl_from_IWineHTMLDOMNodePrivate(iface)->event_target.dispex) + +static HRESULT WINAPI HTMLDOMNode_private_get_hasAttributes(IWineHTMLDOMNodePrivate *iface, VARIANT_BOOL *p) +{ + HTMLDOMNode *This = impl_from_IWineHTMLDOMNodePrivate(iface); + + FIXME("(%p)->(%p)\n", This, p); + + return E_NOTIMPL; +} + +static const IWineHTMLDOMNodePrivateVtbl HTMLDOMNode_private_vtbl = { + HTMLDOMNode_private_QueryInterface, + HTMLDOMNode_private_AddRef, + HTMLDOMNode_private_Release, + HTMLDOMNode_private_GetTypeInfoCount, + HTMLDOMNode_private_GetTypeInfo, + HTMLDOMNode_private_GetIDsOfNames, + HTMLDOMNode_private_Invoke, + HTMLDOMNode_private_get_hasAttributes, +}; + static inline HTMLDOMNode *HTMLDOMNode_from_DispatchEx(DispatchEx *iface) { return CONTAINING_RECORD(iface, HTMLDOMNode, event_target.dispex); @@ -1210,6 +1237,8 @@ void *HTMLDOMNode_query_interface(DispatchEx *dispex, REFIID riid) return &This->IHTMLDOMNode2_iface; if(IsEqualGUID(&IID_IHTMLDOMNode3, riid)) return &This->IHTMLDOMNode3_iface; + if(IsEqualGUID(&IID_IWineHTMLDOMNodePrivate, riid)) + return &This->IWineHTMLDOMNodePrivate_iface;
return EventTarget_query_interface(&This->event_target, riid); } @@ -1265,6 +1294,7 @@ void HTMLDOMNode_init_dispex_info(dispex_data_t *info, compat_mode_t mode) if(mode >= COMPAT_MODE_IE9) { dispex_info_add_interface(info, IHTMLDOMNode2_tid, NULL); dispex_info_add_interface(info, IHTMLDOMNode3_tid, NULL); + dispex_info_add_interface(info, IWineHTMLDOMNodePrivate_tid, NULL); }
EventTarget_init_dispex_info(info, mode); @@ -1284,6 +1314,7 @@ void HTMLDOMNode_Init(HTMLDocumentNode *doc, HTMLDOMNode *node, nsIDOMNode *nsno node->IHTMLDOMNode_iface.lpVtbl = &HTMLDOMNodeVtbl; node->IHTMLDOMNode2_iface.lpVtbl = &HTMLDOMNode2Vtbl; node->IHTMLDOMNode3_iface.lpVtbl = &HTMLDOMNode3Vtbl; + node->IWineHTMLDOMNodePrivate_iface.lpVtbl = &HTMLDOMNode_private_vtbl;
init_event_target(&node->event_target, dispex_data, doc->script_global);
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index a7678c4fc89..3022683b8d4 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -300,6 +300,7 @@ typedef struct ScriptHost ScriptHost; #define PRIVATE_TID_LIST \ XIID(IWineDOMTokenList) \ XIID(IWineHTMLCharacterData) \ + XIID(IWineHTMLDOMNodePrivate) \ XIID(IWineHTMLElementPrivate) \ XIID(IWineHTMLWindowPrivate) \ XIID(IWineHTMLWindowCompatPrivate) \ @@ -1013,6 +1014,7 @@ struct HTMLDOMNode { IHTMLDOMNode IHTMLDOMNode_iface; IHTMLDOMNode2 IHTMLDOMNode2_iface; IHTMLDOMNode3 IHTMLDOMNode3_iface; + IWineHTMLDOMNodePrivate IWineHTMLDOMNodePrivate_iface; const NodeImplVtbl *vtbl;
nsIDOMNode *nsnode; diff --git a/dlls/mshtml/mshtml_private_iface.idl b/dlls/mshtml/mshtml_private_iface.idl index e32687329f9..73cf4f1c4df 100644 --- a/dlls/mshtml/mshtml_private_iface.idl +++ b/dlls/mshtml/mshtml_private_iface.idl @@ -149,6 +149,19 @@ interface IWineHTMLWindowCompatPrivate : IDispatch HRESULT performance([out, retval] VARIANT *p); }
+[ + odl, + oleautomation, + dual, + hidden, + uuid(465908fd-f394-489f-b7a3-4c00fbbe9eea) +] +interface IWineHTMLDOMNodePrivate : IDispatch +{ + [propget, id(1)] + HRESULT hasAttributes([retval, out] VARIANT_BOOL *p); +} + [ odl, oleautomation, @@ -185,7 +198,7 @@ interface IWineHTMLCharacterData : IDispatch ] interface IWineHTMLElementPrivate : IDispatch { - [propget, id(1)] + [propget, id(32)] HRESULT classList([retval, out] IDispatch **class_list); }
diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index b444726d3b5..6c6b1b6b684 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -3746,7 +3746,7 @@ sync_test("prototype props", function() { "uniqueID", "uniqueNumber" ], [ ["addBehavior",11], ["addFilter",10], ["all",11], ["behaviorUrns",11], ["dataset",11], ["document",10], ["draggable",10], ["filters",10], - "getExpression", "hasAttributes", ["hidden",11], ["msGetInputContext",11], "normalize", ["onafterupdate",11], ["onbeforeeditfocus",11], + "getExpression", ["hidden",11], ["msGetInputContext",11], "normalize", ["onafterupdate",11], ["onbeforeeditfocus",11], ["onbeforeupdate",11], ["oncellchange",11], ["oncontrolselect",11], ["ondataavailable",11], ["ondatasetchanged",11], ["ondatasetcomplete",11], ["onerrorupdate",11], ["onfilterchange",11], ["oninvalid",10], ["onlayoutcomplete",11], ["onlosecapture",11], ["onmove",11], ["onmoveend",11], ["onmovestart",11], ["onmsanimationend",10], ["onmsanimationiteration",10], ["onmsanimationstart",10], @@ -3786,7 +3786,7 @@ sync_test("prototype props", function() { "DOCUMENT_POSITION_CONTAINED_BY", "DOCUMENT_POSITION_CONTAINS", "DOCUMENT_POSITION_DISCONNECTED", "DOCUMENT_POSITION_FOLLOWING", "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", "DOCUMENT_POSITION_PRECEDING", "DOCUMENT_TYPE_NODE", "ELEMENT_NODE", "ENTITY_NODE", "ENTITY_REFERENCE_NODE", "NOTATION_NODE", - "PROCESSING_INSTRUCTION_NODE", "TEXT_NODE", "hasAttributes", "normalize" + "PROCESSING_INSTRUCTION_NODE", "TEXT_NODE", "normalize" ]); if(v >= 11) check(PageTransitionEvent, [ "persisted" ]);
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlelem.c | 5 +++++ dlls/mshtml/htmlnode.c | 10 ++++++++++ dlls/mshtml/mshtml_private.h | 1 - dlls/mshtml/mshtml_private_iface.idl | 2 ++ dlls/mshtml/tests/documentmode.js | 4 ++-- 5 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index ec631b20858..b38ebd40269 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -6695,6 +6695,10 @@ void HTMLElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode) {DISPID_IHTMLELEMENT3_FIREEVENT, NULL}, {DISPID_UNKNOWN} }; + static const dispex_hook_t elem4_ie9_hooks[] = { + {DISPID_IHTMLELEMENT4_NORMALIZE, NULL}, + {DISPID_UNKNOWN} + }; static const dispex_hook_t elem7_ie11_hooks[] = { {DISPID_IHTMLELEMENT7_ONMSPOINTERHOVER}, {DISPID_UNKNOWN} @@ -6720,6 +6724,7 @@ void HTMLElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode)
dispex_info_add_interface(info, IHTMLElement3_tid, mode >= COMPAT_MODE_IE11 ? elem3_ie11_hooks : NULL); dispex_info_add_interface(info, IHTMLElement_tid, mode >= COMPAT_MODE_IE9 ? elem_ie9_hooks : NULL); + dispex_info_add_interface(info, IHTMLElement4_tid, mode >= COMPAT_MODE_IE9 ? elem4_ie9_hooks : NULL); }
const DISPID HTMLElement_toString_dispids[] = { diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index aa498fa7fbb..b87e20c433b 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -1207,6 +1207,15 @@ static HRESULT WINAPI HTMLDOMNode_private_get_hasAttributes(IWineHTMLDOMNodePriv return E_NOTIMPL; }
+static HRESULT WINAPI HTMLDOMNode_private_normalize(IWineHTMLDOMNodePrivate *iface) +{ + HTMLDOMNode *This = impl_from_IWineHTMLDOMNodePrivate(iface); + + FIXME("(%p)\n", This); + + return E_NOTIMPL; +} + static const IWineHTMLDOMNodePrivateVtbl HTMLDOMNode_private_vtbl = { HTMLDOMNode_private_QueryInterface, HTMLDOMNode_private_AddRef, @@ -1216,6 +1225,7 @@ static const IWineHTMLDOMNodePrivateVtbl HTMLDOMNode_private_vtbl = { HTMLDOMNode_private_GetIDsOfNames, HTMLDOMNode_private_Invoke, HTMLDOMNode_private_get_hasAttributes, + HTMLDOMNode_private_normalize, };
static inline HTMLDOMNode *HTMLDOMNode_from_DispatchEx(DispatchEx *iface) diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 3022683b8d4..bcd30096cd9 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1061,7 +1061,6 @@ typedef struct { #define HTMLELEMENT_TIDS \ IHTMLDOMNode_tid, \ IHTMLDOMNode2_tid, \ - IHTMLElement4_tid, \ IHTMLUniqueName_tid
extern const DISPID HTMLElement_toString_dispids[]; diff --git a/dlls/mshtml/mshtml_private_iface.idl b/dlls/mshtml/mshtml_private_iface.idl index 73cf4f1c4df..1db8ed583a2 100644 --- a/dlls/mshtml/mshtml_private_iface.idl +++ b/dlls/mshtml/mshtml_private_iface.idl @@ -160,6 +160,8 @@ interface IWineHTMLDOMNodePrivate : IDispatch { [propget, id(1)] HRESULT hasAttributes([retval, out] VARIANT_BOOL *p); + [id(2)] + HRESULT normalize(); }
[ diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index 6c6b1b6b684..883633985c5 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -3746,7 +3746,7 @@ sync_test("prototype props", function() { "uniqueID", "uniqueNumber" ], [ ["addBehavior",11], ["addFilter",10], ["all",11], ["behaviorUrns",11], ["dataset",11], ["document",10], ["draggable",10], ["filters",10], - "getExpression", ["hidden",11], ["msGetInputContext",11], "normalize", ["onafterupdate",11], ["onbeforeeditfocus",11], + "getExpression", ["hidden",11], ["msGetInputContext",11], ["onafterupdate",11], ["onbeforeeditfocus",11], ["onbeforeupdate",11], ["oncellchange",11], ["oncontrolselect",11], ["ondataavailable",11], ["ondatasetchanged",11], ["ondatasetcomplete",11], ["onerrorupdate",11], ["onfilterchange",11], ["oninvalid",10], ["onlayoutcomplete",11], ["onlosecapture",11], ["onmove",11], ["onmoveend",11], ["onmovestart",11], ["onmsanimationend",10], ["onmsanimationiteration",10], ["onmsanimationstart",10], @@ -3786,7 +3786,7 @@ sync_test("prototype props", function() { "DOCUMENT_POSITION_CONTAINED_BY", "DOCUMENT_POSITION_CONTAINS", "DOCUMENT_POSITION_DISCONNECTED", "DOCUMENT_POSITION_FOLLOWING", "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", "DOCUMENT_POSITION_PRECEDING", "DOCUMENT_TYPE_NODE", "ELEMENT_NODE", "ENTITY_NODE", "ENTITY_REFERENCE_NODE", "NOTATION_NODE", - "PROCESSING_INSTRUCTION_NODE", "TEXT_NODE", "normalize" + "PROCESSING_INSTRUCTION_NODE", "TEXT_NODE" ]); if(v >= 11) check(PageTransitionEvent, [ "persisted" ]);
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlelem.c | 7 ++++++- dlls/mshtml/tests/documentmode.js | 7 +++---- 2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index b38ebd40269..36304dda49c 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -6693,8 +6693,12 @@ void HTMLElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode) }; static const dispex_hook_t elem3_ie11_hooks[] = { {DISPID_IHTMLELEMENT3_FIREEVENT, NULL}, + + /* IE9+ */ + {DISPID_IHTMLELEMENT3_ONPAGE, NULL}, {DISPID_UNKNOWN} }; + const dispex_hook_t *const elem3_ie9_hooks = elem3_ie11_hooks + 1; static const dispex_hook_t elem4_ie9_hooks[] = { {DISPID_IHTMLELEMENT4_NORMALIZE, NULL}, {DISPID_UNKNOWN} @@ -6722,7 +6726,8 @@ void HTMLElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode) dispex_info_add_interface(info, IWineHTMLElementPrivate_tid, NULL); }
- dispex_info_add_interface(info, IHTMLElement3_tid, mode >= COMPAT_MODE_IE11 ? elem3_ie11_hooks : NULL); + dispex_info_add_interface(info, IHTMLElement3_tid, mode >= COMPAT_MODE_IE11 ? elem3_ie11_hooks : + mode >= COMPAT_MODE_IE9 ? elem3_ie9_hooks : NULL); dispex_info_add_interface(info, IHTMLElement_tid, mode >= COMPAT_MODE_IE9 ? elem_ie9_hooks : NULL); dispex_info_add_interface(info, IHTMLElement4_tid, mode >= COMPAT_MODE_IE9 ? elem4_ie9_hooks : NULL); } diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index 883633985c5..5c3051d5a84 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -3750,10 +3750,9 @@ sync_test("prototype props", function() { ["onbeforeupdate",11], ["oncellchange",11], ["oncontrolselect",11], ["ondataavailable",11], ["ondatasetchanged",11], ["ondatasetcomplete",11], ["onerrorupdate",11], ["onfilterchange",11], ["oninvalid",10], ["onlayoutcomplete",11], ["onlosecapture",11], ["onmove",11], ["onmoveend",11], ["onmovestart",11], ["onmsanimationend",10], ["onmsanimationiteration",10], ["onmsanimationstart",10], - ["onmscontentzoom",10], ["onmstransitionend",10], ["onmstransitionstart",10], "onpage", ["onpropertychange",11], - ["onreadystatechange",11], ["onresize",11], ["onresizeend",11], ["onresizestart",11], ["onrowenter",11], ["onrowexit",11], - ["onrowsdelete",11], ["onrowsinserted",11], ["removeBehavior",11], "removeExpression", ["removeFilter",10], ["scopeName",10], "setExpression", - ["tagUrn",10], ["xmsAcceleratorKey",10] + ["onmscontentzoom",10], ["onmstransitionend",10], ["onmstransitionstart",10], ["onpropertychange",11], ["onreadystatechange",11], + ["onresize",11], ["onresizeend",11], ["onresizestart",11], ["onrowenter",11], ["onrowexit",11], ["onrowsdelete",11], ["onrowsinserted",11], + ["removeBehavior",11], "removeExpression", ["removeFilter",10], ["scopeName",10], "setExpression", ["tagUrn",10], ["xmsAcceleratorKey",10] ]); check(HTMLUnknownElement, [ "namedRecordset", "recordset" ]); check(KeyboardEvent, [
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlelem.c | 10 ++++++++-- dlls/mshtml/tests/documentmode.js | 14 +++++++------- 2 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 36304dda49c..6674a843b3e 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -6689,8 +6689,14 @@ void HTMLElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode) {DISPID_IHTMLELEMENT2_DETACHEVENT, NULL}, {DISPID_IHTMLELEMENT2_DOSCROLL, NULL}, {DISPID_IHTMLELEMENT2_READYSTATE, NULL}, + + /* IE9+ */ + {DISPID_IHTMLELEMENT2_SETEXPRESSION, NULL}, + {DISPID_IHTMLELEMENT2_GETEXPRESSION, NULL}, + {DISPID_IHTMLELEMENT2_REMOVEEXPRESSION, NULL}, {DISPID_UNKNOWN} }; + const dispex_hook_t *const elem2_ie9_hooks = elem2_ie11_hooks + 4; static const dispex_hook_t elem3_ie11_hooks[] = { {DISPID_IHTMLELEMENT3_FIREEVENT, NULL},
@@ -6710,8 +6716,8 @@ void HTMLElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode)
HTMLDOMNode_init_dispex_info(info, mode);
- dispex_info_add_interface(info, IHTMLElement2_tid, mode >= COMPAT_MODE_IE11 ? elem2_ie11_hooks : NULL); - + dispex_info_add_interface(info, IHTMLElement2_tid, mode >= COMPAT_MODE_IE11 ? elem2_ie11_hooks : + mode >= COMPAT_MODE_IE9 ? elem2_ie9_hooks : NULL); if(mode >= COMPAT_MODE_IE8) dispex_info_add_interface(info, IElementSelector_tid, NULL);
diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index 5c3051d5a84..78a909d2944 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -3746,13 +3746,13 @@ sync_test("prototype props", function() { "uniqueID", "uniqueNumber" ], [ ["addBehavior",11], ["addFilter",10], ["all",11], ["behaviorUrns",11], ["dataset",11], ["document",10], ["draggable",10], ["filters",10], - "getExpression", ["hidden",11], ["msGetInputContext",11], ["onafterupdate",11], ["onbeforeeditfocus",11], - ["onbeforeupdate",11], ["oncellchange",11], ["oncontrolselect",11], ["ondataavailable",11], ["ondatasetchanged",11], - ["ondatasetcomplete",11], ["onerrorupdate",11], ["onfilterchange",11], ["oninvalid",10], ["onlayoutcomplete",11], ["onlosecapture",11], - ["onmove",11], ["onmoveend",11], ["onmovestart",11], ["onmsanimationend",10], ["onmsanimationiteration",10], ["onmsanimationstart",10], - ["onmscontentzoom",10], ["onmstransitionend",10], ["onmstransitionstart",10], ["onpropertychange",11], ["onreadystatechange",11], - ["onresize",11], ["onresizeend",11], ["onresizestart",11], ["onrowenter",11], ["onrowexit",11], ["onrowsdelete",11], ["onrowsinserted",11], - ["removeBehavior",11], "removeExpression", ["removeFilter",10], ["scopeName",10], "setExpression", ["tagUrn",10], ["xmsAcceleratorKey",10] + ["hidden",11], ["msGetInputContext",11], ["onafterupdate",11], ["onbeforeeditfocus",11], ["onbeforeupdate",11], ["oncellchange",11], + ["oncontrolselect",11], ["ondataavailable",11], ["ondatasetchanged",11], ["ondatasetcomplete",11], ["onerrorupdate",11], + ["onfilterchange",11], ["oninvalid",10], ["onlayoutcomplete",11], ["onlosecapture",11], ["onmove",11], ["onmoveend",11], ["onmovestart",11], + ["onmsanimationend",10], ["onmsanimationiteration",10], ["onmsanimationstart",10], ["onmscontentzoom",10], ["onmstransitionend",10], + ["onmstransitionstart",10], ["onpropertychange",11], ["onreadystatechange",11], ["onresize",11], ["onresizeend",11], ["onresizestart",11], + ["onrowenter",11], ["onrowexit",11], ["onrowsdelete",11], ["onrowsinserted",11], ["removeBehavior",11], ["removeFilter",10], ["scopeName",10], + ["tagUrn",10], ["xmsAcceleratorKey",10] ]); check(HTMLUnknownElement, [ "namedRecordset", "recordset" ]); check(KeyboardEvent, [
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlelem.c | 33 +++++++++++++++++++++++++++---- dlls/mshtml/tests/documentmode.js | 14 ++++++------- 2 files changed, 35 insertions(+), 12 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 6674a843b3e..172175b26fa 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -6680,23 +6680,35 @@ void HTMLElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode) {DISPID_UNKNOWN} }; const dispex_hook_t *const elem6_ie9_hooks = elem6_ie10_hooks + 4; - static const dispex_hook_t elem_ie9_hooks[] = { + static const dispex_hook_t elem_ie10_hooks[] = { + {DISPID_IHTMLELEMENT_DOCUMENT, NULL}, + {DISPID_IHTMLELEMENT_FILTERS, NULL}, + + /* IE9+ */ {DISPID_IHTMLELEMENT_TOSTRING, NULL}, {DISPID_UNKNOWN} }; + const dispex_hook_t *const elem_ie9_hooks = elem_ie10_hooks + 2; static const dispex_hook_t elem2_ie11_hooks[] = { {DISPID_IHTMLELEMENT2_ATTACHEVENT, NULL}, {DISPID_IHTMLELEMENT2_DETACHEVENT, NULL}, {DISPID_IHTMLELEMENT2_DOSCROLL, NULL}, {DISPID_IHTMLELEMENT2_READYSTATE, NULL},
+ /* IE10+ */ + {DISPID_IHTMLELEMENT2_SCOPENAME, NULL}, + {DISPID_IHTMLELEMENT2_ADDFILTER, NULL}, + {DISPID_IHTMLELEMENT2_REMOVEFILTER,NULL}, + {DISPID_IHTMLELEMENT2_TAGURN, NULL}, + /* IE9+ */ {DISPID_IHTMLELEMENT2_SETEXPRESSION, NULL}, {DISPID_IHTMLELEMENT2_GETEXPRESSION, NULL}, {DISPID_IHTMLELEMENT2_REMOVEEXPRESSION, NULL}, {DISPID_UNKNOWN} }; - const dispex_hook_t *const elem2_ie9_hooks = elem2_ie11_hooks + 4; + const dispex_hook_t *const elem2_ie10_hooks = elem2_ie11_hooks + 4; + const dispex_hook_t *const elem2_ie9_hooks = elem2_ie10_hooks + 4; static const dispex_hook_t elem3_ie11_hooks[] = { {DISPID_IHTMLELEMENT3_FIREEVENT, NULL},
@@ -6711,12 +6723,23 @@ void HTMLElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode) }; static const dispex_hook_t elem7_ie11_hooks[] = { {DISPID_IHTMLELEMENT7_ONMSPOINTERHOVER}, + + /* IE10+ */ + {DISPID_IHTMLELEMENT7_ONMSTRANSITIONSTART}, + {DISPID_IHTMLELEMENT7_ONMSTRANSITIONEND}, + {DISPID_IHTMLELEMENT7_ONMSANIMATIONSTART}, + {DISPID_IHTMLELEMENT7_ONMSANIMATIONEND}, + {DISPID_IHTMLELEMENT7_ONMSANIMATIONITERATION}, + {DISPID_IHTMLELEMENT7_ONINVALID}, + {DISPID_IHTMLELEMENT7_XMSACCELERATORKEY}, {DISPID_UNKNOWN} }; + const dispex_hook_t *const elem7_ie10_hooks = elem7_ie11_hooks + 1;
HTMLDOMNode_init_dispex_info(info, mode);
dispex_info_add_interface(info, IHTMLElement2_tid, mode >= COMPAT_MODE_IE11 ? elem2_ie11_hooks : + mode >= COMPAT_MODE_IE10 ? elem2_ie10_hooks : mode >= COMPAT_MODE_IE9 ? elem2_ie9_hooks : NULL); if(mode >= COMPAT_MODE_IE8) dispex_info_add_interface(info, IElementSelector_tid, NULL); @@ -6728,13 +6751,15 @@ void HTMLElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode)
if(mode >= COMPAT_MODE_IE10) { - dispex_info_add_interface(info, IHTMLElement7_tid, mode >= COMPAT_MODE_IE11 ? elem7_ie11_hooks : NULL); + dispex_info_add_interface(info, IHTMLElement7_tid, mode >= COMPAT_MODE_IE11 ? elem7_ie11_hooks : + mode >= COMPAT_MODE_IE10 ? elem7_ie10_hooks : NULL); dispex_info_add_interface(info, IWineHTMLElementPrivate_tid, NULL); }
dispex_info_add_interface(info, IHTMLElement3_tid, mode >= COMPAT_MODE_IE11 ? elem3_ie11_hooks : mode >= COMPAT_MODE_IE9 ? elem3_ie9_hooks : NULL); - dispex_info_add_interface(info, IHTMLElement_tid, mode >= COMPAT_MODE_IE9 ? elem_ie9_hooks : NULL); + dispex_info_add_interface(info, IHTMLElement_tid, mode >= COMPAT_MODE_IE10 ? elem_ie10_hooks : + mode >= COMPAT_MODE_IE9 ? elem_ie9_hooks : NULL); dispex_info_add_interface(info, IHTMLElement4_tid, mode >= COMPAT_MODE_IE9 ? elem4_ie9_hooks : NULL); }
diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index 78a909d2944..fb0bbcbe691 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -3745,14 +3745,12 @@ sync_test("prototype props", function() { "scrollIntoView", "setActive", "setCapture", "sourceIndex", ["spellcheck",10], "style", "swapNode", "tabIndex", ["tagUrn",9,9], "title", "uniqueID", "uniqueNumber" ], [ - ["addBehavior",11], ["addFilter",10], ["all",11], ["behaviorUrns",11], ["dataset",11], ["document",10], ["draggable",10], ["filters",10], - ["hidden",11], ["msGetInputContext",11], ["onafterupdate",11], ["onbeforeeditfocus",11], ["onbeforeupdate",11], ["oncellchange",11], - ["oncontrolselect",11], ["ondataavailable",11], ["ondatasetchanged",11], ["ondatasetcomplete",11], ["onerrorupdate",11], - ["onfilterchange",11], ["oninvalid",10], ["onlayoutcomplete",11], ["onlosecapture",11], ["onmove",11], ["onmoveend",11], ["onmovestart",11], - ["onmsanimationend",10], ["onmsanimationiteration",10], ["onmsanimationstart",10], ["onmscontentzoom",10], ["onmstransitionend",10], - ["onmstransitionstart",10], ["onpropertychange",11], ["onreadystatechange",11], ["onresize",11], ["onresizeend",11], ["onresizestart",11], - ["onrowenter",11], ["onrowexit",11], ["onrowsdelete",11], ["onrowsinserted",11], ["removeBehavior",11], ["removeFilter",10], ["scopeName",10], - ["tagUrn",10], ["xmsAcceleratorKey",10] + ["addBehavior",11], ["all",11], ["behaviorUrns",11], ["dataset",11], ["draggable",10], ["hidden",11], ["msGetInputContext",11], + ["onafterupdate",11], ["onbeforeeditfocus",11], ["onbeforeupdate",11], ["oncellchange",11], ["oncontrolselect",11], ["ondataavailable",11], + ["ondatasetchanged",11], ["ondatasetcomplete",11], ["onerrorupdate",11], ["onfilterchange",11], ["onlayoutcomplete",11], + ["onlosecapture",11], ["onmove",11], ["onmoveend",11], ["onmovestart",11], ["onmscontentzoom",10], ["onpropertychange",11], + ["onreadystatechange",11], ["onresize",11], ["onresizeend",11], ["onresizestart",11], ["onrowenter",11], ["onrowexit",11], ["onrowsdelete",11], + ["onrowsinserted",11], ["removeBehavior",11] ]); check(HTMLUnknownElement, [ "namedRecordset", "recordset" ]); check(KeyboardEvent, [
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlelem.c | 52 +++++++++++++++++++++++++------ dlls/mshtml/tests/documentmode.js | 9 +----- 2 files changed, 43 insertions(+), 18 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 172175b26fa..cbf45eea1a6 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -6680,7 +6680,19 @@ void HTMLElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode) {DISPID_UNKNOWN} }; const dispex_hook_t *const elem6_ie9_hooks = elem6_ie10_hooks + 4; - static const dispex_hook_t elem_ie10_hooks[] = { + static const dispex_hook_t elem_ie11_hooks[] = { + {DISPID_IHTMLELEMENT_ONBEFOREUPDATE}, + {DISPID_IHTMLELEMENT_ONAFTERUPDATE}, + {DISPID_IHTMLELEMENT_ONERRORUPDATE}, + {DISPID_IHTMLELEMENT_ONROWEXIT}, + {DISPID_IHTMLELEMENT_ONROWENTER}, + {DISPID_IHTMLELEMENT_ONDATASETCHANGED}, + {DISPID_IHTMLELEMENT_ONDATAAVAILABLE}, + {DISPID_IHTMLELEMENT_ONDATASETCOMPLETE}, + {DISPID_IHTMLELEMENT_ONFILTERCHANGE}, + {DISPID_IHTMLELEMENT_ALL}, + + /* IE10+ */ {DISPID_IHTMLELEMENT_DOCUMENT, NULL}, {DISPID_IHTMLELEMENT_FILTERS, NULL},
@@ -6688,12 +6700,24 @@ void HTMLElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode) {DISPID_IHTMLELEMENT_TOSTRING, NULL}, {DISPID_UNKNOWN} }; - const dispex_hook_t *const elem_ie9_hooks = elem_ie10_hooks + 2; + const dispex_hook_t *const elem_ie10_hooks = elem_ie11_hooks + 10; + const dispex_hook_t *const elem_ie9_hooks = elem_ie10_hooks + 2; static const dispex_hook_t elem2_ie11_hooks[] = { - {DISPID_IHTMLELEMENT2_ATTACHEVENT, NULL}, - {DISPID_IHTMLELEMENT2_DETACHEVENT, NULL}, - {DISPID_IHTMLELEMENT2_DOSCROLL, NULL}, - {DISPID_IHTMLELEMENT2_READYSTATE, NULL}, + {DISPID_IHTMLELEMENT2_ONLOSECAPTURE}, + {DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE}, + {DISPID_IHTMLELEMENT2_ONRESIZE}, + {DISPID_IHTMLELEMENT2_ATTACHEVENT}, + {DISPID_IHTMLELEMENT2_DETACHEVENT}, + {DISPID_IHTMLELEMENT2_DOSCROLL}, + {DISPID_IHTMLELEMENT2_READYSTATE}, + {DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE}, + {DISPID_IHTMLELEMENT2_ONROWSDELETE}, + {DISPID_IHTMLELEMENT2_ONROWSINSERTED}, + {DISPID_IHTMLELEMENT2_ONCELLCHANGE}, + {DISPID_IHTMLELEMENT2_ADDBEHAVIOR}, + {DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR}, + {DISPID_IHTMLELEMENT2_BEHAVIORURNS}, + {DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS},
/* IE10+ */ {DISPID_IHTMLELEMENT2_SCOPENAME, NULL}, @@ -6707,16 +6731,23 @@ void HTMLElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode) {DISPID_IHTMLELEMENT2_REMOVEEXPRESSION, NULL}, {DISPID_UNKNOWN} }; - const dispex_hook_t *const elem2_ie10_hooks = elem2_ie11_hooks + 4; + const dispex_hook_t *const elem2_ie10_hooks = elem2_ie11_hooks + 15; const dispex_hook_t *const elem2_ie9_hooks = elem2_ie10_hooks + 4; static const dispex_hook_t elem3_ie11_hooks[] = { - {DISPID_IHTMLELEMENT3_FIREEVENT, NULL}, + {DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE}, + {DISPID_IHTMLELEMENT3_ONMOVE}, + {DISPID_IHTMLELEMENT3_ONCONTROLSELECT}, + {DISPID_IHTMLELEMENT3_FIREEVENT}, + {DISPID_IHTMLELEMENT3_ONRESIZESTART}, + {DISPID_IHTMLELEMENT3_ONRESIZEEND}, + {DISPID_IHTMLELEMENT3_ONMOVESTART}, + {DISPID_IHTMLELEMENT3_ONMOVEEND},
/* IE9+ */ {DISPID_IHTMLELEMENT3_ONPAGE, NULL}, {DISPID_UNKNOWN} }; - const dispex_hook_t *const elem3_ie9_hooks = elem3_ie11_hooks + 1; + const dispex_hook_t *const elem3_ie9_hooks = elem3_ie11_hooks + 8; static const dispex_hook_t elem4_ie9_hooks[] = { {DISPID_IHTMLELEMENT4_NORMALIZE, NULL}, {DISPID_UNKNOWN} @@ -6758,7 +6789,8 @@ void HTMLElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode)
dispex_info_add_interface(info, IHTMLElement3_tid, mode >= COMPAT_MODE_IE11 ? elem3_ie11_hooks : mode >= COMPAT_MODE_IE9 ? elem3_ie9_hooks : NULL); - dispex_info_add_interface(info, IHTMLElement_tid, mode >= COMPAT_MODE_IE10 ? elem_ie10_hooks : + dispex_info_add_interface(info, IHTMLElement_tid, mode >= COMPAT_MODE_IE11 ? elem_ie11_hooks : + mode >= COMPAT_MODE_IE10 ? elem_ie10_hooks : mode >= COMPAT_MODE_IE9 ? elem_ie9_hooks : NULL); dispex_info_add_interface(info, IHTMLElement4_tid, mode >= COMPAT_MODE_IE9 ? elem4_ie9_hooks : NULL); } diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index fb0bbcbe691..eaa70423bb0 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -3744,14 +3744,7 @@ sync_test("prototype props", function() { ["removeBehavior",9,10], ["removeFilter",9,9], "removeNode", "replaceAdjacentText", "replaceNode", "runtimeStyle", ["scopeName",9,9], "scrollIntoView", "setActive", "setCapture", "sourceIndex", ["spellcheck",10], "style", "swapNode", "tabIndex", ["tagUrn",9,9], "title", "uniqueID", "uniqueNumber" - ], [ - ["addBehavior",11], ["all",11], ["behaviorUrns",11], ["dataset",11], ["draggable",10], ["hidden",11], ["msGetInputContext",11], - ["onafterupdate",11], ["onbeforeeditfocus",11], ["onbeforeupdate",11], ["oncellchange",11], ["oncontrolselect",11], ["ondataavailable",11], - ["ondatasetchanged",11], ["ondatasetcomplete",11], ["onerrorupdate",11], ["onfilterchange",11], ["onlayoutcomplete",11], - ["onlosecapture",11], ["onmove",11], ["onmoveend",11], ["onmovestart",11], ["onmscontentzoom",10], ["onpropertychange",11], - ["onreadystatechange",11], ["onresize",11], ["onresizeend",11], ["onresizestart",11], ["onrowenter",11], ["onrowexit",11], ["onrowsdelete",11], - ["onrowsinserted",11], ["removeBehavior",11] - ]); + ], [ ["dataset",11], ["draggable",10], ["hidden",11], ["msGetInputContext",11], ["onmscontentzoom",10] ]); check(HTMLUnknownElement, [ "namedRecordset", "recordset" ]); check(KeyboardEvent, [ "DOM_KEY_LOCATION_JOYSTICK", "DOM_KEY_LOCATION_LEFT", "DOM_KEY_LOCATION_MOBILE",
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmltable.c | 15 +++++++++------ dlls/mshtml/tests/documentmode.js | 5 +++++ 2 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/dlls/mshtml/htmltable.c b/dlls/mshtml/htmltable.c index 40fd13bc03d..b043dd4d773 100644 --- a/dlls/mshtml/htmltable.c +++ b/dlls/mshtml/htmltable.c @@ -430,9 +430,18 @@ static const NodeImplVtbl HTMLTableCellImplVtbl = { .get_attr_col = HTMLElement_get_attr_col, };
+static const tid_t HTMLTableDataCellElement_iface_tids[] = { + HTMLELEMENT_TIDS, + IHTMLTableCell_tid, + 0 +}; + dispex_static_data_t HTMLTableCellElement_dispex = { .id = PROT_HTMLTableCellElement, .prototype_id = PROT_HTMLElement, + .disp_tid = DispHTMLTableCell_tid, + .iface_tids = HTMLTableDataCellElement_iface_tids, + .init_info = HTMLElement_init_dispex_info, };
static const event_target_vtbl_t HTMLTableDataCellElement_event_target_vtbl = { @@ -447,12 +456,6 @@ static const event_target_vtbl_t HTMLTableDataCellElement_event_target_vtbl = { .handle_event = HTMLElement_handle_event };
-static const tid_t HTMLTableDataCellElement_iface_tids[] = { - HTMLELEMENT_TIDS, - IHTMLTableCell_tid, - 0 -}; - dispex_static_data_t HTMLTableDataCellElement_dispex = { .id = PROT_HTMLTableDataCellElement, .prototype_id = PROT_HTMLTableCellElement, diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index eaa70423bb0..52d91dbf117 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -3745,6 +3745,11 @@ sync_test("prototype props", function() { "scrollIntoView", "setActive", "setCapture", "sourceIndex", ["spellcheck",10], "style", "swapNode", "tabIndex", ["tagUrn",9,9], "title", "uniqueID", "uniqueNumber" ], [ ["dataset",11], ["draggable",10], ["hidden",11], ["msGetInputContext",11], ["onmscontentzoom",10] ]); + check(HTMLTableCellElement, [ + "abbr", "align", "axis", "background", "bgColor", "borderColor", "borderColorDark", "borderColorLight", + "cellIndex", "ch", "chOff", "colSpan", "headers", "height", "noWrap", "rowSpan", "scope", "vAlign", "width" + ], [ "abbr", "axis", "ch", "chOff", "headers", "scope" ]); + check(HTMLTableDataCellElement, []); check(HTMLUnknownElement, [ "namedRecordset", "recordset" ]); check(KeyboardEvent, [ "DOM_KEY_LOCATION_JOYSTICK", "DOM_KEY_LOCATION_LEFT", "DOM_KEY_LOCATION_MOBILE",
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmldoc.c | 1 - dlls/mshtml/htmlnode.c | 2 +- dlls/mshtml/htmltextnode.c | 1 - dlls/mshtml/mshtml_private.h | 1 - dlls/mshtml/tests/documentmode.js | 1 + 5 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index e8470c0d4cb..853a75cfaaf 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -5655,7 +5655,6 @@ static const NodeImplVtbl HTMLDocumentFragmentImplVtbl = {
static const tid_t HTMLDocumentNode_iface_tids[] = { IHTMLDOMNode_tid, - IHTMLDOMNode2_tid, IHTMLDocument4_tid, IHTMLDocument5_tid, IDocumentSelector_tid, diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index b87e20c433b..c39159d9b43 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -1300,9 +1300,9 @@ void HTMLDOMNode_init_dispex_info(dispex_data_t *info, compat_mode_t mode) };
dispex_info_add_interface(info, IHTMLDOMNode_tid, mode >= COMPAT_MODE_IE9 ? ie9_hooks : NULL); + dispex_info_add_interface(info, IHTMLDOMNode2_tid, NULL);
if(mode >= COMPAT_MODE_IE9) { - dispex_info_add_interface(info, IHTMLDOMNode2_tid, NULL); dispex_info_add_interface(info, IHTMLDOMNode3_tid, NULL); dispex_info_add_interface(info, IWineHTMLDOMNodePrivate_tid, NULL); } diff --git a/dlls/mshtml/htmltextnode.c b/dlls/mshtml/htmltextnode.c index 8ed5f0b135e..9c4476dc79b 100644 --- a/dlls/mshtml/htmltextnode.c +++ b/dlls/mshtml/htmltextnode.c @@ -431,7 +431,6 @@ static void Text_init_dispex_info(dispex_data_t *info, compat_mode_t mode)
static const tid_t Text_iface_tids[] = { IHTMLDOMNode_tid, - IHTMLDOMNode2_tid, 0 }; dispex_static_data_t Text_dispex = { diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index bcd30096cd9..5ae7b524301 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1060,7 +1060,6 @@ typedef struct {
#define HTMLELEMENT_TIDS \ IHTMLDOMNode_tid, \ - IHTMLDOMNode2_tid, \ IHTMLUniqueName_tid
extern const DISPID HTMLElement_toString_dispids[]; diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index 52d91dbf117..14c73550949 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -519,6 +519,7 @@ sync_test("elem_props", function() { test_exposed("doScroll", v < 11); test_exposed("readyState", v < 11); test_exposed("clientTop", true); + test_exposed("ownerDocument", true); test_exposed("title", true); test_exposed("removeNode", true); test_exposed("replaceNode", true);
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlanchor.c | 1 - dlls/mshtml/htmlarea.c | 1 - dlls/mshtml/htmlbody.c | 1 - dlls/mshtml/htmlelem.c | 17 ++++++----------- dlls/mshtml/htmlform.c | 1 - dlls/mshtml/htmlframe.c | 2 -- dlls/mshtml/htmlgeneric.c | 1 - dlls/mshtml/htmlhead.c | 4 ---- dlls/mshtml/htmlimg.c | 6 ------ dlls/mshtml/htmlinput.c | 3 --- dlls/mshtml/htmllink.c | 1 - dlls/mshtml/htmlobject.c | 2 -- dlls/mshtml/htmlscript.c | 1 - dlls/mshtml/htmlselect.c | 2 -- dlls/mshtml/htmlstyleelem.c | 5 ----- dlls/mshtml/htmltable.c | 3 --- dlls/mshtml/htmltextarea.c | 1 - dlls/mshtml/htmltextnode.c | 7 +------ dlls/mshtml/mshtml_private.h | 5 ----- dlls/mshtml/svg.c | 4 ---- 20 files changed, 7 insertions(+), 61 deletions(-)
diff --git a/dlls/mshtml/htmlanchor.c b/dlls/mshtml/htmlanchor.c index bd0e48bd7de..4ea9533c33d 100644 --- a/dlls/mshtml/htmlanchor.c +++ b/dlls/mshtml/htmlanchor.c @@ -837,7 +837,6 @@ static void HTMLAnchorElement_init_dispex_info(dispex_data_t *info, compat_mode_
static const tid_t HTMLAnchorElement_iface_tids[] = { IHTMLAnchorElement_tid, - HTMLELEMENT_TIDS, 0 };
diff --git a/dlls/mshtml/htmlarea.c b/dlls/mshtml/htmlarea.c index e0fb7a90ab0..36dabdd3805 100644 --- a/dlls/mshtml/htmlarea.c +++ b/dlls/mshtml/htmlarea.c @@ -447,7 +447,6 @@ static void HTMLAreaElement_init_dispex_info(dispex_data_t *info, compat_mode_t }
static const tid_t HTMLAreaElement_iface_tids[] = { - HTMLELEMENT_TIDS, IHTMLAreaElement_tid, 0 }; diff --git a/dlls/mshtml/htmlbody.c b/dlls/mshtml/htmlbody.c index 9057dfc7cd9..4ca08e0e3a4 100644 --- a/dlls/mshtml/htmlbody.c +++ b/dlls/mshtml/htmlbody.c @@ -888,7 +888,6 @@ static const event_target_vtbl_t HTMLBodyElement_event_target_vtbl = { static const tid_t HTMLBodyElement_iface_tids[] = { IHTMLBodyElement_tid, IHTMLBodyElement2_tid, - HTMLELEMENT_TIDS, IHTMLTextContainer_tid, 0 }; diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index cbf45eea1a6..ae650a39443 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -6793,6 +6793,8 @@ void HTMLElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode) mode >= COMPAT_MODE_IE10 ? elem_ie10_hooks : mode >= COMPAT_MODE_IE9 ? elem_ie9_hooks : NULL); dispex_info_add_interface(info, IHTMLElement4_tid, mode >= COMPAT_MODE_IE9 ? elem4_ie9_hooks : NULL); + dispex_info_add_interface(info, IHTMLDOMNode_tid, NULL); + dispex_info_add_interface(info, IHTMLUniqueName_tid, NULL); }
const DISPID HTMLElement_toString_dispids[] = { @@ -6800,11 +6802,6 @@ const DISPID HTMLElement_toString_dispids[] = { DISPID_UNKNOWN };
-const tid_t HTMLElement_iface_tids[] = { - HTMLELEMENT_TIDS, - 0 -}; - static const event_target_vtbl_t HTMLElement_event_target_vtbl = { { HTMLELEMENT_DISPEX_VTBL_ENTRIES, @@ -7432,16 +7429,14 @@ dispex_static_data_t HTMLElement_dispex = { .prototype_id = PROT_Element, .vtbl = &HTMLElement_event_target_vtbl.dispex_vtbl, .disp_tid = DispHTMLUnknownElement_tid, - .iface_tids = HTMLElement_iface_tids, .init_info = HTMLElement_init_dispex_info, };
static dispex_static_data_t LegacyUnknownElement_dispex = { - "HTMLUnknownElement", - &HTMLElement_event_target_vtbl.dispex_vtbl, - DispHTMLUnknownElement_tid, - HTMLElement_iface_tids, - HTMLElement_init_dispex_info + .name = "HTMLUnknownElement", + .vtbl = &HTMLElement_event_target_vtbl.dispex_vtbl, + .disp_tid = DispHTMLUnknownElement_tid, + .init_info = HTMLElement_init_dispex_info };
void HTMLElement_Init(HTMLElement *This, HTMLDocumentNode *doc, nsIDOMElement *nselem, dispex_static_data_t *dispex_data) diff --git a/dlls/mshtml/htmlform.c b/dlls/mshtml/htmlform.c index f9fa68c498a..153133493f6 100644 --- a/dlls/mshtml/htmlform.c +++ b/dlls/mshtml/htmlform.c @@ -903,7 +903,6 @@ static const event_target_vtbl_t HTMLFormElement_event_target_vtbl = { };
static const tid_t HTMLFormElement_iface_tids[] = { - HTMLELEMENT_TIDS, IHTMLFormElement_tid, 0 }; diff --git a/dlls/mshtml/htmlframe.c b/dlls/mshtml/htmlframe.c index bc8e76c3448..193be9f6323 100644 --- a/dlls/mshtml/htmlframe.c +++ b/dlls/mshtml/htmlframe.c @@ -921,7 +921,6 @@ static const event_target_vtbl_t HTMLFrameElement_event_target_vtbl = { };
static const tid_t HTMLFrameElement_iface_tids[] = { - HTMLELEMENT_TIDS, IHTMLFrameBase_tid, IHTMLFrameBase2_tid, IHTMLFrameElement3_tid, @@ -1357,7 +1356,6 @@ static const event_target_vtbl_t HTMLIFrameElement_event_target_vtbl = { };
static const tid_t HTMLIFrameElement_iface_tids[] = { - HTMLELEMENT_TIDS, IHTMLFrameBase_tid, IHTMLFrameBase2_tid, IHTMLIFrameElement_tid, diff --git a/dlls/mshtml/htmlgeneric.c b/dlls/mshtml/htmlgeneric.c index acd4998832b..e57e3558a49 100644 --- a/dlls/mshtml/htmlgeneric.c +++ b/dlls/mshtml/htmlgeneric.c @@ -109,7 +109,6 @@ static const event_target_vtbl_t HTMLGenericElement_event_target_vtbl = { };
static const tid_t HTMLUnknownElement_iface_tids[] = { - HTMLELEMENT_TIDS, IHTMLGenericElement_tid, 0 }; diff --git a/dlls/mshtml/htmlhead.c b/dlls/mshtml/htmlhead.c index 36c66065b29..7f05e506dce 100644 --- a/dlls/mshtml/htmlhead.c +++ b/dlls/mshtml/htmlhead.c @@ -122,7 +122,6 @@ static const event_target_vtbl_t HTMLTitleElement_event_target_vtbl = { };
static const tid_t HTMLTitleElement_iface_tids[] = { - HTMLELEMENT_TIDS, IHTMLTitleElement_tid, 0 }; @@ -238,7 +237,6 @@ static const event_target_vtbl_t HTMLHtmlElement_event_target_vtbl = { };
static const tid_t HTMLHtmlElement_iface_tids[] = { - HTMLELEMENT_TIDS, IHTMLHtmlElement_tid, 0 }; @@ -417,7 +415,6 @@ static const event_target_vtbl_t HTMLMetaElement_event_target_vtbl = { };
static const tid_t HTMLMetaElement_iface_tids[] = { - HTMLELEMENT_TIDS, IHTMLMetaElement_tid, 0 }; @@ -525,7 +522,6 @@ static const event_target_vtbl_t HTMLHeadElement_event_target_vtbl = { };
static const tid_t HTMLHeadElement_iface_tids[] = { - HTMLELEMENT_TIDS, IHTMLHeadElement_tid, 0 }; diff --git a/dlls/mshtml/htmlimg.c b/dlls/mshtml/htmlimg.c index baa55462039..f6a4b992ab6 100644 --- a/dlls/mshtml/htmlimg.c +++ b/dlls/mshtml/htmlimg.c @@ -666,11 +666,6 @@ static const event_target_vtbl_t HTMLImgElement_event_target_vtbl = { .handle_event = HTMLElement_handle_event };
-static const tid_t HTMLImgElement_iface_tids[] = { - HTMLELEMENT_TIDS, - 0 -}; - static void HTMLImgElement_init_dispex_info(dispex_data_t *info, compat_mode_t mode) { static const dispex_hook_t img_ie11_hooks[] = { @@ -688,7 +683,6 @@ dispex_static_data_t HTMLImageElement_dispex = { .prototype_id = PROT_HTMLElement, .vtbl = &HTMLImgElement_event_target_vtbl.dispex_vtbl, .disp_tid = DispHTMLImg_tid, - .iface_tids = HTMLImgElement_iface_tids, .init_info = HTMLImgElement_init_dispex_info, };
diff --git a/dlls/mshtml/htmlinput.c b/dlls/mshtml/htmlinput.c index 6d436ecffc1..4605005d6fd 100644 --- a/dlls/mshtml/htmlinput.c +++ b/dlls/mshtml/htmlinput.c @@ -1283,7 +1283,6 @@ static const event_target_vtbl_t HTMLInputElement_event_target_vtbl = { };
static const tid_t HTMLInputElement_iface_tids[] = { - HTMLELEMENT_TIDS, IHTMLInputElement_tid, IHTMLInputTextElement2_tid, 0 @@ -1427,7 +1426,6 @@ static const event_target_vtbl_t HTMLLabelElement_event_target_vtbl = { };
static const tid_t HTMLLabelElement_iface_tids[] = { - HTMLELEMENT_TIDS, IHTMLLabelElement_tid, 0 }; @@ -1714,7 +1712,6 @@ static const event_target_vtbl_t HTMLButtonElement_event_target_vtbl = { };
static const tid_t HTMLButtonElement_iface_tids[] = { - HTMLELEMENT_TIDS, IHTMLButtonElement_tid, 0 }; diff --git a/dlls/mshtml/htmllink.c b/dlls/mshtml/htmllink.c index 6ceb5bc2249..c9e35d69d95 100644 --- a/dlls/mshtml/htmllink.c +++ b/dlls/mshtml/htmllink.c @@ -383,7 +383,6 @@ static const event_target_vtbl_t HTMLLinkElement_event_target_vtbl = { };
static const tid_t HTMLLinkElement_iface_tids[] = { - HTMLELEMENT_TIDS, IHTMLLinkElement_tid, 0 }; diff --git a/dlls/mshtml/htmlobject.c b/dlls/mshtml/htmlobject.c index 77ccaf12936..c99afb03137 100644 --- a/dlls/mshtml/htmlobject.c +++ b/dlls/mshtml/htmlobject.c @@ -679,7 +679,6 @@ static const event_target_vtbl_t HTMLObjectElement_event_target_vtbl = { static const tid_t HTMLObjectElement_iface_tids[] = { IHTMLObjectElement2_tid, IHTMLObjectElement_tid, - HTMLELEMENT_TIDS, 0 }; dispex_static_data_t HTMLObjectElement_dispex = { @@ -884,7 +883,6 @@ static const event_target_vtbl_t HTMLEmbedElement_event_target_vtbl = { };
static const tid_t HTMLEmbedElement_iface_tids[] = { - HTMLELEMENT_TIDS, IHTMLEmbedElement_tid, 0 }; diff --git a/dlls/mshtml/htmlscript.c b/dlls/mshtml/htmlscript.c index 2a14b94bc08..b490e374356 100644 --- a/dlls/mshtml/htmlscript.c +++ b/dlls/mshtml/htmlscript.c @@ -409,7 +409,6 @@ HRESULT script_elem_from_nsscript(nsIDOMHTMLScriptElement *nsscript, HTMLScriptE }
static const tid_t HTMLScriptElement_iface_tids[] = { - HTMLELEMENT_TIDS, IHTMLScriptElement_tid, 0 }; diff --git a/dlls/mshtml/htmlselect.c b/dlls/mshtml/htmlselect.c index 01729222041..2d02589db38 100644 --- a/dlls/mshtml/htmlselect.c +++ b/dlls/mshtml/htmlselect.c @@ -341,7 +341,6 @@ static const event_target_vtbl_t HTMLOptionElement_event_target_vtbl = { };
static const tid_t HTMLOptionElement_iface_tids[] = { - HTMLELEMENT_TIDS, IHTMLOptionElement_tid, 0 }; @@ -1294,7 +1293,6 @@ static const event_target_vtbl_t HTMLSelectElement_event_target_vtbl = { };
static const tid_t HTMLSelectElement_tids[] = { - HTMLELEMENT_TIDS, IHTMLSelectElement_tid, 0 }; diff --git a/dlls/mshtml/htmlstyleelem.c b/dlls/mshtml/htmlstyleelem.c index 00142a353ec..b08e73b767e 100644 --- a/dlls/mshtml/htmlstyleelem.c +++ b/dlls/mshtml/htmlstyleelem.c @@ -331,16 +331,11 @@ static const event_target_vtbl_t HTMLStyleElement_event_target_vtbl = { .handle_event = HTMLElement_handle_event };
-static const tid_t HTMLStyleElement_iface_tids[] = { - HTMLELEMENT_TIDS, - 0 -}; dispex_static_data_t HTMLStyleElement_dispex = { .id = PROT_HTMLStyleElement, .prototype_id = PROT_HTMLElement, .vtbl = &HTMLStyleElement_event_target_vtbl.dispex_vtbl, .disp_tid = DispHTMLStyleElement_tid, - .iface_tids = HTMLStyleElement_iface_tids, .init_info = HTMLStyleElement_init_dispex_info, };
diff --git a/dlls/mshtml/htmltable.c b/dlls/mshtml/htmltable.c index b043dd4d773..934047412d6 100644 --- a/dlls/mshtml/htmltable.c +++ b/dlls/mshtml/htmltable.c @@ -431,7 +431,6 @@ static const NodeImplVtbl HTMLTableCellImplVtbl = { };
static const tid_t HTMLTableDataCellElement_iface_tids[] = { - HTMLELEMENT_TIDS, IHTMLTableCell_tid, 0 }; @@ -826,7 +825,6 @@ static const event_target_vtbl_t HTMLTableRowElement_event_target_vtbl = { };
static const tid_t HTMLTableRowElement_iface_tids[] = { - HTMLELEMENT_TIDS, IHTMLTableRow_tid, 0 }; @@ -1678,7 +1676,6 @@ static const event_target_vtbl_t HTMLTableElement_event_target_vtbl = { };
static const tid_t HTMLTableElement_iface_tids[] = { - HTMLELEMENT_TIDS, IHTMLTable_tid, IHTMLTable2_tid, IHTMLTable3_tid, diff --git a/dlls/mshtml/htmltextarea.c b/dlls/mshtml/htmltextarea.c index 4ab7ab961a9..659ebbe2776 100644 --- a/dlls/mshtml/htmltextarea.c +++ b/dlls/mshtml/htmltextarea.c @@ -410,7 +410,6 @@ static const event_target_vtbl_t HTMLTextAreaElement_event_target_vtbl = { };
static const tid_t HTMLTextAreaElement_iface_tids[] = { - HTMLELEMENT_TIDS, IHTMLTextAreaElement_tid, 0 }; diff --git a/dlls/mshtml/htmltextnode.c b/dlls/mshtml/htmltextnode.c index 9c4476dc79b..63158f7cb8a 100644 --- a/dlls/mshtml/htmltextnode.c +++ b/dlls/mshtml/htmltextnode.c @@ -661,13 +661,8 @@ static void Comment_init_dispex_info(dispex_data_t *info, compat_mode_t mode)
if(mode >= COMPAT_MODE_IE9) HTMLDOMNode_init_dispex_info(info, mode); - else { + else HTMLElement_init_dispex_info(info, mode); - dispex_info_add_interface(info, IHTMLElement_tid, NULL); - dispex_info_add_interface(info, IHTMLElement3_tid, NULL); - dispex_info_add_interface(info, IHTMLElement4_tid, NULL); - dispex_info_add_interface(info, IHTMLUniqueName_tid, NULL); - } CharacterData_init_dispex_info(info, mode);
dispex_info_add_interface(info, IHTMLCommentElement_tid, mode >= COMPAT_MODE_IE9 ? ie9_hooks : NULL); diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 5ae7b524301..abda9ba4b65 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1058,12 +1058,7 @@ typedef struct { unsigned unique_id; } HTMLElement;
-#define HTMLELEMENT_TIDS \ - IHTMLDOMNode_tid, \ - IHTMLUniqueName_tid - extern const DISPID HTMLElement_toString_dispids[]; -extern const tid_t HTMLElement_iface_tids[]; extern cp_static_data_t HTMLElementEvents2_data; #define HTMLELEMENT_CPC {&DIID_HTMLElementEvents2, &HTMLElementEvents2_data} extern const cpc_entry_t HTMLElement_cpc[]; diff --git a/dlls/mshtml/svg.c b/dlls/mshtml/svg.c index ab72e0c95d9..3baf422989a 100644 --- a/dlls/mshtml/svg.c +++ b/dlls/mshtml/svg.c @@ -161,7 +161,6 @@ dispex_static_data_t SVGElement_dispex = { .prototype_id = PROT_Element, .vtbl = &SVGElement_event_target_vtbl.dispex_vtbl, .disp_tid = DispHTMLUnknownElement_tid, - .iface_tids = HTMLElement_iface_tids, .init_info = HTMLElement_init_dispex_info, };
@@ -662,7 +661,6 @@ dispex_static_data_t SVGSVGElement_dispex = { .prototype_id = PROT_SVGElement, .vtbl = &SVGSVGElement_event_target_vtbl.dispex_vtbl, .disp_tid = DispHTMLUnknownElement_tid, - .iface_tids = HTMLElement_iface_tids, .init_info = HTMLElement_init_dispex_info, };
@@ -793,7 +791,6 @@ dispex_static_data_t SVGCircleElement_dispex = { .prototype_id = PROT_SVGElement, .vtbl = &SVGCircleElement_event_target_vtbl.dispex_vtbl, .disp_tid = DispHTMLUnknownElement_tid, - .iface_tids = HTMLElement_iface_tids, .init_info = HTMLElement_init_dispex_info, };
@@ -1010,7 +1007,6 @@ dispex_static_data_t SVGTSpanElement_dispex = { .prototype_id = PROT_SVGTextPositioningElement, .vtbl = &SVGTSpanElement_event_target_vtbl.dispex_vtbl, .disp_tid = DispHTMLUnknownElement_tid, - .iface_tids = HTMLElement_iface_tids, .init_info = HTMLElement_init_dispex_info, };
Jacek Caban (@jacek) commented about dlls/mshtml/mshtml_private_iface.idl:
HRESULT performance([out, retval] VARIANT *p);
}
+[
- odl,
- oleautomation,
- dual,
- hidden,
- uuid(465908fd-f394-489f-b7a3-4c00fbbe9eea)
+] +interface IWineHTMLDOMNodePrivate : IDispatch +{
- [propget, id(1)]
Unless I'm missing something, we could use `id(DISPID_IHTMLELEMENT6_IE9_HASATTRIBUTES)` here and it would shadow `IHTMLElement6`'s property without messing with hooks.
Jacek Caban (@jacek) commented about dlls/mshtml/mshtml_private.h:
#define HTMLELEMENT_TIDS \ IHTMLDOMNode_tid, \ IHTMLDOMNode2_tid, \
- IHTMLElement_tid, \ IHTMLElement4_tid, \ IHTMLUniqueName_tid
+extern const DISPID HTMLElement_toString_dispids[];
It's just a single dispid in two places, let's keep it "duplicated" locally.
On Wed Nov 27 18:47:07 2024 +0000, Jacek Caban wrote:
Unless I'm missing something, we could use `id(DISPID_IHTMLELEMENT6_IE9_HASATTRIBUTES)` here and it would shadow `IHTMLElement6`'s property without messing with hooks.
Oh, interesting, I didn't think of that. I always thought I'm supposed to avoid conflicts.
On Wed Nov 27 19:09:41 2024 +0000, Gabriel Ivăncescu wrote:
Oh, interesting, I didn't think of that. I always thought I'm supposed to avoid conflicts.
We're usually supposed to avoid them because shadowing is usually not what we want. Also note that it wouldn't work if that id would conflict with some other non-element nodes, but looking at `mshtmdid.h`, that seems safe.