Added CreateAsyncBindCtxEx implementation.
diff --git a/dlls/urlmon/tests/Makefile.in b/dlls/urlmon/tests/Makefile.in
index 3db88cf..c9045a2 100644
--- a/dlls/urlmon/tests/Makefile.in
+++ b/dlls/urlmon/tests/Makefile.in
@@ -3,7 +3,7 @@
SRCDIR = @srcdir@
VPATH = @srcdir@
TESTDLL = urlmon.dll
-IMPORTS = urlmon user32 kernel32
+IMPORTS = urlmon user32 kernel32 ole32
EXTRALIBS = -luuid
CTESTS = \
diff --git a/dlls/urlmon/tests/url.c b/dlls/urlmon/tests/url.c
index b8c3614..40b7bd5 100644
--- a/dlls/urlmon/tests/url.c
+++ b/dlls/urlmon/tests/url.c
@@ -218,13 +218,14 @@
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,
"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.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);
@@ -234,6 +235,64 @@
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 +361,6 @@
{
test_create();
test_CreateAsyncBindCtx();
+ test_CreateAsyncBindCtxEx();
test_BindToStorage();
}
diff --git a/dlls/urlmon/umon.c b/dlls/urlmon/umon.c
index b4d7904..615fab9 100644
--- a/dlls/urlmon/umon.c
+++ b/dlls/urlmon/umon.c
@@ -1179,16 +1179,38 @@
HRESULT WINAPI CreateAsyncBindCtx(DWORD reserved, IBindStatusCallback *callback,
IEnumFORMATETC *format, IBindCtx **pbind)
{
- HRESULT hres;
- BIND_OPTS bindopts;
- IBindCtx *bctx;
-
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("(%p %08lx %p %p %p %ld)\n", ibind, options, callback, format, pbind, reserved);
+
+ 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 @@
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 @@
IBindStatusCallback_Release(prev);
}
- return IBindCtx_RegisterObjectParam(pbc, (LPOLESTR)BSCBHolder, (IUnknown *)pbsc);
+ return IBindCtx_RegisterObjectParam(pbc, (LPOLESTR)BSCBHolder, (IUnknown *)pbsc);
}
/***********************************************************************