From: Gabriel Ivăncescu gabrielopcode@gmail.com
Instead of HTMLElement.
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlelem.c | 230 ++++++++++++++++++++++++++++++ dlls/mshtml/tests/documentmode.js | 56 ++++++++ 2 files changed, 286 insertions(+)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 72aeaae816e..2d79a909341 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -7236,9 +7236,239 @@ static const IWineHTMLElementPrivateVtbl WineHTMLElementPrivateVtbl = { htmlelement_private_get_classList, };
+static void Element_init_dispex_info(dispex_data_t *info, compat_mode_t mode) +{ + static const dispex_hook_t elem_hooks[] = { + {DISPID_IHTMLELEMENT_CLASSNAME}, + {DISPID_IHTMLELEMENT_ID}, + {DISPID_IHTMLELEMENT_PARENTELEMENT}, + {DISPID_IHTMLELEMENT_STYLE}, + {DISPID_IHTMLELEMENT_ONHELP}, + {DISPID_IHTMLELEMENT_ONCLICK}, + {DISPID_IHTMLELEMENT_ONDBLCLICK}, + {DISPID_IHTMLELEMENT_ONKEYDOWN}, + {DISPID_IHTMLELEMENT_ONKEYUP}, + {DISPID_IHTMLELEMENT_ONKEYPRESS}, + {DISPID_IHTMLELEMENT_ONMOUSEOUT}, + {DISPID_IHTMLELEMENT_ONMOUSEOVER}, + {DISPID_IHTMLELEMENT_ONMOUSEMOVE}, + {DISPID_IHTMLELEMENT_ONMOUSEDOWN}, + {DISPID_IHTMLELEMENT_ONMOUSEUP}, + {DISPID_IHTMLELEMENT_DOCUMENT}, + {DISPID_IHTMLELEMENT_TITLE}, + {DISPID_IHTMLELEMENT_LANGUAGE}, + {DISPID_IHTMLELEMENT_ONSELECTSTART}, + {DISPID_IHTMLELEMENT_SCROLLINTOVIEW}, + {DISPID_IHTMLELEMENT_CONTAINS}, + {DISPID_IHTMLELEMENT_SOURCEINDEX}, + {DISPID_IHTMLELEMENT_RECORDNUMBER}, + {DISPID_IHTMLELEMENT_LANG}, + {DISPID_IHTMLELEMENT_OFFSETLEFT}, + {DISPID_IHTMLELEMENT_OFFSETTOP}, + {DISPID_IHTMLELEMENT_OFFSETWIDTH}, + {DISPID_IHTMLELEMENT_OFFSETHEIGHT}, + {DISPID_IHTMLELEMENT_OFFSETPARENT}, + {DISPID_IHTMLELEMENT_INNERHTML}, + {DISPID_IHTMLELEMENT_INNERTEXT}, + {DISPID_IHTMLELEMENT_OUTERHTML}, + {DISPID_IHTMLELEMENT_OUTERTEXT}, + {DISPID_IHTMLELEMENT_INSERTADJACENTHTML}, + {DISPID_IHTMLELEMENT_INSERTADJACENTTEXT}, + {DISPID_IHTMLELEMENT_PARENTTEXTEDIT}, + {DISPID_IHTMLELEMENT_ISTEXTEDIT}, + {DISPID_IHTMLELEMENT_CLICK}, + {DISPID_IHTMLELEMENT_FILTERS}, + {DISPID_IHTMLELEMENT_ONDRAGSTART}, + {DISPID_IHTMLELEMENT_TOSTRING}, + {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_CHILDREN}, + {DISPID_IHTMLELEMENT_ALL}, + {DISPID_UNKNOWN} + }; + static const dispex_hook_t elem2_hooks[] = { + {DISPID_IHTMLELEMENT2_SCOPENAME}, + {DISPID_IHTMLELEMENT2_SETCAPTURE}, + {DISPID_IHTMLELEMENT2_RELEASECAPTURE}, + {DISPID_IHTMLELEMENT2_ONLOSECAPTURE}, + {DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT}, + {DISPID_IHTMLELEMENT2_DOSCROLL}, + {DISPID_IHTMLELEMENT2_ONSCROLL}, + {DISPID_IHTMLELEMENT2_ONDRAG}, + {DISPID_IHTMLELEMENT2_ONDRAGEND}, + {DISPID_IHTMLELEMENT2_ONDRAGENTER}, + {DISPID_IHTMLELEMENT2_ONDRAGOVER}, + {DISPID_IHTMLELEMENT2_ONDRAGLEAVE}, + {DISPID_IHTMLELEMENT2_ONDROP}, + {DISPID_IHTMLELEMENT2_ONBEFORECUT}, + {DISPID_IHTMLELEMENT2_ONCUT}, + {DISPID_IHTMLELEMENT2_ONBEFORECOPY}, + {DISPID_IHTMLELEMENT2_ONCOPY}, + {DISPID_IHTMLELEMENT2_ONBEFOREPASTE}, + {DISPID_IHTMLELEMENT2_ONPASTE}, + {DISPID_IHTMLELEMENT2_CURRENTSTYLE}, + {DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE}, + {DISPID_IHTMLELEMENT2_SETEXPRESSION}, + {DISPID_IHTMLELEMENT2_GETEXPRESSION}, + {DISPID_IHTMLELEMENT2_REMOVEEXPRESSION}, + {DISPID_IHTMLELEMENT2_TABINDEX}, + {DISPID_IHTMLELEMENT2_FOCUS}, + {DISPID_IHTMLELEMENT2_ACCESSKEY}, + {DISPID_IHTMLELEMENT2_ONBLUR}, + {DISPID_IHTMLELEMENT2_ONFOCUS}, + {DISPID_IHTMLELEMENT2_ONRESIZE}, + {DISPID_IHTMLELEMENT2_BLUR}, + {DISPID_IHTMLELEMENT2_ADDFILTER}, + {DISPID_IHTMLELEMENT2_REMOVEFILTER}, + {DISPID_IHTMLELEMENT2_ATTACHEVENT}, + {DISPID_IHTMLELEMENT2_DETACHEVENT}, + {DISPID_IHTMLELEMENT2_READYSTATE}, + {DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE}, + {DISPID_IHTMLELEMENT2_ONROWSDELETE}, + {DISPID_IHTMLELEMENT2_ONROWSINSERTED}, + {DISPID_IHTMLELEMENT2_ONCELLCHANGE}, + {DISPID_IHTMLELEMENT2_DIR}, + {DISPID_IHTMLELEMENT2_CREATECONTROLRANGE}, + {DISPID_IHTMLELEMENT2_CLEARATTRIBUTES}, + {DISPID_IHTMLELEMENT2_MERGEATTRIBUTES}, + {DISPID_IHTMLELEMENT2_ONCONTEXTMENU}, + {DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT}, + {DISPID_IHTMLELEMENT2_APPLYELEMENT}, + {DISPID_IHTMLELEMENT2_GETADJACENTTEXT}, + {DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT}, + {DISPID_IHTMLELEMENT2_CANHAVECHILDREN}, + {DISPID_IHTMLELEMENT2_ADDBEHAVIOR}, + {DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR}, + {DISPID_IHTMLELEMENT2_RUNTIMESTYLE}, + {DISPID_IHTMLELEMENT2_BEHAVIORURNS}, + {DISPID_IHTMLELEMENT2_TAGURN}, + {DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS}, + {DISPID_IHTMLELEMENT2_READYSTATEVALUE}, + {DISPID_UNKNOWN} + }; + static const dispex_hook_t elem3_ie11_hooks[] = { + {DISPID_IHTMLELEMENT3_FIREEVENT}, + + /* common for all supported modes */ + {DISPID_IHTMLELEMENT3_MERGEATTRIBUTES}, + {DISPID_IHTMLELEMENT3_ISMULTILINE}, + {DISPID_IHTMLELEMENT3_CANHAVEHTML}, + {DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE}, + {DISPID_IHTMLELEMENT3_ONPAGE}, + {DISPID_IHTMLELEMENT3_INFLATEBLOCK}, + {DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE}, + {DISPID_IHTMLELEMENT3_SETACTIVE}, + {DISPID_IHTMLELEMENT3_CONTENTEDITABLE}, + {DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE}, + {DISPID_IHTMLELEMENT3_HIDEFOCUS}, + {DISPID_IHTMLELEMENT3_DISABLED}, + {DISPID_IHTMLELEMENT3_ISDISABLED}, + {DISPID_IHTMLELEMENT3_ONMOVE}, + {DISPID_IHTMLELEMENT3_ONCONTROLSELECT}, + {DISPID_IHTMLELEMENT3_ONRESIZESTART}, + {DISPID_IHTMLELEMENT3_ONRESIZEEND}, + {DISPID_IHTMLELEMENT3_ONMOVESTART}, + {DISPID_IHTMLELEMENT3_ONMOVEEND}, + {DISPID_IHTMLELEMENT3_ONMOUSEENTER}, + {DISPID_IHTMLELEMENT3_ONMOUSELEAVE}, + {DISPID_IHTMLELEMENT3_ONACTIVATE}, + {DISPID_IHTMLELEMENT3_ONDEACTIVATE}, + {DISPID_IHTMLELEMENT3_DRAGDROP}, + {DISPID_IHTMLELEMENT3_GLYPHMODE}, + {DISPID_UNKNOWN} + }; + const dispex_hook_t *const elem3_hooks = elem3_ie11_hooks + 1; + static const dispex_hook_t elem4_hooks[] = { + {DISPID_IHTMLELEMENT4_ONMOUSEWHEEL}, + {DISPID_IHTMLELEMENT4_NORMALIZE}, + {DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE}, + {DISPID_IHTMLELEMENT4_ONFOCUSIN}, + {DISPID_IHTMLELEMENT4_ONFOCUSOUT}, + {DISPID_UNKNOWN} + }; + static const dispex_hook_t elem6_ie10_hooks[] = { + {DISPID_IHTMLELEMENT6_HASATTRIBUTENS, IHTMLElement6_hasAttributeNS_hook}, + {DISPID_IHTMLELEMENT6_GETATTRIBUTENS, IHTMLElement6_getAttributeNS_hook}, + {DISPID_IHTMLELEMENT6_REMOVEATTRIBUTENS, IHTMLElement6_removeAttributeNS_hook}, + {DISPID_IHTMLELEMENT6_IE9_SETATTRIBUTE, IHTMLElement6_setAttribute_hook}, + + /* common for all supported modes */ + {DISPID_IHTMLELEMENT6_SETATTRIBUTENS, IHTMLElement6_setAttributeNS_hook}, + + {DISPID_IHTMLELEMENT6_IE9_NODENAME}, + {DISPID_IHTMLELEMENT6_GETELEMENTSBYCLASSNAME}, + {DISPID_IHTMLELEMENT6_ONABORT}, + {DISPID_IHTMLELEMENT6_ONCANPLAY}, + {DISPID_IHTMLELEMENT6_ONCANPLAYTHROUGH}, + {DISPID_IHTMLELEMENT6_ONCHANGE}, + {DISPID_IHTMLELEMENT6_ONDURATIONCHANGE}, + {DISPID_IHTMLELEMENT6_ONEMPTIED}, + {DISPID_IHTMLELEMENT6_ONENDED}, + {DISPID_IHTMLELEMENT6_ONERROR}, + {DISPID_IHTMLELEMENT6_ONINPUT}, + {DISPID_IHTMLELEMENT6_ONLOAD}, + {DISPID_IHTMLELEMENT6_ONLOADEDDATA}, + {DISPID_IHTMLELEMENT6_ONLOADEDMETADATA}, + {DISPID_IHTMLELEMENT6_ONLOADSTART}, + {DISPID_IHTMLELEMENT6_ONPAUSE}, + {DISPID_IHTMLELEMENT6_ONPLAY}, + {DISPID_IHTMLELEMENT6_ONPLAYING}, + {DISPID_IHTMLELEMENT6_ONPROGRESS}, + {DISPID_IHTMLELEMENT6_ONRATECHANGE}, + {DISPID_IHTMLELEMENT6_ONRESET}, + {DISPID_IHTMLELEMENT6_ONSEEKED}, + {DISPID_IHTMLELEMENT6_ONSEEKING}, + {DISPID_IHTMLELEMENT6_ONSELECT}, + {DISPID_IHTMLELEMENT6_ONSTALLED}, + {DISPID_IHTMLELEMENT6_ONSUBMIT}, + {DISPID_IHTMLELEMENT6_ONSUSPEND}, + {DISPID_IHTMLELEMENT6_ONTIMEUPDATE}, + {DISPID_IHTMLELEMENT6_ONVOLUMECHANGE}, + {DISPID_IHTMLELEMENT6_ONWAITING}, + {DISPID_IHTMLELEMENT6_IE9_HASATTRIBUTES}, + {DISPID_UNKNOWN} + }; + const dispex_hook_t *const elem6_hooks = elem6_ie10_hooks + 4; + static const dispex_hook_t elem7_ie11_hooks[] = { + {DISPID_IHTMLELEMENT7_ONMSPOINTERHOVER}, + + /* common for all supported modes */ + {DISPID_IHTMLELEMENT7_ONMSTRANSITIONSTART}, + {DISPID_IHTMLELEMENT7_ONMSTRANSITIONEND}, + {DISPID_IHTMLELEMENT7_ONMSANIMATIONSTART}, + {DISPID_IHTMLELEMENT7_ONMSANIMATIONEND}, + {DISPID_IHTMLELEMENT7_ONMSANIMATIONITERATION}, + {DISPID_IHTMLELEMENT7_ONINVALID}, + {DISPID_IHTMLELEMENT7_XMSACCELERATORKEY}, + {DISPID_IHTMLELEMENT7_SPELLCHECK}, + {DISPID_IHTMLELEMENT7_ONMSMANIPULATIONSTATECHANGED}, + {DISPID_IHTMLELEMENT7_ONCUECHANGE}, + {DISPID_UNKNOWN} + }; + const dispex_hook_t *const elem7_hooks = elem7_ie11_hooks + 1; + + dispex_info_add_interface(info, IHTMLElement2_tid, elem2_hooks); + dispex_info_add_interface(info, IHTMLElement6_tid, mode >= COMPAT_MODE_IE10 ? elem6_ie10_hooks : elem6_hooks); + if(mode >= COMPAT_MODE_IE10) + dispex_info_add_interface(info, IHTMLElement7_tid, mode >= COMPAT_MODE_IE11 ? elem7_ie11_hooks : elem7_hooks); + dispex_info_add_interface(info, IHTMLElement_tid, elem_hooks); + dispex_info_add_interface(info, IHTMLElement3_tid, mode >= COMPAT_MODE_IE11 ? elem3_ie11_hooks : elem3_hooks); + dispex_info_add_interface(info, IHTMLElement4_tid, elem4_hooks); + 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/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 2d79a909341..e47ebc515f1 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 881049c6cd3..52300cebac0 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1059,7 +1059,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 e47ebc515f1..1cc4b5ee6c8 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 | 5 +++++ dlls/mshtml/mshtml_private.h | 1 - dlls/mshtml/tests/documentmode.js | 4 +++- 5 files changed, 24 insertions(+), 4 deletions(-)
diff --git a/dlls/mshtml/htmlanchor.c b/dlls/mshtml/htmlanchor.c index 0e1642b07bf..dbdb86d5131 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_interface(info, IHTMLElement_tid, NULL); /* add toString */ +} + 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..550dd2876b8 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_interface(info, IHTMLElement_tid, NULL); /* add toString */ +} + 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 1cc4b5ee6c8..dd8b58eacf2 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,6 +6719,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); }
const tid_t HTMLElement_iface_tids[] = { diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 52300cebac0..1d41949aca6 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1058,7 +1058,6 @@ typedef struct { #define HTMLELEMENT_TIDS \ IHTMLDOMNode_tid, \ IHTMLDOMNode2_tid, \ - IHTMLElement_tid, \ IHTMLElement4_tid, \ IHTMLUniqueName_tid
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 dd8b58eacf2..0c6640f2b40 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 1d41949aca6..d82a3106b12 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) \ @@ -1012,6 +1013,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 0c6640f2b40..a18e5f7276d 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 tid_t HTMLElement_iface_tids[] = { 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 d82a3106b12..4e028edb7a7 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, \ - IHTMLElement4_tid, \ IHTMLUniqueName_tid
extern const tid_t HTMLElement_iface_tids[]; 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 a18e5f7276d..e95784daf56 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 e95784daf56..268dc62e084 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 268dc62e084..a6f7d6ea421 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 a6f7d6ea421..9c74cea9794 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 4e028edb7a7..f9e47698594 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1059,7 +1059,6 @@ typedef struct {
#define HTMLELEMENT_TIDS \ IHTMLDOMNode_tid, \ - IHTMLDOMNode2_tid, \ IHTMLUniqueName_tid
extern const tid_t HTMLElement_iface_tids[]; 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 dbdb86d5131..b112cf5cf3e 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 550dd2876b8..219ddc8feca 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 9c74cea9794..a8e7c8b040e 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -6793,13 +6793,10 @@ 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 tid_t HTMLElement_iface_tids[] = { - HTMLELEMENT_TIDS, - 0 -}; - static const event_target_vtbl_t HTMLElement_event_target_vtbl = { { HTMLELEMENT_DISPEX_VTBL_ENTRIES, @@ -7564,16 +7561,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 f9e47698594..aa3b504dde9 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1057,11 +1057,6 @@ typedef struct { unsigned unique_id; } HTMLElement;
-#define HTMLELEMENT_TIDS \ - IHTMLDOMNode_tid, \ - IHTMLUniqueName_tid - -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/htmlelem.c:
{DISPID_IHTMLELEMENT_FILTERS},
{DISPID_IHTMLELEMENT_ONDRAGSTART},
{DISPID_IHTMLELEMENT_TOSTRING},
{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_CHILDREN},
{DISPID_IHTMLELEMENT_ALL},
{DISPID_UNKNOWN}
- };
That's cryptic... you're filtering 52 out of 56 `IHTMLElement`'s dispids. To understand what you're doing here, I'd need to cross-check all of them to find out what's not present in this table. It seems to me that what you need here is a way to specify dispids that are actually meant to be exposed instead. It should be easy to have an optional allow-list in `process_interface` and a new helper like `dispex_info_add_dispids` exposing that.
Jacek Caban (@jacek) commented about dlls/mshtml/htmlelem.c:
{DISPID_IHTMLELEMENT6_ONPROGRESS},
{DISPID_IHTMLELEMENT6_ONRATECHANGE},
{DISPID_IHTMLELEMENT6_ONRESET},
{DISPID_IHTMLELEMENT6_ONSEEKED},
{DISPID_IHTMLELEMENT6_ONSEEKING},
{DISPID_IHTMLELEMENT6_ONSELECT},
{DISPID_IHTMLELEMENT6_ONSTALLED},
{DISPID_IHTMLELEMENT6_ONSUBMIT},
{DISPID_IHTMLELEMENT6_ONSUSPEND},
{DISPID_IHTMLELEMENT6_ONTIMEUPDATE},
{DISPID_IHTMLELEMENT6_ONVOLUMECHANGE},
{DISPID_IHTMLELEMENT6_ONWAITING},
{DISPID_IHTMLELEMENT6_IE9_HASATTRIBUTES},
{DISPID_UNKNOWN}
- };
- const dispex_hook_t *const elem6_hooks = elem6_ie10_hooks + 4;
With allow-lists from the other comments, you could easily avoid magic numbers like that and instead have it like: ``` add_dispids(elem6_ie10); if(compat_mode < IE10) add_dispids(elem6_ie9); ```
Jacek Caban (@jacek) commented about dlls/mshtml/htmlarea.c:
.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_interface(info, IHTMLElement_tid, NULL); /* add toString */
This is probably not a blocker, but note that exposing it like what will make `HTMLAreaElement.prototype.toString.call(document.createElement("a"))` work, while it should probably throw instead.
On Wed Nov 27 12:39:24 2024 +0000, Jacek Caban wrote:
This is probably not a blocker, but note that exposing it like what will make `HTMLAreaElement.prototype.toString.call(document.createElement("a"))` work, while it should probably throw instead.
Actually, it's probably better to keep it like that here for now. We should be able to switch the validation to prototype id instead of iid at some point, which will take care of cases like that transparently.
(Although if we're going to have allow-list, it may be good to be explicit about this being only for `toString`.)