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