Jacek Caban : mshtml: Added IHTMLXMLHttpRequest:: getResponseHeader implementation.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Feb 25 10:56:04 CST 2016


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Feb 24 18:53:10 2016 +0100

mshtml: Added IHTMLXMLHttpRequest::getResponseHeader implementation.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mshtml/tests/xmlhttprequest.c | 17 +++++++++++++++++
 dlls/mshtml/xmlhttprequest.c       | 31 +++++++++++++++++++++++++++++--
 2 files changed, 46 insertions(+), 2 deletions(-)

diff --git a/dlls/mshtml/tests/xmlhttprequest.c b/dlls/mshtml/tests/xmlhttprequest.c
index 5d11ec0..a16dad1 100644
--- a/dlls/mshtml/tests/xmlhttprequest.c
+++ b/dlls/mshtml/tests/xmlhttprequest.c
@@ -524,6 +524,19 @@ static void test_illegal_xml(IXMLDOMDocument *xmldom)
     ok(last == NULL, "last != NULL\n");
 }
 
+#define set_request_header(a,b,c) _set_request_header(__LINE__,a,b,c)
+static void _set_request_header(unsigned line, IHTMLXMLHttpRequest *xhr, const char *header_a, const char *value_a)
+{
+    BSTR header = a2bstr(header_a), value = a2bstr(value_a);
+    HRESULT hres;
+
+    hres = IHTMLXMLHttpRequest_setRequestHeader(xhr, header, value);
+    ok_(__FILE__,line)(hres == S_OK, "setRequestHeader failed: %08x\n", hres);
+
+    SysFreeString(header);
+    SysFreeString(value);
+}
+
 static void test_responseXML(const char *expect_text)
 {
     IDispatch *disp;
@@ -673,6 +686,8 @@ static void test_sync_xhr(IHTMLDocument2 *doc, const char *xml_url, const char *
     ok(hres == S_OK, "get_readyState failed: %08x\n", hres);
     ok(val == 1, "Expect OPENED, got %d\n", val);
 
+    set_request_header(xhr, "x-wine-test", "sync-test");
+
     SET_EXPECT(xmlhttprequest_onreadystatechange_opened);
     SET_EXPECT(xmlhttprequest_onreadystatechange_headers_received);
     SET_EXPECT(xmlhttprequest_onreadystatechange_loading);
@@ -835,6 +850,8 @@ static void test_async_xhr(IHTMLDocument2 *doc, const char *xml_url, const char
     ok(hres == S_OK, "get_readyState failed: %08x\n", hres);
     ok(val == 1, "Expect OPENED, got %d\n", val);
 
+    set_request_header(xhr, "x-wine-test", "async-test");
+
     SET_EXPECT(xmlhttprequest_onreadystatechange_opened);
     SET_EXPECT(xmlhttprequest_onreadystatechange_headers_received);
     SET_EXPECT(xmlhttprequest_onreadystatechange_loading);
diff --git a/dlls/mshtml/xmlhttprequest.c b/dlls/mshtml/xmlhttprequest.c
index ba6dc05..d55570c 100644
--- a/dlls/mshtml/xmlhttprequest.c
+++ b/dlls/mshtml/xmlhttprequest.c
@@ -613,8 +613,35 @@ static HRESULT WINAPI HTMLXMLHttpRequest_getResponseHeader(IHTMLXMLHttpRequest *
 static HRESULT WINAPI HTMLXMLHttpRequest_setRequestHeader(IHTMLXMLHttpRequest *iface, BSTR bstrHeader, BSTR bstrValue)
 {
     HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);
-    FIXME("(%p)->(%s %s)\n", This, debugstr_w(bstrHeader), debugstr_w(bstrValue));
-    return E_NOTIMPL;
+    char *header_u, *value_u;
+    nsACString header, value;
+    nsresult nsres;
+
+    TRACE("(%p)->(%s %s)\n", This, debugstr_w(bstrHeader), debugstr_w(bstrValue));
+
+    header_u = heap_strdupWtoU(bstrHeader);
+    if(bstrHeader && !header_u)
+        return E_OUTOFMEMORY;
+
+    value_u = heap_strdupWtoU(bstrValue);
+    if(bstrValue && !value_u) {
+        heap_free(header_u);
+        return E_OUTOFMEMORY;
+    }
+
+    nsACString_InitDepend(&header, header_u);
+    nsACString_InitDepend(&value, value_u);
+    nsres = nsIXMLHttpRequest_SetRequestHeader(This->nsxhr, &header, &value);
+    nsACString_Finish(&header);
+    nsACString_Finish(&value);
+    heap_free(header_u);
+    heap_free(value_u);
+    if(NS_FAILED(nsres)) {
+        ERR("SetRequestHeader failed: %08x\n", nsres);
+        return E_FAIL;
+    }
+
+    return S_OK;
 }
 
 static const IHTMLXMLHttpRequestVtbl HTMLXMLHttpRequestVtbl = {




More information about the wine-cvs mailing list