From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/htmlelem.c | 91 ++++++++++++++++++++++++++++++++++++ dlls/mshtml/mshtml_private.h | 2 + dlls/mshtml/tests/dom.c | 12 +++++ 3 files changed, 105 insertions(+)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index a46a71755d9..22ac9fec0dc 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -8231,6 +8231,94 @@ static const IHTMLAttributeCollection3Vtbl HTMLAttributeCollection3Vtbl = { HTMLAttributeCollection3_get_length };
+static inline HTMLAttributeCollection *impl_from_IHTMLAttributeCollection4(IHTMLAttributeCollection4 *iface) +{ + return CONTAINING_RECORD(iface, HTMLAttributeCollection, IHTMLAttributeCollection4_iface); +} + +DISPEX_IDISPATCH_IMPL(HTMLAttributeCollection4, IHTMLAttributeCollection4, + impl_from_IHTMLAttributeCollection4(iface)->dispex) + +static HRESULT WINAPI HTMLAttributeCollection4_getNamedItemNS(IHTMLAttributeCollection4 *iface, VARIANT *ns, + BSTR name, IHTMLDOMAttribute2 **p) +{ + HTMLAttributeCollection *This = impl_from_IHTMLAttributeCollection4(iface); + FIXME("(%p)->(%s %p)\n", This, debugstr_w(name), p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLAttributeCollection4_setNamedItemNS(IHTMLAttributeCollection4 *iface, + IHTMLDOMAttribute2 *node, IHTMLDOMAttribute2 **p) +{ + HTMLAttributeCollection *This = impl_from_IHTMLAttributeCollection4(iface); + FIXME("(%p)->(%p %p)\n", This, node, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLAttributeCollection4_removeNamedItemNS(IHTMLAttributeCollection4 *iface, VARIANT *ns, + BSTR name, IHTMLDOMAttribute2 **p) +{ + HTMLAttributeCollection *This = impl_from_IHTMLAttributeCollection4(iface); + FIXME("(%p)->(%s %p)\n", This, debugstr_w(name), p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLAttributeCollection4_getNamedItem(IHTMLAttributeCollection4 *iface, BSTR name, + IHTMLDOMAttribute2 **p) +{ + HTMLAttributeCollection *This = impl_from_IHTMLAttributeCollection4(iface); + FIXME("(%p)->(%s %p)\n", This, debugstr_w(name), p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLAttributeCollection4_setNamedItem(IHTMLAttributeCollection4 *iface, + IHTMLDOMAttribute2 *node, IHTMLDOMAttribute2 **p) +{ + HTMLAttributeCollection *This = impl_from_IHTMLAttributeCollection4(iface); + FIXME("(%p)->(%p %p)\n", This, node, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLAttributeCollection4_removeNamedItem(IHTMLAttributeCollection4 *iface, + BSTR name, IHTMLDOMAttribute2 **p) +{ + HTMLAttributeCollection *This = impl_from_IHTMLAttributeCollection4(iface); + FIXME("(%p)->(%s %p)\n", This, debugstr_w(name), p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLAttributeCollection4_item(IHTMLAttributeCollection4 *iface, LONG index, IHTMLDOMAttribute2 **p) +{ + HTMLAttributeCollection *This = impl_from_IHTMLAttributeCollection4(iface); + FIXME("(%p)->(%ld %p)\n", This, index, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLAttributeCollection4_get_length(IHTMLAttributeCollection4 *iface, LONG *p) +{ + HTMLAttributeCollection *This = impl_from_IHTMLAttributeCollection4(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static const IHTMLAttributeCollection4Vtbl HTMLAttributeCollection4Vtbl = { + HTMLAttributeCollection4_QueryInterface, + HTMLAttributeCollection4_AddRef, + HTMLAttributeCollection4_Release, + HTMLAttributeCollection4_GetTypeInfoCount, + HTMLAttributeCollection4_GetTypeInfo, + HTMLAttributeCollection4_GetIDsOfNames, + HTMLAttributeCollection4_Invoke, + HTMLAttributeCollection4_getNamedItemNS, + HTMLAttributeCollection4_setNamedItemNS, + HTMLAttributeCollection4_removeNamedItemNS, + HTMLAttributeCollection4_getNamedItem, + HTMLAttributeCollection4_setNamedItem, + HTMLAttributeCollection4_removeNamedItem, + HTMLAttributeCollection4_item, + HTMLAttributeCollection4_get_length +}; + static inline HTMLAttributeCollection *HTMLAttributeCollection_from_DispatchEx(DispatchEx *iface) { return CONTAINING_RECORD(iface, HTMLAttributeCollection, dispex); @@ -8246,6 +8334,8 @@ static void *HTMLAttributeCollection_query_interface(DispatchEx *dispex, REFIID return &This->IHTMLAttributeCollection2_iface; if(IsEqualGUID(&IID_IHTMLAttributeCollection3, riid)) return &This->IHTMLAttributeCollection3_iface; + if(IsEqualGUID(&IID_IHTMLAttributeCollection4, riid)) + return &This->IHTMLAttributeCollection4_iface;
return NULL; } @@ -8382,6 +8472,7 @@ HRESULT HTMLElement_get_attr_col(HTMLDOMNode *iface, HTMLAttributeCollection **a This->attrs->IHTMLAttributeCollection_iface.lpVtbl = &HTMLAttributeCollectionVtbl; This->attrs->IHTMLAttributeCollection2_iface.lpVtbl = &HTMLAttributeCollection2Vtbl; This->attrs->IHTMLAttributeCollection3_iface.lpVtbl = &HTMLAttributeCollection3Vtbl; + This->attrs->IHTMLAttributeCollection4_iface.lpVtbl = &HTMLAttributeCollection4Vtbl;
IHTMLDOMNode_AddRef(&This->node.IHTMLDOMNode_iface); This->attrs->elem = This; diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index fe18f01e553..5a067967a8b 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -183,6 +183,7 @@ struct constructor; XIID(IHTMLAttributeCollection) \ XIID(IHTMLAttributeCollection2) \ XIID(IHTMLAttributeCollection3) \ + XIID(IHTMLAttributeCollection4) \ XIID(IHTMLBodyElement) \ XIID(IHTMLBodyElement2) \ XIID(IHTMLButtonElement) \ @@ -1329,6 +1330,7 @@ struct HTMLAttributeCollection { IHTMLAttributeCollection IHTMLAttributeCollection_iface; IHTMLAttributeCollection2 IHTMLAttributeCollection2_iface; IHTMLAttributeCollection3 IHTMLAttributeCollection3_iface; + IHTMLAttributeCollection4 IHTMLAttributeCollection4_iface;
HTMLElement *elem; struct list attrs; diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index 914267c67a1..cd13f73ba17 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -510,6 +510,17 @@ static const IID * const computed_style_iids[] = { NULL };
+static const IID * const attr_col_iids[] = { + &IID_IUnknown, + &IID_IDispatch, + &IID_IDispatchEx, + &IID_IHTMLAttributeCollection, + &IID_IHTMLAttributeCollection2, + &IID_IHTMLAttributeCollection3, + &IID_IHTMLAttributeCollection4, + NULL +}; + static const IID * const img_factory_iids[] = { &IID_IUnknown, &IID_IDispatch, @@ -3883,6 +3894,7 @@ static void test_attr_collection(IHTMLElement *elem) hres = IHTMLDOMNode_get_attributes(node, &attr); ok(hres == S_OK, "get_attributes failed: %08lx\n", hres); ok(iface_cmp((IUnknown*)disp, (IUnknown*)attr), "disp != attr\n"); + test_ifaces((IUnknown *)attr, attr_col_iids); IDispatch_Release(attr); IHTMLDOMNode_Release(node);