Piotr Caban : mshtml/tests: Added asynchronous moniker to htmldoc tests.

Alexandre Julliard julliard at winehq.org
Tue Mar 29 11:43:04 CDT 2011


Module: wine
Branch: master
Commit: f7afa250f80b0c3e78f9c0726d09b8e7c96616f1
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f7afa250f80b0c3e78f9c0726d09b8e7c96616f1

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Mon Mar 28 23:36:35 2011 +0200

mshtml/tests: Added asynchronous moniker to htmldoc tests.

---

 dlls/mshtml/tests/htmldoc.c |   88 ++++++++++++++++++++++++++++---------------
 1 files changed, 57 insertions(+), 31 deletions(-)

diff --git a/dlls/mshtml/tests/htmldoc.c b/dlls/mshtml/tests/htmldoc.c
index 3dac323..843b9cc 100644
--- a/dlls/mshtml/tests/htmldoc.c
+++ b/dlls/mshtml/tests/htmldoc.c
@@ -177,6 +177,7 @@ static BOOL readystate_set_loading = FALSE, readystate_set_interactive = FALSE,
 static BOOL editmode = FALSE;
 static BOOL inplace_deactivated, open_call;
 static DWORD status_code = HTTP_STATUS_OK;
+static BOOL asynchronous_binding = FALSE;
 static int stream_read, protocol_read;
 static enum load_state_t {
     LD_DOLOAD,
@@ -204,6 +205,7 @@ static const WCHAR http_urlW[] =
 static const WCHAR doc_url[] = {'w','i','n','e','t','e','s','t',':','d','o','c',0};
 
 #define DOCHOST_DOCCANNAVIGATE 0
+#define WM_CONTINUE_BINDING (WM_APP+1)
 
 static HRESULT QueryInterface(REFIID riid, void **ppv);
 static void test_MSHTML_QueryStatus(IHTMLDocument2*,DWORD);
@@ -1054,6 +1056,11 @@ static IWinInetHttpInfo WinInetHttpInfo = { &WinInetHttpInfoVtbl };
 
 static HRESULT WINAPI Binding_QueryInterface(IBinding *iface, REFIID riid, void **ppv)
 {
+    if(IsEqualGUID(&IID_IUnknown, riid)) {
+        *ppv = iface;
+        return S_OK;
+    }
+
     if(IsEqualGUID(&IID_IWinInetInfo, riid) || IsEqualGUID(&IID_IWinInetHttpInfo, riid)) {
         *ppv = &WinInetHttpInfo;
         return S_OK;
@@ -1076,6 +1083,8 @@ static ULONG WINAPI Binding_Release(IBinding *iface)
 static HRESULT WINAPI Binding_Abort(IBinding *iface)
 {
     CHECK_EXPECT(Abort);
+    if(asynchronous_binding)
+        PeekMessage(NULL, container_hwnd, WM_CONTINUE_BINDING, WM_CONTINUE_BINDING, PM_REMOVE);
     return S_OK;
 }
 
@@ -1188,18 +1197,53 @@ static HRESULT WINAPI Moniker_BindToObject(IMoniker *iface, IBindCtx *pcb, IMoni
     return E_NOTIMPL;
 }
 
+static void continue_binding(IBindStatusCallback *callback)
+{
+    FORMATETC formatetc = {0xc02d, NULL, 1, -1, TYMED_ISTREAM};
+    STGMEDIUM stgmedium;
+    HRESULT hres;
+
+    static const WCHAR wszTextHtml[] = {'t','e','x','t','/','h','t','m','l',0};
+
+    hres = IBindStatusCallback_OnProgress(callback, 0, 0, BINDSTATUS_MIMETYPEAVAILABLE,
+            wszTextHtml);
+    ok(hres == S_OK, "OnProgress(BINDSTATUS_MIMETYPEAVAILABLE) failed: %08x\n", hres);
+
+    hres = IBindStatusCallback_OnProgress(callback, sizeof(html_page)-1, sizeof(html_page)-1,
+            BINDSTATUS_BEGINDOWNLOADDATA, doc_url);
+    ok(hres == S_OK, "OnProgress(BINDSTATUS_BEGINDOWNLOADDATA) failed: %08x\n", hres);
+
+    SET_EXPECT(Read);
+    stgmedium.tymed = TYMED_ISTREAM;
+    U(stgmedium).pstm = &Stream;
+    stgmedium.pUnkForRelease = (IUnknown*)&Moniker;
+    hres = IBindStatusCallback_OnDataAvailable(callback,
+            BSCF_FIRSTDATANOTIFICATION|BSCF_LASTDATANOTIFICATION,
+            sizeof(html_page)-1, &formatetc, &stgmedium);
+    ok(hres == S_OK, "OnDataAvailable failed: %08x\n", hres);
+    CHECK_CALLED(Read);
+
+    hres = IBindStatusCallback_OnProgress(callback, sizeof(html_page)-1, sizeof(html_page)-1,
+            BINDSTATUS_ENDDOWNLOADDATA, NULL);
+    ok(hres == S_OK, "OnProgress(BINDSTATUS_ENDDOWNLOADDATA) failed: %08x\n", hres);
+
+    SET_EXPECT(GetBindResult);
+    hres = IBindStatusCallback_OnStopBinding(callback, S_OK, NULL);
+    ok(hres == S_OK, "OnStopBinding failed: %08x\n", hres);
+    SET_CALLED(GetBindResult); /* IE7 */
+
+    IBindStatusCallback_Release(callback);
+}
+
 static HRESULT WINAPI Moniker_BindToStorage(IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft,
         REFIID riid, void **ppv)
 {
     IBindStatusCallback *callback = NULL;
-    FORMATETC formatetc = {0xc02d, NULL, 1, -1, TYMED_ISTREAM};
-    STGMEDIUM stgmedium;
     BINDINFO bindinfo;
     DWORD bindf;
     HRESULT hres;
 
     static OLECHAR BSCBHolder[] = { '_','B','S','C','B','_','H','o','l','d','e','r','_',0 };
-    static const WCHAR wszTextHtml[] = {'t','e','x','t','/','h','t','m','l',0};
 
     CHECK_EXPECT(BindToStorage);
 
@@ -1240,35 +1284,12 @@ static HRESULT WINAPI Moniker_BindToStorage(IMoniker *iface, IBindCtx *pbc, IMon
     hres = IBindStatusCallback_OnStartBinding(callback, 0, &Binding);
     ok(hres == S_OK, "OnStartBinding failed: %08x\n", hres);
 
-    hres = IBindStatusCallback_OnProgress(callback, 0, 0, BINDSTATUS_MIMETYPEAVAILABLE,
-                                          wszTextHtml);
-    ok(hres == S_OK, "OnProgress(BINDSTATUS_MIMETYPEAVAILABLE) failed: %08x\n", hres);
-
-    hres = IBindStatusCallback_OnProgress(callback, sizeof(html_page)-1, sizeof(html_page)-1,
-                                          BINDSTATUS_BEGINDOWNLOADDATA, doc_url);
-    ok(hres == S_OK, "OnProgress(BINDSTATUS_BEGINDOWNLOADDATA) failed: %08x\n", hres);
-
-    SET_EXPECT(Read);
-    stgmedium.tymed = TYMED_ISTREAM;
-    U(stgmedium).pstm = &Stream;
-    stgmedium.pUnkForRelease = (IUnknown*)iface;
-    hres = IBindStatusCallback_OnDataAvailable(callback,
-            BSCF_FIRSTDATANOTIFICATION|BSCF_LASTDATANOTIFICATION,
-            sizeof(html_page)-1, &formatetc, &stgmedium);
-    ok(hres == S_OK, "OnDataAvailable failed: %08x\n", hres);
-    CHECK_CALLED(Read);
-
-    hres = IBindStatusCallback_OnProgress(callback, sizeof(html_page)-1, sizeof(html_page)-1,
-            BINDSTATUS_ENDDOWNLOADDATA, NULL);
-    ok(hres == S_OK, "OnProgress(BINDSTATUS_ENDDOWNLOADDATA) failed: %08x\n", hres);
-
-    SET_EXPECT(GetBindResult);
-    hres = IBindStatusCallback_OnStopBinding(callback, S_OK, NULL);
-    ok(hres == S_OK, "OnStopBinding failed: %08x\n", hres);
-    SET_CALLED(GetBindResult); /* IE7 */
-
-    IBindStatusCallback_Release(callback);
+    if(asynchronous_binding) {
+        PostMessageW(container_hwnd, WM_CONTINUE_BINDING, (WPARAM)callback, 0);
+        return MK_S_ASYNCHRONOUS;
+    }
 
+    continue_binding(callback);
     return S_OK;
 }
 
@@ -3533,6 +3554,11 @@ static HRESULT QueryInterface(REFIID riid, void **ppv)
 
 static LRESULT WINAPI wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
+    if(msg == WM_CONTINUE_BINDING) {
+        IBindStatusCallback *callback = (IBindStatusCallback*)wParam;
+        continue_binding(callback);
+    }
+
     return DefWindowProc(hwnd, msg, wParam, lParam);
 }
 




More information about the wine-cvs mailing list