Module: wine Branch: master Commit: 6b9c21484570504583faa216e9c3ccba40d383fc URL: https://gitlab.winehq.org/wine/wine/-/commit/6b9c21484570504583faa216e9c3ccb...
Author: Gabriel Ivăncescu gabrielopcode@gmail.com Date: Thu Sep 7 16:07:00 2023 +0300
mshtml: Use query_interface in the dispex vtbl for XMLHttpRequest.
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com
---
dlls/mshtml/htmlevent.c | 21 --------------------- dlls/mshtml/mshtml_private.h | 1 - dlls/mshtml/xmlhttprequest.c | 45 +++++++++++++++++++++++--------------------- 3 files changed, 24 insertions(+), 43 deletions(-)
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index c64eded6a0a..f8a418a8027 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -4577,27 +4577,6 @@ void *EventTarget_query_interface(EventTarget *event_target, REFIID riid) return NULL; }
-HRESULT EventTarget_QI(EventTarget *event_target, REFIID riid, void **ppv) -{ - if(IsEqualGUID(riid, &IID_IEventTarget)) { - if(use_event_quirks(event_target)) { - WARN("IEventTarget queried, but not supported by in document mode\n"); - *ppv = NULL; - return E_NOINTERFACE; - } - IEventTarget_AddRef(&event_target->IEventTarget_iface); - *ppv = &event_target->IEventTarget_iface; - return S_OK; - } - - if(dispex_query_interface(&event_target->dispex, riid, ppv)) - return *ppv ? S_OK : E_NOINTERFACE; - - WARN("(%p)->(%s %p)\n", event_target, debugstr_mshtml_guid(riid), ppv); - *ppv = NULL; - return E_NOINTERFACE; -} - void EventTarget_init_dispex_info(dispex_data_t *dispex_info, compat_mode_t compat_mode) { static const dispex_hook_t IEventTarget_hooks[] = { diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 0e7ad70e9c2..3c5fc6de949 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1211,7 +1211,6 @@ void HTMLElement_Init(HTMLElement*,HTMLDocumentNode*,nsIDOMElement*,dispex_stati
void EventTarget_Init(EventTarget*,IUnknown*,dispex_static_data_t*,compat_mode_t); void *EventTarget_query_interface(EventTarget*,REFIID); -HRESULT EventTarget_QI(EventTarget*,REFIID,void**); void EventTarget_init_dispex_info(dispex_data_t*,compat_mode_t);
void *HTMLDOMNode_QI(HTMLDOMNode*,REFIID); diff --git a/dlls/mshtml/xmlhttprequest.c b/dlls/mshtml/xmlhttprequest.c index c062b117c5d..832acc33aef 100644 --- a/dlls/mshtml/xmlhttprequest.c +++ b/dlls/mshtml/xmlhttprequest.c @@ -508,28 +508,12 @@ static HRESULT WINAPI HTMLXMLHttpRequest_QueryInterface(IHTMLXMLHttpRequest *ifa { HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);
- TRACE("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv); - - if(IsEqualGUID(&IID_IUnknown, riid)) { - *ppv = &This->IHTMLXMLHttpRequest_iface; - }else if(IsEqualGUID(&IID_IDispatch, riid)) { - *ppv = &This->IHTMLXMLHttpRequest_iface; - }else if(IsEqualGUID(&IID_IHTMLXMLHttpRequest, riid)) { - *ppv = &This->IHTMLXMLHttpRequest_iface; - }else if(IsEqualGUID(&IID_IHTMLXMLHttpRequest2, riid)) { - *ppv = &This->IHTMLXMLHttpRequest2_iface; - }else if(IsEqualGUID(&IID_IWineXMLHttpRequestPrivate, riid)) { - *ppv = &This->IWineXMLHttpRequestPrivate_iface; - }else if(IsEqualGUID(&IID_IProvideClassInfo, riid)) { - *ppv = &This->IProvideClassInfo2_iface; - }else if(IsEqualGUID(&IID_IProvideClassInfo2, riid)) { - *ppv = &This->IProvideClassInfo2_iface; - }else { - return EventTarget_QI(&This->event_target, riid, ppv); - } + if(dispex_query_interface(&This->event_target.dispex, riid, ppv)) + return *ppv ? S_OK : E_NOINTERFACE;
- IUnknown_AddRef((IUnknown*)*ppv); - return S_OK; + *ppv = NULL; + WARN("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv); + return E_NOINTERFACE; }
static ULONG WINAPI HTMLXMLHttpRequest_AddRef(IHTMLXMLHttpRequest *iface) @@ -1517,6 +1501,24 @@ static inline HTMLXMLHttpRequest *impl_from_DispatchEx(DispatchEx *iface) return CONTAINING_RECORD(iface, HTMLXMLHttpRequest, event_target.dispex); }
+static void *HTMLXMLHttpRequest_query_interface(DispatchEx *dispex, REFIID riid) +{ + HTMLXMLHttpRequest *This = impl_from_DispatchEx(dispex); + + if(IsEqualGUID(&IID_IHTMLXMLHttpRequest, riid)) + return &This->IHTMLXMLHttpRequest_iface; + if(IsEqualGUID(&IID_IHTMLXMLHttpRequest2, riid)) + return &This->IHTMLXMLHttpRequest2_iface; + if(IsEqualGUID(&IID_IWineXMLHttpRequestPrivate, riid)) + return &This->IWineXMLHttpRequestPrivate_iface; + if(IsEqualGUID(&IID_IProvideClassInfo, riid)) + return &This->IProvideClassInfo2_iface; + if(IsEqualGUID(&IID_IProvideClassInfo2, riid)) + return &This->IProvideClassInfo2_iface; + + return EventTarget_query_interface(&This->event_target, riid); +} + static void HTMLXMLHttpRequest_traverse(DispatchEx *dispex, nsCycleCollectionTraversalCallback *cb) { HTMLXMLHttpRequest *This = impl_from_DispatchEx(dispex); @@ -1606,6 +1608,7 @@ static void HTMLXMLHttpRequest_init_dispex_info(dispex_data_t *info, compat_mode
static const event_target_vtbl_t HTMLXMLHttpRequest_event_target_vtbl = { { + .query_interface = HTMLXMLHttpRequest_query_interface, .destructor = HTMLXMLHttpRequest_destructor, .traverse = HTMLXMLHttpRequest_traverse, .unlink = HTMLXMLHttpRequest_unlink,