mirror of
https://github.com/reactos/wine.git
synced 2025-02-08 05:08:16 +00:00
urlmon: Added BindProtocol's IInternetPriority implementation.
This commit is contained in:
parent
166b3a6cdb
commit
fed5d9e1ff
@ -42,6 +42,8 @@ typedef struct {
|
|||||||
IInternetProtocol *protocol;
|
IInternetProtocol *protocol;
|
||||||
IInternetBindInfo *bind_info;
|
IInternetBindInfo *bind_info;
|
||||||
IInternetProtocolSink *protocol_sink;
|
IInternetProtocolSink *protocol_sink;
|
||||||
|
|
||||||
|
LONG priority;
|
||||||
} BindProtocol;
|
} BindProtocol;
|
||||||
|
|
||||||
#define PROTOCOL(x) ((IInternetProtocol*) &(x)->lpInternetProtocolVtbl)
|
#define PROTOCOL(x) ((IInternetProtocol*) &(x)->lpInternetProtocolVtbl)
|
||||||
@ -126,6 +128,7 @@ static HRESULT WINAPI BindProtocol_Start(IInternetProtocol *iface, LPCWSTR szUrl
|
|||||||
{
|
{
|
||||||
BindProtocol *This = PROTOCOL_THIS(iface);
|
BindProtocol *This = PROTOCOL_THIS(iface);
|
||||||
IInternetProtocol *protocol = NULL;
|
IInternetProtocol *protocol = NULL;
|
||||||
|
IInternetPriority *priority;
|
||||||
IServiceProvider *service_provider;
|
IServiceProvider *service_provider;
|
||||||
CLSID clsid = IID_NULL;
|
CLSID clsid = IID_NULL;
|
||||||
LPOLESTR clsid_str;
|
LPOLESTR clsid_str;
|
||||||
@ -178,6 +181,12 @@ static HRESULT WINAPI BindProtocol_Start(IInternetProtocol *iface, LPCWSTR szUrl
|
|||||||
IInternetProtocolSink_AddRef(pOIProtSink);
|
IInternetProtocolSink_AddRef(pOIProtSink);
|
||||||
This->protocol_sink = pOIProtSink;
|
This->protocol_sink = pOIProtSink;
|
||||||
|
|
||||||
|
hres = IInternetProtocol_QueryInterface(protocol, &IID_IInternetPriority, (void**)&priority);
|
||||||
|
if(SUCCEEDED(hres)) {
|
||||||
|
IInternetPriority_SetPriority(priority, This->priority);
|
||||||
|
IInternetPriority_Release(priority);
|
||||||
|
}
|
||||||
|
|
||||||
return IInternetProtocol_Start(protocol, szUrl, PROTSINK(This), BINDINFO(This), 0, 0);
|
return IInternetProtocol_Start(protocol, szUrl, PROTSINK(This), BINDINFO(This), 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -356,15 +365,21 @@ static ULONG WINAPI InternetPriority_Release(IInternetPriority *iface)
|
|||||||
static HRESULT WINAPI InternetPriority_SetPriority(IInternetPriority *iface, LONG nPriority)
|
static HRESULT WINAPI InternetPriority_SetPriority(IInternetPriority *iface, LONG nPriority)
|
||||||
{
|
{
|
||||||
BindProtocol *This = PRIORITY_THIS(iface);
|
BindProtocol *This = PRIORITY_THIS(iface);
|
||||||
FIXME("(%p)->(%d)\n", This, nPriority);
|
|
||||||
return E_NOTIMPL;
|
TRACE("(%p)->(%d)\n", This, nPriority);
|
||||||
|
|
||||||
|
This->priority = nPriority;
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI InternetPriority_GetPriority(IInternetPriority *iface, LONG *pnPriority)
|
static HRESULT WINAPI InternetPriority_GetPriority(IInternetPriority *iface, LONG *pnPriority)
|
||||||
{
|
{
|
||||||
BindProtocol *This = PRIORITY_THIS(iface);
|
BindProtocol *This = PRIORITY_THIS(iface);
|
||||||
FIXME("(%p)->(%p)\n", This, pnPriority);
|
|
||||||
return E_NOTIMPL;
|
TRACE("(%p)->(%p)\n", This, pnPriority);
|
||||||
|
|
||||||
|
*pnPriority = This->priority;
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef PRIORITY_THIS
|
#undef PRIORITY_THIS
|
||||||
@ -476,6 +491,7 @@ HRESULT create_binding_protocol(LPCWSTR url, IInternetProtocol **protocol)
|
|||||||
ret->protocol = NULL;
|
ret->protocol = NULL;
|
||||||
ret->bind_info = NULL;
|
ret->bind_info = NULL;
|
||||||
ret->protocol_sink = NULL;
|
ret->protocol_sink = NULL;
|
||||||
|
ret->priority = 0;
|
||||||
|
|
||||||
*protocol = PROTOCOL(ret);
|
*protocol = PROTOCOL(ret);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2005 Jacek Caban
|
* Copyright 2005-2007 Jacek Caban for CodeWeavers
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
@ -77,6 +77,7 @@ DEFINE_EXPECT(CreateInstance);
|
|||||||
DEFINE_EXPECT(Start);
|
DEFINE_EXPECT(Start);
|
||||||
DEFINE_EXPECT(Terminate);
|
DEFINE_EXPECT(Terminate);
|
||||||
DEFINE_EXPECT(Read);
|
DEFINE_EXPECT(Read);
|
||||||
|
DEFINE_EXPECT(SetPriority);
|
||||||
|
|
||||||
static const WCHAR wszIndexHtml[] = {'i','n','d','e','x','.','h','t','m','l',0};
|
static const WCHAR wszIndexHtml[] = {'i','n','d','e','x','.','h','t','m','l',0};
|
||||||
static const WCHAR index_url[] =
|
static const WCHAR index_url[] =
|
||||||
@ -486,6 +487,47 @@ static IInternetBindInfoVtbl bind_info_vtbl = {
|
|||||||
|
|
||||||
static IInternetBindInfo bind_info = { &bind_info_vtbl };
|
static IInternetBindInfo bind_info = { &bind_info_vtbl };
|
||||||
|
|
||||||
|
static HRESULT WINAPI InternetPriority_QueryInterface(IInternetPriority *iface,
|
||||||
|
REFIID riid, void **ppv)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOINTERFACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI InternetPriority_AddRef(IInternetPriority *iface)
|
||||||
|
{
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI InternetPriority_Release(IInternetPriority *iface)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI InternetPriority_SetPriority(IInternetPriority *iface, LONG nPriority)
|
||||||
|
{
|
||||||
|
CHECK_EXPECT(SetPriority);
|
||||||
|
ok(nPriority == 100, "nPriority=%d\n", nPriority);
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI InternetPriority_GetPriority(IInternetPriority *iface, LONG *pnPriority)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static const IInternetPriorityVtbl InternetPriorityVtbl = {
|
||||||
|
InternetPriority_QueryInterface,
|
||||||
|
InternetPriority_AddRef,
|
||||||
|
InternetPriority_Release,
|
||||||
|
InternetPriority_SetPriority,
|
||||||
|
InternetPriority_GetPriority
|
||||||
|
};
|
||||||
|
|
||||||
|
static IInternetPriority InternetPriority = { &InternetPriorityVtbl };
|
||||||
|
|
||||||
static HRESULT WINAPI Protocol_QueryInterface(IInternetProtocol *iface, REFIID riid, void **ppv)
|
static HRESULT WINAPI Protocol_QueryInterface(IInternetProtocol *iface, REFIID riid, void **ppv)
|
||||||
{
|
{
|
||||||
if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IInternetProtocol, riid)) {
|
if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IInternetProtocol, riid)) {
|
||||||
@ -493,8 +535,10 @@ static HRESULT WINAPI Protocol_QueryInterface(IInternetProtocol *iface, REFIID r
|
|||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(IsEqualGUID(&IID_IInternetPriority, riid))
|
if(IsEqualGUID(&IID_IInternetPriority, riid)) {
|
||||||
return E_NOINTERFACE; /* TODO */
|
*ppv = &InternetPriority;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
ok(0, "unexpected call\n");
|
ok(0, "unexpected call\n");
|
||||||
*ppv = NULL;
|
*ppv = NULL;
|
||||||
@ -1233,7 +1277,9 @@ static void test_mk_protocol(void)
|
|||||||
static void test_CreateBinding(void)
|
static void test_CreateBinding(void)
|
||||||
{
|
{
|
||||||
IInternetProtocol *protocol;
|
IInternetProtocol *protocol;
|
||||||
|
IInternetPriority *priority;
|
||||||
IInternetSession *session;
|
IInternetSession *session;
|
||||||
|
LONG p;
|
||||||
BYTE buf[1000];
|
BYTE buf[1000];
|
||||||
DWORD read;
|
DWORD read;
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
@ -1265,9 +1311,26 @@ static void test_CreateBinding(void)
|
|||||||
hres = IInternetProtocol_Start(protocol, NULL, &protocol_sink, &bind_info, 0, 0);
|
hres = IInternetProtocol_Start(protocol, NULL, &protocol_sink, &bind_info, 0, 0);
|
||||||
ok(hres == E_INVALIDARG, "Start failed: %08x, expected E_INVALIDARG\n", hres);
|
ok(hres == E_INVALIDARG, "Start failed: %08x, expected E_INVALIDARG\n", hres);
|
||||||
|
|
||||||
|
hres = IInternetProtocol_QueryInterface(protocol, &IID_IInternetPriority, (void**)&priority);
|
||||||
|
ok(hres == S_OK, "QueryInterface(IID_IInternetPriority) failed: %08x\n", hres);
|
||||||
|
|
||||||
|
p = 0xdeadbeef;
|
||||||
|
hres = IInternetPriority_GetPriority(priority, &p);
|
||||||
|
ok(hres == S_OK, "GetPriority failed: %08x\n", hres);
|
||||||
|
ok(!p, "p=%d\n", p);
|
||||||
|
|
||||||
|
hres = IInternetPriority_SetPriority(priority, 100);
|
||||||
|
ok(hres == S_OK, "SetPriority failed: %08x\n", hres);
|
||||||
|
|
||||||
|
p = 0xdeadbeef;
|
||||||
|
hres = IInternetPriority_GetPriority(priority, &p);
|
||||||
|
ok(hres == S_OK, "GetPriority failed: %08x\n", hres);
|
||||||
|
ok(p == 100, "p=%d\n", p);
|
||||||
|
|
||||||
SET_EXPECT(QueryService_InternetProtocol);
|
SET_EXPECT(QueryService_InternetProtocol);
|
||||||
SET_EXPECT(CreateInstance);
|
SET_EXPECT(CreateInstance);
|
||||||
SET_EXPECT(ReportProgress_PROTOCOLCLASSID);
|
SET_EXPECT(ReportProgress_PROTOCOLCLASSID);
|
||||||
|
SET_EXPECT(SetPriority);
|
||||||
SET_EXPECT(Start);
|
SET_EXPECT(Start);
|
||||||
|
|
||||||
expect_hrResult = S_OK;
|
expect_hrResult = S_OK;
|
||||||
@ -1277,6 +1340,7 @@ static void test_CreateBinding(void)
|
|||||||
CHECK_CALLED(QueryService_InternetProtocol);
|
CHECK_CALLED(QueryService_InternetProtocol);
|
||||||
CHECK_CALLED(CreateInstance);
|
CHECK_CALLED(CreateInstance);
|
||||||
CHECK_CALLED(ReportProgress_PROTOCOLCLASSID);
|
CHECK_CALLED(ReportProgress_PROTOCOLCLASSID);
|
||||||
|
CHECK_CALLED(SetPriority);
|
||||||
CHECK_CALLED(Start);
|
CHECK_CALLED(Start);
|
||||||
|
|
||||||
SET_EXPECT(Read);
|
SET_EXPECT(Read);
|
||||||
@ -1293,11 +1357,20 @@ static void test_CreateBinding(void)
|
|||||||
ok(!read, "read = %d\n", read);
|
ok(!read, "read = %d\n", read);
|
||||||
CHECK_CALLED(Read);
|
CHECK_CALLED(Read);
|
||||||
|
|
||||||
|
p = 0xdeadbeef;
|
||||||
|
hres = IInternetPriority_GetPriority(priority, &p);
|
||||||
|
ok(hres == S_OK, "GetPriority failed: %08x\n", hres);
|
||||||
|
ok(p == 100, "p=%d\n", p);
|
||||||
|
|
||||||
|
hres = IInternetPriority_SetPriority(priority, 101);
|
||||||
|
ok(hres == S_OK, "SetPriority failed: %08x\n", hres);
|
||||||
|
|
||||||
SET_EXPECT(Terminate);
|
SET_EXPECT(Terminate);
|
||||||
hres = IInternetProtocol_Terminate(protocol, 0xdeadbeef);
|
hres = IInternetProtocol_Terminate(protocol, 0xdeadbeef);
|
||||||
ok(hres == S_OK, "Terminate failed: %08x\n", hres);
|
ok(hres == S_OK, "Terminate failed: %08x\n", hres);
|
||||||
CHECK_CALLED(Terminate);
|
CHECK_CALLED(Terminate);
|
||||||
|
|
||||||
|
IInternetPriority_Release(priority);
|
||||||
IInternetBindInfo_Release(prot_bind_info);
|
IInternetBindInfo_Release(prot_bind_info);
|
||||||
IInternetProtocol_Release(protocol);
|
IInternetProtocol_Release(protocol);
|
||||||
IInternetSession_Release(session);
|
IInternetSession_Release(session);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user