From 25845c706582052b70b9f06f62f691e0d60839c6 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Mon, 9 Mar 2015 15:35:55 +0100 Subject: [PATCH] mshtml: Added IHTMLDOMAttribute2 stub implementation. --- dlls/mshtml/htmlattr.c | 224 +++++++++++++++++++++++++++++++++++ dlls/mshtml/mshtml_private.h | 2 + dlls/mshtml/tests/dom.c | 1 + 3 files changed, 227 insertions(+) diff --git a/dlls/mshtml/htmlattr.c b/dlls/mshtml/htmlattr.c index ae9bbfeb95d..b52f9f9e60a 100644 --- a/dlls/mshtml/htmlattr.c +++ b/dlls/mshtml/htmlattr.c @@ -49,6 +49,8 @@ static HRESULT WINAPI HTMLDOMAttribute_QueryInterface(IHTMLDOMAttribute *iface, *ppv = &This->IHTMLDOMAttribute_iface; }else if(IsEqualGUID(&IID_IHTMLDOMAttribute, riid)) { *ppv = &This->IHTMLDOMAttribute_iface; + }else if(IsEqualGUID(&IID_IHTMLDOMAttribute2, riid)) { + *ppv = &This->IHTMLDOMAttribute2_iface; }else if(dispex_query_interface(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { @@ -235,8 +237,229 @@ static const IHTMLDOMAttributeVtbl HTMLDOMAttributeVtbl = { HTMLDOMAttribute_get_specified }; +static inline HTMLDOMAttribute *impl_from_IHTMLDOMAttribute2(IHTMLDOMAttribute2 *iface) +{ + return CONTAINING_RECORD(iface, HTMLDOMAttribute, IHTMLDOMAttribute2_iface); +} + +static HRESULT WINAPI HTMLDOMAttribute2_QueryInterface(IHTMLDOMAttribute2 *iface, REFIID riid, void **ppv) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + return IHTMLDOMAttribute_QueryInterface(&This->IHTMLDOMAttribute_iface, riid, ppv); +} + +static ULONG WINAPI HTMLDOMAttribute2_AddRef(IHTMLDOMAttribute2 *iface) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + return IHTMLDOMAttribute_AddRef(&This->IHTMLDOMAttribute_iface); +} + +static ULONG WINAPI HTMLDOMAttribute2_Release(IHTMLDOMAttribute2 *iface) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + return IHTMLDOMAttribute_Release(&This->IHTMLDOMAttribute_iface); +} + +static HRESULT WINAPI HTMLDOMAttribute2_GetTypeInfoCount(IHTMLDOMAttribute2 *iface, UINT *pctinfo) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + return IDispatchEx_GetTypeInfoCount(&This->dispex.IDispatchEx_iface, pctinfo); +} + +static HRESULT WINAPI HTMLDOMAttribute2_GetTypeInfo(IHTMLDOMAttribute2 *iface, UINT iTInfo, + LCID lcid, ITypeInfo **ppTInfo) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo); +} + +static HRESULT WINAPI HTMLDOMAttribute2_GetIDsOfNames(IHTMLDOMAttribute2 *iface, REFIID riid, + LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface, riid, rgszNames, cNames, + lcid, rgDispId); +} + +static HRESULT WINAPI HTMLDOMAttribute2_Invoke(IHTMLDOMAttribute2 *iface, DISPID dispIdMember, + REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, + VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface, dispIdMember, riid, lcid, + wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); +} + +static HRESULT WINAPI HTMLDOMAttribute2_get_name(IHTMLDOMAttribute2 *iface, BSTR *p) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMAttribute2_put_value(IHTMLDOMAttribute2 *iface, BSTR v) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMAttribute2_get_value(IHTMLDOMAttribute2 *iface, BSTR *p) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMAttribute2_get_expando(IHTMLDOMAttribute2 *iface, VARIANT_BOOL *p) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMAttribute2_get_nodeType(IHTMLDOMAttribute2 *iface, LONG *p) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMAttribute2_get_parentNode(IHTMLDOMAttribute2 *iface, IHTMLDOMNode **p) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMAttribute2_get_childNodes(IHTMLDOMAttribute2 *iface, IDispatch **p) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMAttribute2_get_firstChild(IHTMLDOMAttribute2 *iface, IHTMLDOMNode **p) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMAttribute2_get_lastChild(IHTMLDOMAttribute2 *iface, IHTMLDOMNode **p) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMAttribute2_get_previousSibling(IHTMLDOMAttribute2 *iface, IHTMLDOMNode **p) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMAttribute2_get_nextSibling(IHTMLDOMAttribute2 *iface, IHTMLDOMNode **p) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMAttribute2_get_attributes(IHTMLDOMAttribute2 *iface, IDispatch **p) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMAttribute2_get_ownerDocument(IHTMLDOMAttribute2 *iface, IDispatch **p) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMAttribute2_insertBefore(IHTMLDOMAttribute2 *iface, IHTMLDOMNode *newChild, + VARIANT refChild, IHTMLDOMNode **node) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + FIXME("(%p)->(%p %s %p)\n", This, newChild, debugstr_variant(&refChild), node); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMAttribute2_replaceChild(IHTMLDOMAttribute2 *iface, IHTMLDOMNode *newChild, + IHTMLDOMNode *oldChild, IHTMLDOMNode **node) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + FIXME("(%p)->(%p %p %p)\n", This, newChild, oldChild, node); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMAttribute2_removeChild(IHTMLDOMAttribute2 *iface, IHTMLDOMNode *oldChild, + IHTMLDOMNode **node) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + FIXME("(%p)->(%p %p)\n", This, oldChild, node); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMAttribute2_appendChild(IHTMLDOMAttribute2 *iface, IHTMLDOMNode *newChild, + IHTMLDOMNode **node) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + FIXME("(%p)->(%p %p)\n", This, newChild, node); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMAttribute2_hasChildNodes(IHTMLDOMAttribute2 *iface, VARIANT_BOOL *fChildren) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + FIXME("(%p)->(%p)\n", This, fChildren); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLDOMAttribute2_cloneNode(IHTMLDOMAttribute2 *iface, VARIANT_BOOL fDeep, + IHTMLDOMAttribute **clonedNode) +{ + HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); + FIXME("(%p)->(%x %p)\n", This, fDeep, clonedNode); + return E_NOTIMPL; +} + +static const IHTMLDOMAttribute2Vtbl HTMLDOMAttribute2Vtbl = { + HTMLDOMAttribute2_QueryInterface, + HTMLDOMAttribute2_AddRef, + HTMLDOMAttribute2_Release, + HTMLDOMAttribute2_GetTypeInfoCount, + HTMLDOMAttribute2_GetTypeInfo, + HTMLDOMAttribute2_GetIDsOfNames, + HTMLDOMAttribute2_Invoke, + HTMLDOMAttribute2_get_name, + HTMLDOMAttribute2_put_value, + HTMLDOMAttribute2_get_value, + HTMLDOMAttribute2_get_expando, + HTMLDOMAttribute2_get_nodeType, + HTMLDOMAttribute2_get_parentNode, + HTMLDOMAttribute2_get_childNodes, + HTMLDOMAttribute2_get_firstChild, + HTMLDOMAttribute2_get_lastChild, + HTMLDOMAttribute2_get_previousSibling, + HTMLDOMAttribute2_get_nextSibling, + HTMLDOMAttribute2_get_attributes, + HTMLDOMAttribute2_get_ownerDocument, + HTMLDOMAttribute2_insertBefore, + HTMLDOMAttribute2_replaceChild, + HTMLDOMAttribute2_removeChild, + HTMLDOMAttribute2_appendChild, + HTMLDOMAttribute2_hasChildNodes, + HTMLDOMAttribute2_cloneNode +}; + static const tid_t HTMLDOMAttribute_iface_tids[] = { IHTMLDOMAttribute_tid, + IHTMLDOMAttribute2_tid, 0 }; static dispex_static_data_t HTMLDOMAttribute_dispex = { @@ -257,6 +480,7 @@ HRESULT HTMLDOMAttribute_Create(const WCHAR *name, HTMLElement *elem, DISPID dis return E_OUTOFMEMORY; ret->IHTMLDOMAttribute_iface.lpVtbl = &HTMLDOMAttributeVtbl; + ret->IHTMLDOMAttribute2_iface.lpVtbl = &HTMLDOMAttribute2Vtbl; ret->ref = 1; ret->dispid = dispid; ret->elem = elem; diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index fac3c64676d..2156d90d344 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -135,6 +135,7 @@ typedef struct event_target_t event_target_t; XIID(IHTMLDocument4) \ XIID(IHTMLDocument5) \ XIID(IHTMLDOMAttribute) \ + XIID(IHTMLDOMAttribute2) \ XIID(IHTMLDOMChildrenCollection) \ XIID(IHTMLDOMImplementation) \ XIID(IHTMLDOMNode) \ @@ -902,6 +903,7 @@ struct HTMLAttributeCollection { typedef struct { DispatchEx dispex; IHTMLDOMAttribute IHTMLDOMAttribute_iface; + IHTMLDOMAttribute2 IHTMLDOMAttribute2_iface; LONG ref; diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index 37749a0e3b3..7ddfb77a96e 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -270,6 +270,7 @@ static const IID * const text_iids[] = { static const IID * const attr_iids[] = { &IID_IHTMLDOMAttribute, + &IID_IHTMLDOMAttribute2, &IID_IDispatchEx, NULL };