From 21a30da6bf8dcabdb560e6b8bd3910ab6440947e Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Fri, 21 Apr 2017 13:50:59 +0200 Subject: [PATCH] mshtml: Added IProvideClassInfo2 implementation for HTMLXMLHttpRequest object. Signed-off-by: Jacek Caban Signed-off-by: Alexandre Julliard --- dlls/mshtml/xmlhttprequest.c | 51 ++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/dlls/mshtml/xmlhttprequest.c b/dlls/mshtml/xmlhttprequest.c index 30389a4cde1..1565f9bf376 100644 --- a/dlls/mshtml/xmlhttprequest.c +++ b/dlls/mshtml/xmlhttprequest.c @@ -101,6 +101,7 @@ typedef struct { struct HTMLXMLHttpRequest { EventTarget event_target; IHTMLXMLHttpRequest IHTMLXMLHttpRequest_iface; + IProvideClassInfo2 IProvideClassInfo2_iface; LONG ref; nsIXMLHttpRequest *nsxhr; XMLHttpReqEventListener *event_listener; @@ -218,6 +219,10 @@ static HRESULT WINAPI HTMLXMLHttpRequest_QueryInterface(IHTMLXMLHttpRequest *ifa *ppv = &This->IHTMLXMLHttpRequest_iface; }else if(IsEqualGUID(&IID_IHTMLXMLHttpRequest, riid)) { *ppv = &This->IHTMLXMLHttpRequest_iface; + }else if(IsEqualGUID(&IID_IProvideClassInfo, riid)) { + *ppv = &This->IProvideClassInfo2_iface; + }else if(IsEqualGUID(&IID_IProvideClassInfo2, riid)) { + *ppv = &This->IProvideClassInfo2_iface; }else if(dispex_query_interface(&This->event_target.dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; }else { @@ -682,6 +687,51 @@ static const IHTMLXMLHttpRequestVtbl HTMLXMLHttpRequestVtbl = { HTMLXMLHttpRequest_setRequestHeader }; +static inline HTMLXMLHttpRequest *impl_from_IProvideClassInfo2(IProvideClassInfo2 *iface) +{ + return CONTAINING_RECORD(iface, HTMLXMLHttpRequest, IProvideClassInfo2_iface); +} + +static HRESULT WINAPI ProvideClassInfo_QueryInterface(IProvideClassInfo2 *iface, REFIID riid, void **ppv) +{ + HTMLXMLHttpRequest *This = impl_from_IProvideClassInfo2(iface); + return IHTMLXMLHttpRequest_QueryInterface(&This->IHTMLXMLHttpRequest_iface, riid, ppv); +} + +static ULONG WINAPI ProvideClassInfo_AddRef(IProvideClassInfo2 *iface) +{ + HTMLXMLHttpRequest *This = impl_from_IProvideClassInfo2(iface); + return IHTMLXMLHttpRequest_AddRef(&This->IHTMLXMLHttpRequest_iface); +} + +static ULONG WINAPI ProvideClassInfo_Release(IProvideClassInfo2 *iface) +{ + HTMLXMLHttpRequest *This = impl_from_IProvideClassInfo2(iface); + return IHTMLXMLHttpRequest_Release(&This->IHTMLXMLHttpRequest_iface); +} + +static HRESULT WINAPI ProvideClassInfo_GetClassInfo(IProvideClassInfo2 *iface, ITypeInfo **ppTI) +{ + HTMLXMLHttpRequest *This = impl_from_IProvideClassInfo2(iface); + TRACE("(%p)->(%p)\n", This, ppTI); + return get_class_typeinfo(&CLSID_HTMLXMLHttpRequest, ppTI); +} + +static HRESULT WINAPI ProvideClassInfo2_GetGUID(IProvideClassInfo2 *iface, DWORD dwGuidKind, GUID *pGUID) +{ + HTMLXMLHttpRequest *This = impl_from_IProvideClassInfo2(iface); + FIXME("(%p)->(%u %p)\n", This, dwGuidKind, pGUID); + return E_NOTIMPL; +} + +static const IProvideClassInfo2Vtbl ProvideClassInfo2Vtbl = { + ProvideClassInfo_QueryInterface, + ProvideClassInfo_AddRef, + ProvideClassInfo_Release, + ProvideClassInfo_GetClassInfo, + ProvideClassInfo2_GetGUID, +}; + static inline HTMLXMLHttpRequest *impl_from_DispatchEx(DispatchEx *iface) { return CONTAINING_RECORD(iface, HTMLXMLHttpRequest, event_target.dispex); @@ -849,6 +899,7 @@ static HRESULT WINAPI HTMLXMLHttpRequestFactory_create(IHTMLXMLHttpRequestFactor ret->nsxhr = nsxhr; ret->IHTMLXMLHttpRequest_iface.lpVtbl = &HTMLXMLHttpRequestVtbl; + ret->IProvideClassInfo2_iface.lpVtbl = &ProvideClassInfo2Vtbl; init_event_target(&ret->event_target); init_dispex(&ret->event_target.dispex, (IUnknown*)&ret->IHTMLXMLHttpRequest_iface, &HTMLXMLHttpRequest_dispex);