Nikolay Sivov : msxml3: Support VT_VARIANT|VT_BYREF for body data.
Alexandre Julliard
julliard at winehq.org
Mon Dec 19 13:39:22 CST 2011
Module: wine
Branch: master
Commit: 466341b6efd6ec9a6213df1081e232482fbde1e4
URL: http://source.winehq.org/git/wine.git/?a=commit;h=466341b6efd6ec9a6213df1081e232482fbde1e4
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Mon Dec 19 00:20:59 2011 +0300
msxml3: Support VT_VARIANT|VT_BYREF for body data.
---
dlls/msxml3/httprequest.c | 12 +++++++++-
dlls/msxml3/tests/domdoc.c | 45 +++++++++++++++++++++----------------------
2 files changed, 32 insertions(+), 25 deletions(-)
diff --git a/dlls/msxml3/httprequest.c b/dlls/msxml3/httprequest.c
index 9653644..5591d2a 100644
--- a/dlls/msxml3/httprequest.c
+++ b/dlls/msxml3/httprequest.c
@@ -562,7 +562,12 @@ static HRESULT BindStatusCallback_create(httprequest* This, BindStatusCallback *
if (This->verb != BINDVERB_GET)
{
- if (V_VT(body) == VT_BSTR)
+ if (V_VT(body) == (VT_VARIANT|VT_BYREF))
+ body = V_VARIANTREF(body);
+
+ switch (V_VT(body))
+ {
+ case VT_BSTR:
{
int len = SysStringLen(V_BSTR(body)), size;
const WCHAR *str = V_BSTR(body);
@@ -599,9 +604,12 @@ static HRESULT BindStatusCallback_create(httprequest* This, BindStatusCallback *
memcpy(send_data, ptr, size);
GlobalUnlock(bsc->body);
heap_free(ptr);
+ break;
}
- else
+ default:
FIXME("unsupported body data type %d\n", V_VT(body));
+ break;
+ }
}
hr = RegisterBindStatusCallback(pbc, &bsc->IBindStatusCallback_iface, NULL, 0);
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index 86d0cbf..93620a2 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -4677,23 +4677,19 @@ static void _test_IObjectSafety_common(unsigned line, IObjectSafety *safety)
static void test_XMLHTTP(void)
{
- static const WCHAR wszBody[] = {'m','o','d','e','=','T','e','s','t',0};
- static const WCHAR wszUrl[] = {'h','t','t','p',':','/','/',
- 'c','r','o','s','s','o','v','e','r','.','c','o','d','e','w','e','a','v','e','r','s','.','c','o','m','/',
- 'p','o','s','t','t','e','s','t','.','p','h','p',0};
- static const WCHAR xmltestW[] = {'h','t','t','p',':','/','/',
- 'c','r','o','s','s','o','v','e','r','.','c','o','d','e','w','e','a','v','e','r','s','.','c','o','m','/',
- 'x','m','l','t','e','s','t','.','x','m','l',0};
+ static const char bodyA[] = "mode=Test";
+ static const char urlA[] = "http://crossover.codeweavers.com/posttest.php";
+ static const char xmltestA[] = "http://crossover.codeweavers.com/xmltest.xml";
static const WCHAR wszExpectedResponse[] = {'F','A','I','L','E','D',0};
static const CHAR xmltestbodyA[] = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<a>TEST</a>\n";
IXMLHttpRequest *xhr;
IObjectSafety *safety;
IObjectWithSite *obj_site, *obj_site2;
- BSTR bstrResponse, url, str, str1;
+ BSTR bstrResponse, str, str1;
+ VARIANT varbody, varbody_ref;
VARIANT dummy;
VARIANT async;
- VARIANT varbody;
LONG state, status, bound;
IDispatch *event;
void *ptr;
@@ -4714,10 +4710,6 @@ static void test_XMLHTTP(void)
VariantInit(&async);
V_VT(&async) = VT_BOOL;
V_BOOL(&async) = VARIANT_FALSE;
- V_VT(&varbody) = VT_BSTR;
- V_BSTR(&varbody) = SysAllocString(wszBody);
-
- url = SysAllocString(wszUrl);
hr = IXMLHttpRequest_put_onreadystatechange(xhr, NULL);
EXPECT_HR(hr, S_OK);
@@ -4759,7 +4751,7 @@ static void test_XMLHTTP(void)
hr = IXMLHttpRequest_open(xhr, _bstr_("POST"), NULL, async, dummy, dummy);
EXPECT_HR(hr, E_INVALIDARG);
- hr = IXMLHttpRequest_open(xhr, NULL, url, async, dummy, dummy);
+ hr = IXMLHttpRequest_open(xhr, NULL, _bstr_(urlA), async, dummy, dummy);
EXPECT_HR(hr, E_INVALIDARG);
hr = IXMLHttpRequest_setRequestHeader(xhr, NULL, NULL);
@@ -4791,7 +4783,7 @@ static void test_XMLHTTP(void)
g_unexpectedcall = g_expectedcall = 0;
- hr = IXMLHttpRequest_open(xhr, _bstr_("POST"), url, async, dummy, dummy);
+ hr = IXMLHttpRequest_open(xhr, _bstr_("POST"), _bstr_(urlA), async, dummy, dummy);
EXPECT_HR(hr, S_OK);
ok(g_unexpectedcall == 0, "unexpected disp event call\n");
@@ -4817,7 +4809,7 @@ static void test_XMLHTTP(void)
ok(state == READYSTATE_UNINITIALIZED || broken(state == READYSTATE_LOADING) /* win2k */,
"got %d, expected READYSTATE_UNINITIALIZED\n", state);
- hr = IXMLHttpRequest_open(xhr, _bstr_("POST"), url, async, dummy, dummy);
+ hr = IXMLHttpRequest_open(xhr, _bstr_("POST"), _bstr_(urlA), async, dummy, dummy);
EXPECT_HR(hr, S_OK);
hr = IXMLHttpRequest_setRequestHeader(xhr, _bstr_("header1"), _bstr_("value1"));
@@ -4829,7 +4821,8 @@ static void test_XMLHTTP(void)
hr = IXMLHttpRequest_setRequestHeader(xhr, _bstr_(""), _bstr_("value1"));
EXPECT_HR(hr, E_INVALIDARG);
- SysFreeString(url);
+ V_VT(&varbody) = VT_BSTR;
+ V_BSTR(&varbody) = _bstr_(bodyA);
hr = IXMLHttpRequest_send(xhr, varbody);
if (hr == INET_E_RESOURCE_NOT_FOUND)
@@ -4870,11 +4863,12 @@ static void test_XMLHTTP(void)
ok(status == 200, "got %d\n", status);
/* another ::send() after completed request */
+ V_VT(&varbody) = VT_BSTR;
+ V_BSTR(&varbody) = _bstr_(bodyA);
+
hr = IXMLHttpRequest_send(xhr, varbody);
ok(hr == E_FAIL || broken(hr == E_UNEXPECTED) /* win2k */, "got 0x%08x\n", hr);
- VariantClear(&varbody);
-
hr = IXMLHttpRequest_get_responseText(xhr, &bstrResponse);
EXPECT_HR(hr, S_OK);
/* the server currently returns "FAILED" because the Content-Type header is
@@ -4886,10 +4880,16 @@ static void test_XMLHTTP(void)
SysFreeString(bstrResponse);
}
- /* GET request */
- url = SysAllocString(xmltestW);
+ /* POST: VT_VARIANT|VT_BYREF body */
+ V_VT(&varbody_ref) = VT_VARIANT|VT_BYREF;
+ V_VARIANTREF(&varbody_ref) = &varbody;
+ hr = IXMLHttpRequest_open(xhr, _bstr_("POST"), _bstr_(urlA), async, dummy, dummy);
+ EXPECT_HR(hr, S_OK);
+ hr = IXMLHttpRequest_send(xhr, varbody_ref);
+ EXPECT_HR(hr, S_OK);
- hr = IXMLHttpRequest_open(xhr, _bstr_("GET"), url, async, dummy, dummy);
+ /* GET request */
+ hr = IXMLHttpRequest_open(xhr, _bstr_("GET"), _bstr_(xmltestA), async, dummy, dummy);
EXPECT_HR(hr, S_OK);
V_VT(&varbody) = VT_EMPTY;
@@ -4932,7 +4932,6 @@ static void test_XMLHTTP(void)
SafeArrayUnaccessData(V_ARRAY(&varbody));
VariantClear(&varbody);
- SysFreeString(url);
/* get_responseStream */
hr = IXMLHttpRequest_get_responseStream(xhr, NULL);
More information about the wine-cvs
mailing list