Added implementation of IInternetPriority in HttpProtocol.
This commit is contained in:
parent
2762486b35
commit
8c4ead4d27
|
@ -32,13 +32,18 @@
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(urlmon);
|
WINE_DEFAULT_DEBUG_CHANNEL(urlmon);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const IInternetProtocolVtbl *lpInternetProtocolVtbl;
|
const IInternetProtocolVtbl *lpInternetProtocolVtbl;
|
||||||
|
const IInternetPriorityVtbl *lpInternetPriorityVtbl;
|
||||||
|
|
||||||
|
LONG priority;
|
||||||
|
|
||||||
LONG ref;
|
LONG ref;
|
||||||
} HttpProtocol;
|
} HttpProtocol;
|
||||||
|
|
||||||
#define PROTOCOL_THIS(iface) DEFINE_THIS(HttpProtocol, InternetProtocol, iface)
|
|
||||||
|
|
||||||
#define PROTOCOL(x) ((IInternetProtocol*) &(x)->lpInternetProtocolVtbl)
|
#define PROTOCOL(x) ((IInternetProtocol*) &(x)->lpInternetProtocolVtbl)
|
||||||
|
#define PRIORITY(x) ((IInternetPriority*) &(x)->lpInternetPriorityVtbl)
|
||||||
|
|
||||||
|
#define PROTOCOL_THIS(iface) DEFINE_THIS(HttpProtocol, InternetProtocol, iface)
|
||||||
|
|
||||||
static HRESULT WINAPI HttpProtocol_QueryInterface(IInternetProtocol *iface, REFIID riid, void **ppv)
|
static HRESULT WINAPI HttpProtocol_QueryInterface(IInternetProtocol *iface, REFIID riid, void **ppv)
|
||||||
{
|
{
|
||||||
|
@ -54,6 +59,9 @@ static HRESULT WINAPI HttpProtocol_QueryInterface(IInternetProtocol *iface, REFI
|
||||||
}else if(IsEqualGUID(&IID_IInternetProtocol, riid)) {
|
}else if(IsEqualGUID(&IID_IInternetProtocol, riid)) {
|
||||||
TRACE("(%p)->(IID_IInternetProtocol %p)\n", This, ppv);
|
TRACE("(%p)->(IID_IInternetProtocol %p)\n", This, ppv);
|
||||||
*ppv = PROTOCOL(This);
|
*ppv = PROTOCOL(This);
|
||||||
|
}else if(IsEqualGUID(&IID_IInternetPriority, riid)) {
|
||||||
|
TRACE("(%p)->(IID_IInternetPriority %p)\n", This, ppv);
|
||||||
|
*ppv = PRIORITY(This);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(*ppv) {
|
if(*ppv) {
|
||||||
|
@ -167,6 +175,56 @@ static HRESULT WINAPI HttpProtocol_UnlockRequest(IInternetProtocol *iface)
|
||||||
|
|
||||||
#undef PROTOCOL_THIS
|
#undef PROTOCOL_THIS
|
||||||
|
|
||||||
|
#define PRIORITY_THIS(iface) DEFINE_THIS(HttpProtocol, InternetPriority, iface)
|
||||||
|
|
||||||
|
static HRESULT WINAPI HttpPriority_QueryInterface(IInternetPriority *iface, REFIID riid, void **ppv)
|
||||||
|
{
|
||||||
|
HttpProtocol *This = PRIORITY_THIS(iface);
|
||||||
|
return IInternetProtocol_QueryInterface(PROTOCOL(This), riid, ppv);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI HttpPriority_AddRef(IInternetPriority *iface)
|
||||||
|
{
|
||||||
|
HttpProtocol *This = PRIORITY_THIS(iface);
|
||||||
|
return IInternetProtocol_AddRef(PROTOCOL(This));
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI HttpPriority_Release(IInternetPriority *iface)
|
||||||
|
{
|
||||||
|
HttpProtocol *This = PRIORITY_THIS(iface);
|
||||||
|
return IInternetProtocol_Release(PROTOCOL(This));
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI HttpPriority_SetPriority(IInternetPriority *iface, LONG nPriority)
|
||||||
|
{
|
||||||
|
HttpProtocol *This = PRIORITY_THIS(iface);
|
||||||
|
|
||||||
|
TRACE("(%p)->(%ld)\n", This, nPriority);
|
||||||
|
|
||||||
|
This->priority = nPriority;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI HttpPriority_GetPriority(IInternetPriority *iface, LONG *pnPriority)
|
||||||
|
{
|
||||||
|
HttpProtocol *This = PRIORITY_THIS(iface);
|
||||||
|
|
||||||
|
TRACE("(%p)->(%p)\n", This, pnPriority);
|
||||||
|
|
||||||
|
*pnPriority = This->priority;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef PRIORITY_THIS
|
||||||
|
|
||||||
|
static const IInternetPriorityVtbl HttpPriorityVtbl = {
|
||||||
|
HttpPriority_QueryInterface,
|
||||||
|
HttpPriority_AddRef,
|
||||||
|
HttpPriority_Release,
|
||||||
|
HttpPriority_SetPriority,
|
||||||
|
HttpPriority_GetPriority
|
||||||
|
};
|
||||||
|
|
||||||
static const IInternetProtocolVtbl HttpProtocolVtbl = {
|
static const IInternetProtocolVtbl HttpProtocolVtbl = {
|
||||||
HttpProtocol_QueryInterface,
|
HttpProtocol_QueryInterface,
|
||||||
HttpProtocol_AddRef,
|
HttpProtocol_AddRef,
|
||||||
|
@ -194,8 +252,12 @@ HRESULT HttpProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
|
||||||
ret = HeapAlloc(GetProcessHeap(), 0, sizeof(HttpProtocol));
|
ret = HeapAlloc(GetProcessHeap(), 0, sizeof(HttpProtocol));
|
||||||
|
|
||||||
ret->lpInternetProtocolVtbl = &HttpProtocolVtbl;
|
ret->lpInternetProtocolVtbl = &HttpProtocolVtbl;
|
||||||
|
ret->lpInternetPriorityVtbl = &HttpPriorityVtbl;
|
||||||
|
|
||||||
ret->ref = 1;
|
ret->ref = 1;
|
||||||
|
|
||||||
|
ret->priority = 0;
|
||||||
|
|
||||||
*ppobj = PROTOCOL(ret);
|
*ppobj = PROTOCOL(ret);
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
|
|
@ -206,6 +206,31 @@ static IInternetBindInfoVtbl bind_info_vtbl = {
|
||||||
|
|
||||||
static IInternetBindInfo bind_info = { &bind_info_vtbl };
|
static IInternetBindInfo bind_info = { &bind_info_vtbl };
|
||||||
|
|
||||||
|
static void test_priority(IInternetProtocol *protocol)
|
||||||
|
{
|
||||||
|
IInternetPriority *priority;
|
||||||
|
LONG pr;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
hres = IInternetProtocol_QueryInterface(protocol, &IID_IInternetPriority, (void**)&priority);
|
||||||
|
ok(hres == S_OK, "QueryInterface(IID_IInternetPriority) failed: %08lx\n", hres);
|
||||||
|
if(FAILED(hres))
|
||||||
|
return;
|
||||||
|
|
||||||
|
hres = IInternetPriority_GetPriority(priority, &pr);
|
||||||
|
ok(hres == S_OK, "GetPriority failed: %08lx\n", hres);
|
||||||
|
ok(pr == 0, "pr=%ld, expected 0\n", pr);
|
||||||
|
|
||||||
|
hres = IInternetPriority_SetPriority(priority, 1);
|
||||||
|
ok(hres == S_OK, "SetPriority failed: %08lx\n", hres);
|
||||||
|
|
||||||
|
hres = IInternetPriority_GetPriority(priority, &pr);
|
||||||
|
ok(hres == S_OK, "GetPriority failed: %08lx\n", hres);
|
||||||
|
ok(pr == 1, "pr=%ld, expected 1\n", pr);
|
||||||
|
|
||||||
|
IInternetPriority_Release(priority);
|
||||||
|
}
|
||||||
|
|
||||||
static void file_protocol_start(IInternetProtocol *protocol, LPCWSTR url, BOOL is_first)
|
static void file_protocol_start(IInternetProtocol *protocol, LPCWSTR url, BOOL is_first)
|
||||||
{
|
{
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
|
@ -414,11 +439,45 @@ static void test_file_protocol(void) {
|
||||||
IInternetProtocol_Release(protocol);
|
IInternetProtocol_Release(protocol);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_http_protocol(void)
|
||||||
|
{
|
||||||
|
IInternetProtocol *protocol;
|
||||||
|
IInternetProtocolInfo *protocol_info;
|
||||||
|
IClassFactory *factory;
|
||||||
|
IUnknown *unk;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
hres = CoGetClassObject(&CLSID_HttpProtocol, CLSCTX_INPROC_SERVER, NULL,
|
||||||
|
&IID_IUnknown, (void**)&unk);
|
||||||
|
ok(hres == S_OK, "CoGetClassObject failed: %08lx\n", hres);
|
||||||
|
if(!SUCCEEDED(hres))
|
||||||
|
return;
|
||||||
|
|
||||||
|
hres = IUnknown_QueryInterface(unk, &IID_IInternetProtocolInfo, (void**)&protocol_info);
|
||||||
|
ok(hres == E_NOINTERFACE,
|
||||||
|
"Could not get IInternetProtocolInfo interface: %08lx, expected E_NOINTERFACE\n", hres);
|
||||||
|
|
||||||
|
hres = IUnknown_QueryInterface(unk, &IID_IClassFactory, (void**)&factory);
|
||||||
|
ok(hres == S_OK, "Could not get IClassFactory interface\n");
|
||||||
|
IUnknown_Release(unk);
|
||||||
|
if(FAILED(hres))
|
||||||
|
return;
|
||||||
|
|
||||||
|
hres = IClassFactory_CreateInstance(factory, NULL, &IID_IInternetProtocol,
|
||||||
|
(void**)&protocol);
|
||||||
|
ok(hres == S_OK, "Could not get IInternetProtocol: %08lx\n", hres);
|
||||||
|
|
||||||
|
test_priority(protocol);
|
||||||
|
|
||||||
|
IInternetProtocol_Release(protocol);
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(protocol)
|
START_TEST(protocol)
|
||||||
{
|
{
|
||||||
OleInitialize(NULL);
|
OleInitialize(NULL);
|
||||||
|
|
||||||
test_file_protocol();
|
test_file_protocol();
|
||||||
|
test_http_protocol();
|
||||||
|
|
||||||
OleUninitialize();
|
OleUninitialize();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue