Jacek Caban : urlmon: Added IBindStatusCallbackEx implementation.
Alexandre Julliard
julliard at winehq.org
Fri Jul 3 09:31:07 CDT 2009
Module: wine
Branch: master
Commit: df826fe82fab3416eb194c7e361d6fa8d72bfb69
URL: http://source.winehq.org/git/wine.git/?a=commit;h=df826fe82fab3416eb194c7e361d6fa8d72bfb69
Author: Jacek Caban <jacek at codeweavers.com>
Date: Thu Jul 2 23:22:13 2009 +0200
urlmon: Added IBindStatusCallbackEx implementation.
---
dlls/urlmon/bindctx.c | 65 ++++++++++++++++++++++++++++++++--------------
dlls/urlmon/tests/url.c | 1 -
2 files changed, 45 insertions(+), 21 deletions(-)
diff --git a/dlls/urlmon/bindctx.c b/dlls/urlmon/bindctx.c
index 1a89482..0b3efa6 100644
--- a/dlls/urlmon/bindctx.c
+++ b/dlls/urlmon/bindctx.c
@@ -28,10 +28,10 @@ static WCHAR BSCBHolder[] = { '_','B','S','C','B','_','H','o','l','d','e','r','_
extern IID IID_IBindStatusCallbackHolder;
typedef struct {
- const IBindStatusCallbackVtbl *lpBindStatusCallbackVtbl;
- const IServiceProviderVtbl *lpServiceProviderVtbl;
- const IHttpNegotiate2Vtbl *lpHttpNegotiate2Vtbl;
- const IAuthenticateVtbl *lpAuthenticateVtbl;
+ const IBindStatusCallbackExVtbl *lpBindStatusCallbackExVtbl;
+ const IServiceProviderVtbl *lpServiceProviderVtbl;
+ const IHttpNegotiate2Vtbl *lpHttpNegotiate2Vtbl;
+ const IAuthenticateVtbl *lpAuthenticateVtbl;
LONG ref;
@@ -39,7 +39,8 @@ typedef struct {
IServiceProvider *serv_prov;
} BindStatusCallback;
-#define STATUSCLB(x) ((IBindStatusCallback*) &(x)->lpBindStatusCallbackVtbl)
+#define STATUSCLB(x) ((IBindStatusCallback*) &(x)->lpBindStatusCallbackExVtbl)
+#define STATUSCLBEX(x) ((IBindStatusCallbackEx*)&(x)->lpBindStatusCallbackExVtbl)
#define SERVPROV(x) ((IServiceProvider*) &(x)->lpServiceProviderVtbl)
#define HTTPNEG2(x) ((IHttpNegotiate2*) &(x)->lpHttpNegotiate2Vtbl)
#define AUTHENTICATE(x) ((IAuthenticate*) &(x)->lpAuthenticateVtbl)
@@ -56,9 +57,9 @@ static void *get_callback_iface(BindStatusCallback *This, REFIID riid)
return SUCCEEDED(hres) ? ret : NULL;
}
-#define STATUSCLB_THIS(iface) DEFINE_THIS(BindStatusCallback, BindStatusCallback, iface)
+#define STATUSCLB_THIS(iface) DEFINE_THIS(BindStatusCallback, BindStatusCallbackEx, iface)
-static HRESULT WINAPI BindStatusCallback_QueryInterface(IBindStatusCallback *iface,
+static HRESULT WINAPI BindStatusCallback_QueryInterface(IBindStatusCallbackEx *iface,
REFIID riid, void **ppv)
{
BindStatusCallback *This = STATUSCLB_THIS(iface);
@@ -71,6 +72,9 @@ static HRESULT WINAPI BindStatusCallback_QueryInterface(IBindStatusCallback *ifa
}else if(IsEqualGUID(&IID_IBindStatusCallback, riid)) {
TRACE("(%p)->(IID_IBindStatusCallback, %p)\n", This, ppv);
*ppv = STATUSCLB(This);
+ }else if(IsEqualGUID(&IID_IBindStatusCallbackEx, riid)) {
+ TRACE("(%p)->(IID_IBindStatusCallback, %p)\n", This, ppv);
+ *ppv = STATUSCLBEX(This);
}else if(IsEqualGUID(&IID_IBindStatusCallbackHolder, riid)) {
TRACE("(%p)->(IID_IBindStatusCallbackHolder, %p)\n", This, ppv);
*ppv = This;
@@ -97,7 +101,7 @@ static HRESULT WINAPI BindStatusCallback_QueryInterface(IBindStatusCallback *ifa
return E_NOINTERFACE;
}
-static ULONG WINAPI BindStatusCallback_AddRef(IBindStatusCallback *iface)
+static ULONG WINAPI BindStatusCallback_AddRef(IBindStatusCallbackEx *iface)
{
BindStatusCallback *This = STATUSCLB_THIS(iface);
LONG ref = InterlockedIncrement(&This->ref);
@@ -107,7 +111,7 @@ static ULONG WINAPI BindStatusCallback_AddRef(IBindStatusCallback *iface)
return ref;
}
-static ULONG WINAPI BindStatusCallback_Release(IBindStatusCallback *iface)
+static ULONG WINAPI BindStatusCallback_Release(IBindStatusCallbackEx *iface)
{
BindStatusCallback *This = STATUSCLB_THIS(iface);
LONG ref = InterlockedDecrement(&This->ref);
@@ -124,7 +128,7 @@ static ULONG WINAPI BindStatusCallback_Release(IBindStatusCallback *iface)
return ref;
}
-static HRESULT WINAPI BindStatusCallback_OnStartBinding(IBindStatusCallback *iface,
+static HRESULT WINAPI BindStatusCallback_OnStartBinding(IBindStatusCallbackEx *iface,
DWORD dwReserved, IBinding *pbind)
{
BindStatusCallback *This = STATUSCLB_THIS(iface);
@@ -134,7 +138,7 @@ static HRESULT WINAPI BindStatusCallback_OnStartBinding(IBindStatusCallback *ifa
return IBindStatusCallback_OnStartBinding(This->callback, 0xff, pbind);
}
-static HRESULT WINAPI BindStatusCallback_GetPriority(IBindStatusCallback *iface, LONG *pnPriority)
+static HRESULT WINAPI BindStatusCallback_GetPriority(IBindStatusCallbackEx *iface, LONG *pnPriority)
{
BindStatusCallback *This = STATUSCLB_THIS(iface);
@@ -143,7 +147,7 @@ static HRESULT WINAPI BindStatusCallback_GetPriority(IBindStatusCallback *iface,
return IBindStatusCallback_GetPriority(This->callback, pnPriority);
}
-static HRESULT WINAPI BindStatusCallback_OnLowResource(IBindStatusCallback *iface, DWORD reserved)
+static HRESULT WINAPI BindStatusCallback_OnLowResource(IBindStatusCallbackEx *iface, DWORD reserved)
{
BindStatusCallback *This = STATUSCLB_THIS(iface);
@@ -152,7 +156,7 @@ static HRESULT WINAPI BindStatusCallback_OnLowResource(IBindStatusCallback *ifac
return IBindStatusCallback_OnLowResource(This->callback, reserved);
}
-static HRESULT WINAPI BindStatusCallback_OnProgress(IBindStatusCallback *iface, ULONG ulProgress,
+static HRESULT WINAPI BindStatusCallback_OnProgress(IBindStatusCallbackEx *iface, ULONG ulProgress,
ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText)
{
BindStatusCallback *This = STATUSCLB_THIS(iface);
@@ -164,7 +168,7 @@ static HRESULT WINAPI BindStatusCallback_OnProgress(IBindStatusCallback *iface,
ulProgressMax, ulStatusCode, szStatusText);
}
-static HRESULT WINAPI BindStatusCallback_OnStopBinding(IBindStatusCallback *iface,
+static HRESULT WINAPI BindStatusCallback_OnStopBinding(IBindStatusCallbackEx *iface,
HRESULT hresult, LPCWSTR szError)
{
BindStatusCallback *This = STATUSCLB_THIS(iface);
@@ -174,7 +178,7 @@ static HRESULT WINAPI BindStatusCallback_OnStopBinding(IBindStatusCallback *ifac
return IBindStatusCallback_OnStopBinding(This->callback, hresult, szError);
}
-static HRESULT WINAPI BindStatusCallback_GetBindInfo(IBindStatusCallback *iface,
+static HRESULT WINAPI BindStatusCallback_GetBindInfo(IBindStatusCallbackEx *iface,
DWORD *grfBINDF, BINDINFO *pbindinfo)
{
BindStatusCallback *This = STATUSCLB_THIS(iface);
@@ -196,7 +200,7 @@ static HRESULT WINAPI BindStatusCallback_GetBindInfo(IBindStatusCallback *iface,
return hres;
}
-static HRESULT WINAPI BindStatusCallback_OnDataAvailable(IBindStatusCallback *iface,
+static HRESULT WINAPI BindStatusCallback_OnDataAvailable(IBindStatusCallbackEx *iface,
DWORD grfBSCF, DWORD dwSize, FORMATETC *pformatetc, STGMEDIUM *pstgmed)
{
BindStatusCallback *This = STATUSCLB_THIS(iface);
@@ -206,7 +210,7 @@ static HRESULT WINAPI BindStatusCallback_OnDataAvailable(IBindStatusCallback *if
return IBindStatusCallback_OnDataAvailable(This->callback, grfBSCF, dwSize, pformatetc, pstgmed);
}
-static HRESULT WINAPI BindStatusCallback_OnObjectAvailable(IBindStatusCallback *iface,
+static HRESULT WINAPI BindStatusCallback_OnObjectAvailable(IBindStatusCallbackEx *iface,
REFIID riid, IUnknown *punk)
{
BindStatusCallback *This = STATUSCLB_THIS(iface);
@@ -216,9 +220,29 @@ static HRESULT WINAPI BindStatusCallback_OnObjectAvailable(IBindStatusCallback *
return IBindStatusCallback_OnObjectAvailable(This->callback, riid, punk);
}
+static HRESULT WINAPI BindStatusCallback_GetBindInfoEx(IBindStatusCallbackEx *iface, DWORD *grfBINDF,
+ BINDINFO *pbindinfo, DWORD *grfBINDF2, DWORD *pdwReserved)
+{
+ BindStatusCallback *This = STATUSCLB_THIS(iface);
+ IBindStatusCallbackEx *bscex;
+ HRESULT hres;
+
+ TRACE("(%p)->(%p %p %p %p)\n", This, grfBINDF, pbindinfo, grfBINDF2, pdwReserved);
+
+ hres = IBindStatusCallback_QueryInterface(This->callback, &IID_IBindStatusCallbackEx, (void**)&bscex);
+ if(SUCCEEDED(hres)) {
+ hres = IBindStatusCallbackEx_GetBindInfoEx(bscex, grfBINDF, pbindinfo, grfBINDF2, pdwReserved);
+ IBindStatusCallbackEx_Release(bscex);
+ }else {
+ hres = IBindStatusCallback_GetBindInfo(This->callback, grfBINDF, pbindinfo);
+ }
+
+ return hres;
+}
+
#undef STATUSCLB_THIS
-static const IBindStatusCallbackVtbl BindStatusCallbackVtbl = {
+static const IBindStatusCallbackExVtbl BindStatusCallbackExVtbl = {
BindStatusCallback_QueryInterface,
BindStatusCallback_AddRef,
BindStatusCallback_Release,
@@ -229,7 +253,8 @@ static const IBindStatusCallbackVtbl BindStatusCallbackVtbl = {
BindStatusCallback_OnStopBinding,
BindStatusCallback_GetBindInfo,
BindStatusCallback_OnDataAvailable,
- BindStatusCallback_OnObjectAvailable
+ BindStatusCallback_OnObjectAvailable,
+ BindStatusCallback_GetBindInfoEx
};
#define SERVPROV_THIS(iface) DEFINE_THIS(BindStatusCallback, ServiceProvider, iface)
@@ -439,7 +464,7 @@ static IBindStatusCallback *create_bsc(IBindStatusCallback *bsc)
{
BindStatusCallback *ret = heap_alloc_zero(sizeof(BindStatusCallback));
- ret->lpBindStatusCallbackVtbl = &BindStatusCallbackVtbl;
+ ret->lpBindStatusCallbackExVtbl = &BindStatusCallbackExVtbl;
ret->lpServiceProviderVtbl = &BSCServiceProviderVtbl;
ret->lpHttpNegotiate2Vtbl = &BSCHttpNegotiateVtbl;
ret->lpAuthenticateVtbl = &BSCAuthenticateVtbl;
diff --git a/dlls/urlmon/tests/url.c b/dlls/urlmon/tests/url.c
index 473c6ab..b5bf79c 100644
--- a/dlls/urlmon/tests/url.c
+++ b/dlls/urlmon/tests/url.c
@@ -1941,7 +1941,6 @@ static void test_GetBindInfoEx(IBindStatusCallback *holder)
hres = IBindStatusCallback_QueryInterface(holder, &IID_IBindStatusCallbackEx, (void**)&bscex);
if(FAILED(hres)) {
- todo_wine
win_skip("IBindStatusCallbackEx not supported\n");
return;
}
More information about the wine-cvs
mailing list