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