Commit 168e915c authored by Jacek Caban's avatar Jacek Caban Committed by Alexandre Julliard

urlmon: Added IInternetBindInfo implementation to BindStatusCallback object.

parent 67d2b52c
...@@ -29,6 +29,7 @@ extern IID IID_IBindStatusCallbackHolder; ...@@ -29,6 +29,7 @@ extern IID IID_IBindStatusCallbackHolder;
typedef struct { typedef struct {
IBindStatusCallbackEx IBindStatusCallbackEx_iface; IBindStatusCallbackEx IBindStatusCallbackEx_iface;
IInternetBindInfo IInternetBindInfo_iface;
IServiceProvider IServiceProvider_iface; IServiceProvider IServiceProvider_iface;
IHttpNegotiate2 IHttpNegotiate2_iface; IHttpNegotiate2 IHttpNegotiate2_iface;
IAuthenticate IAuthenticate_iface; IAuthenticate IAuthenticate_iface;
...@@ -126,6 +127,9 @@ static HRESULT WINAPI BindStatusCallback_QueryInterface(IBindStatusCallbackEx *i ...@@ -126,6 +127,9 @@ static HRESULT WINAPI BindStatusCallback_QueryInterface(IBindStatusCallbackEx *i
}else if(IsEqualGUID(&IID_IAuthenticate, riid)) { }else if(IsEqualGUID(&IID_IAuthenticate, riid)) {
TRACE("(%p)->(IID_IAuthenticate, %p)\n", This, ppv); TRACE("(%p)->(IID_IAuthenticate, %p)\n", This, ppv);
*ppv = &This->IAuthenticate_iface; *ppv = &This->IAuthenticate_iface;
}else if(IsEqualGUID(&IID_IInternetBindInfo, riid)) {
TRACE("(%p)->(IID_IInternetBindInfo, %p)\n", This, ppv);
*ppv = &This->IInternetBindInfo_iface;
} }
if(*ppv) { if(*ppv) {
...@@ -497,6 +501,63 @@ static const IAuthenticateVtbl BSCAuthenticateVtbl = { ...@@ -497,6 +501,63 @@ static const IAuthenticateVtbl BSCAuthenticateVtbl = {
BSCAuthenticate_Authenticate BSCAuthenticate_Authenticate
}; };
static inline BindStatusCallback *impl_from_IInternetBindInfo(IInternetBindInfo *iface)
{
return CONTAINING_RECORD(iface, BindStatusCallback, IInternetBindInfo_iface);
}
static HRESULT WINAPI BSCInternetBindInfo_QueryInterface(IInternetBindInfo *iface, REFIID riid, void **ppv)
{
BindStatusCallback *This = impl_from_IInternetBindInfo(iface);
return IBindStatusCallbackEx_QueryInterface(&This->IBindStatusCallbackEx_iface, riid, ppv);
}
static ULONG WINAPI BSCInternetBindInfo_AddRef(IInternetBindInfo *iface)
{
BindStatusCallback *This = impl_from_IInternetBindInfo(iface);
return IBindStatusCallbackEx_AddRef(&This->IBindStatusCallbackEx_iface);
}
static ULONG WINAPI BSCInternetBindInfo_Release(IInternetBindInfo *iface)
{
BindStatusCallback *This = impl_from_IInternetBindInfo(iface);
return IBindStatusCallbackEx_Release(&This->IBindStatusCallbackEx_iface);
}
static HRESULT WINAPI BSCInternetBindInfo_GetBindInfo(IInternetBindInfo *iface, DWORD *bindf, BINDINFO *bindinfo)
{
BindStatusCallback *This = impl_from_IInternetBindInfo(iface);
FIXME("(%p)->(%p %p)\n", This, bindf, bindinfo);
return E_NOTIMPL;
}
static HRESULT WINAPI BSCInternetBindInfo_GetBindString(IInternetBindInfo *iface, ULONG string_type,
WCHAR **strs, ULONG cnt, ULONG *fetched)
{
BindStatusCallback *This = impl_from_IInternetBindInfo(iface);
IInternetBindInfo *bind_info;
HRESULT hres;
TRACE("(%p)->(%d %p %d %p)\n", This, string_type, strs, cnt, fetched);
hres = IBindStatusCallback_QueryInterface(This->callback, &IID_IInternetBindInfo, (void**)&bind_info);
if(FAILED(hres))
return hres;
hres = IInternetBindInfo_GetBindString(bind_info, string_type, strs, cnt, fetched);
IInternetBindInfo_Release(bind_info);
return hres;
}
static IInternetBindInfoVtbl BSCInternetBindInfoVtbl = {
BSCInternetBindInfo_QueryInterface,
BSCInternetBindInfo_AddRef,
BSCInternetBindInfo_Release,
BSCInternetBindInfo_GetBindInfo,
BSCInternetBindInfo_GetBindString
};
static void set_callback(BindStatusCallback *This, IBindStatusCallback *bsc) static void set_callback(BindStatusCallback *This, IBindStatusCallback *bsc)
{ {
IServiceProvider *serv_prov; IServiceProvider *serv_prov;
...@@ -523,6 +584,7 @@ HRESULT wrap_callback(IBindStatusCallback *bsc, IBindStatusCallback **ret_iface) ...@@ -523,6 +584,7 @@ HRESULT wrap_callback(IBindStatusCallback *bsc, IBindStatusCallback **ret_iface)
return E_OUTOFMEMORY; return E_OUTOFMEMORY;
ret->IBindStatusCallbackEx_iface.lpVtbl = &BindStatusCallbackExVtbl; ret->IBindStatusCallbackEx_iface.lpVtbl = &BindStatusCallbackExVtbl;
ret->IInternetBindInfo_iface.lpVtbl = &BSCInternetBindInfoVtbl;
ret->IServiceProvider_iface.lpVtbl = &BSCServiceProviderVtbl; ret->IServiceProvider_iface.lpVtbl = &BSCServiceProviderVtbl;
ret->IHttpNegotiate2_iface.lpVtbl = &BSCHttpNegotiateVtbl; ret->IHttpNegotiate2_iface.lpVtbl = &BSCHttpNegotiateVtbl;
ret->IAuthenticate_iface.lpVtbl = &BSCAuthenticateVtbl; ret->IAuthenticate_iface.lpVtbl = &BSCAuthenticateVtbl;
......
...@@ -2564,6 +2564,7 @@ static BOOL test_bscholder(IBindStatusCallback *holder) ...@@ -2564,6 +2564,7 @@ static BOOL test_bscholder(IBindStatusCallback *holder)
IHttpNegotiate *http_negotiate, *http_negotiate_serv; IHttpNegotiate *http_negotiate, *http_negotiate_serv;
IHttpNegotiate2 *http_negotiate2, *http_negotiate2_serv; IHttpNegotiate2 *http_negotiate2, *http_negotiate2_serv;
IAuthenticate *authenticate, *authenticate_serv; IAuthenticate *authenticate, *authenticate_serv;
IInternetBindInfo *bind_info;
IInternetProtocol *protocol; IInternetProtocol *protocol;
BINDINFO bindinfo = {sizeof(bindinfo)}; BINDINFO bindinfo = {sizeof(bindinfo)};
BOOL ret = TRUE; BOOL ret = TRUE;
...@@ -2678,6 +2679,16 @@ static BOOL test_bscholder(IBindStatusCallback *holder) ...@@ -2678,6 +2679,16 @@ static BOOL test_bscholder(IBindStatusCallback *holder)
IAuthenticate_Release(authenticate); IAuthenticate_Release(authenticate);
IAuthenticate_Release(authenticate_serv); IAuthenticate_Release(authenticate_serv);
hres = IBindStatusCallback_QueryInterface(holder, &IID_IInternetBindInfo, (void**)&bind_info);
ok(hres == S_OK || broken(hres == E_NOINTERFACE /* win2k */), "Could not get IInternetBindInfo interface: %08x\n", hres);
if(SUCCEEDED(hres)) {
hres = IInternetBindInfo_GetBindString(bind_info, BINDSTRING_USER_AGENT, &wstr, 1, &dw);
ok(hres == E_NOINTERFACE, "GetBindString(BINDSTRING_USER_AGENT) failed: %08x\n", hres);
IInternetBindInfo_Release(bind_info);
}
SET_EXPECT(OnStopBinding); SET_EXPECT(OnStopBinding);
hres = IBindStatusCallback_OnStopBinding(holder, S_OK, NULL); hres = IBindStatusCallback_OnStopBinding(holder, S_OK, NULL);
ok(hres == S_OK, "OnStopBinding failed: %08x\n", hres); ok(hres == S_OK, "OnStopBinding failed: %08x\n", hres);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment