URLMON: Added CreateAsyncBindCtxEx implementation
Jacek Caban
jack at itma.pwr.wroc.pl
Fri Sep 2 14:40:53 CDT 2005
Changelog:
Added CreateAsyncBindCtxEx implementation
-------------- next part --------------
Index: dlls/urlmon/umon.c
===================================================================
RCS file: /home/wine/wine/dlls/urlmon/umon.c,v
retrieving revision 1.61
diff -u -p -r1.61 umon.c
--- dlls/urlmon/umon.c 18 Jul 2005 09:08:16 -0000 1.61
+++ dlls/urlmon/umon.c 2 Sep 2005 17:35:51 -0000
@@ -1179,16 +1179,38 @@ static HRESULT URLMonikerImpl_Construct(
HRESULT WINAPI CreateAsyncBindCtx(DWORD reserved, IBindStatusCallback *callback,
IEnumFORMATETC *format, IBindCtx **pbind)
{
+ TRACE("(%08lx %p %p %p)\n", reserved, callback, format, pbind);
+
+ if(!callback)
+ return E_INVALIDARG;
+
+ return CreateAsyncBindCtxEx(NULL, 0, callback, format, pbind, 0);
+}
+/***********************************************************************
+ * CreateAsyncBindCtxEx (URLMON.@)
+ *
+ * Create an asynchronous bind context.
+ */
+HRESULT WINAPI CreateAsyncBindCtxEx(IBindCtx *ibind, DWORD options,
+ IBindStatusCallback *callback, IEnumFORMATETC *format, IBindCtx** pbind,
+ DWORD reserved)
+{
HRESULT hres;
BIND_OPTS bindopts;
IBindCtx *bctx;
- TRACE("(%08lx %p %p %p)\n", reserved, callback, format, pbind);
+ TRACE("(%p %08lx %p %p %p %ld)\n", ibind, options, callback, format, pbind, reserved);
- if(!callback)
+ if(!pbind)
return E_INVALIDARG;
+
+ if(options)
+ FIXME("not supported options %08lx", options);
if(format)
- FIXME("format is not supported yet\n");
+ FIXME("format is not supported\n");
+
+ if(reserved)
+ WARN("reserved=%ld\n", reserved);
hres = CreateBindCtx(0, &bctx);
if(FAILED(hres))
@@ -1200,31 +1222,13 @@ HRESULT WINAPI CreateAsyncBindCtx(DWORD
bindopts.dwTickCountDeadline = 0;
IBindCtx_SetBindOptions(bctx, &bindopts);
- hres = IBindCtx_RegisterObjectParam(bctx, (LPOLESTR)BSCBHolder, (IUnknown*)callback);
- if(FAILED(hres)) {
- IBindCtx_Release(bctx);
- return hres;
- }
+ if(callback)
+ RegisterBindStatusCallback(bctx, callback, NULL, 0);
*pbind = bctx;
return S_OK;
}
-/***********************************************************************
- * CreateAsyncBindCtxEx (URLMON.@)
- *
- * Create an asynchronous bind context.
- *
- * FIXME
- * Not implemented.
- */
-HRESULT WINAPI CreateAsyncBindCtxEx(IBindCtx *ibind, DWORD options,
- IBindStatusCallback *callback, IEnumFORMATETC *format, IBindCtx** pbind,
- DWORD reserved)
-{
- FIXME("stub, returns failure\n");
- return E_INVALIDARG;
-}
/***********************************************************************
@@ -1445,7 +1449,7 @@ HRESULT WINAPI RegisterBindStatusCallbac
IBindStatusCallback_Release(prev);
}
- return IBindCtx_RegisterObjectParam(pbc, (LPOLESTR)BSCBHolder, (IUnknown *)pbsc);
+ return IBindCtx_RegisterObjectParam(pbc, (LPOLESTR)BSCBHolder, (IUnknown *)pbsc);
}
/***********************************************************************
Index: dlls/urlmon/tests/Makefile.in
===================================================================
RCS file: /home/wine/wine/dlls/urlmon/tests/Makefile.in,v
retrieving revision 1.5
diff -u -p -r1.5 Makefile.in
--- dlls/urlmon/tests/Makefile.in 2 Sep 2005 12:17:29 -0000 1.5
+++ dlls/urlmon/tests/Makefile.in 2 Sep 2005 17:35:51 -0000
@@ -3,7 +3,7 @@ TOPOBJDIR = ../../..
SRCDIR = @srcdir@
VPATH = @srcdir@
TESTDLL = urlmon.dll
-IMPORTS = urlmon user32 kernel32
+IMPORTS = urlmon user32 kernel32 ole32
EXTRALIBS = -luuid
CTESTS = \
Index: dlls/urlmon/tests/url.c
===================================================================
RCS file: /home/wine/wine/dlls/urlmon/tests/url.c,v
retrieving revision 1.10
diff -u -p -r1.10 url.c
--- dlls/urlmon/tests/url.c 13 Jul 2005 11:59:15 -0000 1.10
+++ dlls/urlmon/tests/url.c 2 Sep 2005 17:35:51 -0000
@@ -218,7 +218,7 @@ static void test_CreateAsyncBindCtx(void
return;
}
- bindopts.cbStruct = 16;
+ bindopts.cbStruct = sizeof(bindopts);;
hres = IBindCtx_GetBindOptions(bctx, &bindopts);
ok(SUCCEEDED(hres), "IBindCtx_GetBindOptions failed: %08lx\n", hres);
ok(bindopts.grfFlags == BIND_MAYBOTHERUSER,
@@ -234,6 +234,64 @@ static void test_CreateAsyncBindCtx(void
ok(ref == 0, "bsc should be destroyed here\n");
}
+static void test_CreateAsyncBindCtxEx(void)
+{
+ IBindCtx *bctx = NULL, *bctx_arg = NULL;
+ IBindStatusCallback *bsc = statusclb_create();
+ BIND_OPTS bindopts;
+ HRESULT hres;
+
+ hres = CreateAsyncBindCtxEx(NULL, 0, NULL, NULL, NULL, 0);
+ ok(hres == E_INVALIDARG, "CreateAsyncBindCtx failed: %08lx, expected E_INVALIDARG\n", hres);
+
+ hres = CreateAsyncBindCtxEx(NULL, 0, NULL, NULL, &bctx, 0);
+ ok(hres == S_OK, "CreateAsyncBindCtxEx failed: %08lx\n", hres);
+
+ if(SUCCEEDED(hres)) {
+ bindopts.cbStruct = sizeof(bindopts);
+ hres = IBindCtx_GetBindOptions(bctx, &bindopts);
+ ok(SUCCEEDED(hres), "IBindCtx_GetBindOptions failed: %08lx\n", hres);
+ ok(bindopts.grfFlags == BIND_MAYBOTHERUSER,
+ "bindopts.grfFlags = %08lx, expected: BIND_MAYBOTHERUSER\n", bindopts.grfFlags);
+ ok(bindopts.grfMode = STGM_READWRITE | STGM_SHARE_EXCLUSIVE,
+ "bindopts.grfMode = %08lx, expected: STGM_READWRITE | STGM_SHARE_EXCLUSIVE\n",
+ bindopts.grfMode);
+ ok(bindopts.dwTickCountDeadline == 0,
+ "bindopts.dwTickCountDeadline = %08lx, expected: 0\n", bindopts.dwTickCountDeadline);
+
+ IBindCtx_Release(bctx);
+ }
+
+ CreateBindCtx(0, &bctx_arg);
+ hres = CreateAsyncBindCtxEx(NULL, 0, NULL, NULL, &bctx, 0);
+ ok(hres == S_OK, "CreateAsyncBindCtxEx failed: %08lx\n", hres);
+
+ if(SUCCEEDED(hres)) {
+ bindopts.cbStruct = sizeof(bindopts);
+ hres = IBindCtx_GetBindOptions(bctx, &bindopts);
+ ok(SUCCEEDED(hres), "IBindCtx_GetBindOptions failed: %08lx\n", hres);
+ ok(bindopts.grfFlags == BIND_MAYBOTHERUSER,
+ "bindopts.grfFlags = %08lx, expected: BIND_MAYBOTHERUSER\n", bindopts.grfFlags);
+ ok(bindopts.grfMode = STGM_READWRITE | STGM_SHARE_EXCLUSIVE,
+ "bindopts.grfMode = %08lx, expected: STGM_READWRITE | STGM_SHARE_EXCLUSIVE\n",
+ bindopts.grfMode);
+ ok(bindopts.dwTickCountDeadline == 0,
+ "bindopts.dwTickCountDeadline = %08lx, expected: 0\n", bindopts.dwTickCountDeadline);
+
+ IBindCtx_Release(bctx);
+ }
+
+ IBindCtx_Release(bctx_arg);
+
+ hres = CreateAsyncBindCtxEx(NULL, 0, bsc, NULL, &bctx, 0);
+ ok(hres == S_OK, "CreateAsyncBindCtxEx failed: %08lx\n", hres);
+
+ if(SUCCEEDED(hres))
+ IBindCtx_Release(bctx);
+
+ IBindStatusCallback_Release(bsc);
+}
+
static void test_BindToStorage(void)
{
IMoniker *mon;
@@ -302,5 +360,6 @@ START_TEST(url)
{
test_create();
test_CreateAsyncBindCtx();
+ test_CreateAsyncBindCtxEx();
test_BindToStorage();
}
More information about the wine-patches
mailing list