URLMON: Added implementation of IInternetPriority in HttpProtocol
Jacek Caban
jack at itma.pwr.wroc.pl
Tue Nov 8 13:52:02 CST 2005
Changelog:
Added implementation of IInternetPriority in HttpProtocol
-------------- next part --------------
Index: dlls/urlmon/http.c
===================================================================
RCS file: /home/wine/wine/dlls/urlmon/http.c,v
retrieving revision 1.1
diff -u -p -r1.1 http.c
--- dlls/urlmon/http.c 14 Sep 2005 15:38:26 -0000 1.1
+++ dlls/urlmon/http.c 8 Nov 2005 19:51:06 -0000
@@ -32,13 +32,18 @@
WINE_DEFAULT_DEBUG_CHANNEL(urlmon);
typedef struct {
- const IInternetProtocolVtbl *lpInternetProtocolVtbl;
+ const IInternetProtocolVtbl *lpInternetProtocolVtbl;
+ const IInternetPriorityVtbl *lpInternetPriorityVtbl;
+
+ LONG priority;
+
LONG ref;
} HttpProtocol;
-#define PROTOCOL_THIS(iface) DEFINE_THIS(HttpProtocol, InternetProtocol, iface)
-
#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)
{
@@ -54,6 +59,9 @@ static HRESULT WINAPI HttpProtocol_Query
}else if(IsEqualGUID(&IID_IInternetProtocol, riid)) {
TRACE("(%p)->(IID_IInternetProtocol %p)\n", This, ppv);
*ppv = PROTOCOL(This);
+ }else if(IsEqualGUID(&IID_IInternetPriority, riid)) {
+ TRACE("(%p)->(IID_IInternetPriority %p)\n", This, ppv);
+ *ppv = PRIORITY(This);
}
if(*ppv) {
@@ -167,6 +175,56 @@ static HRESULT WINAPI HttpProtocol_Unloc
#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 = {
HttpProtocol_QueryInterface,
HttpProtocol_AddRef,
@@ -194,8 +252,12 @@ HRESULT HttpProtocol_Construct(IUnknown
ret = HeapAlloc(GetProcessHeap(), 0, sizeof(HttpProtocol));
ret->lpInternetProtocolVtbl = &HttpProtocolVtbl;
+ ret->lpInternetPriorityVtbl = &HttpPriorityVtbl;
+
ret->ref = 1;
+ ret->priority = 0;
+
*ppobj = PROTOCOL(ret);
return S_OK;
Index: dlls/urlmon/tests/protocol.c
===================================================================
RCS file: /home/wine/wine/dlls/urlmon/tests/protocol.c,v
retrieving revision 1.5
diff -u -p -r1.5 protocol.c
--- dlls/urlmon/tests/protocol.c 29 Oct 2005 10:28:47 -0000 1.5
+++ dlls/urlmon/tests/protocol.c 8 Nov 2005 19:51:06 -0000
@@ -206,6 +206,31 @@ static IInternetBindInfoVtbl bind_info_v
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)
{
HRESULT hres;
@@ -414,11 +439,45 @@ static void test_file_protocol(void) {
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)
{
OleInitialize(NULL);
test_file_protocol();
+ test_http_protocol();
OleUninitialize();
}
More information about the wine-patches
mailing list