Zhenbo Li : mshtml: Add IHTMLXMLHttpRequest::getAllResponseHeaders() method implementation.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Aug 6 10:15:43 CDT 2015
Module: wine
Branch: master
Commit: bb060fe62fee675b16915395c3dfcfad5b1473eb
URL: http://source.winehq.org/git/wine.git/?a=commit;h=bb060fe62fee675b16915395c3dfcfad5b1473eb
Author: Zhenbo Li <litimetal at gmail.com>
Date: Wed Aug 5 09:23:43 2015 +0800
mshtml: Add IHTMLXMLHttpRequest::getAllResponseHeaders() method implementation.
---
dlls/mshtml/tests/xmlhttprequest.c | 45 +++++++++++++++++++++++++++++++++++++-
dlls/mshtml/xmlhttprequest.c | 24 ++++++++++++++++++--
2 files changed, 66 insertions(+), 3 deletions(-)
diff --git a/dlls/mshtml/tests/xmlhttprequest.c b/dlls/mshtml/tests/xmlhttprequest.c
index 3ee54ac..b7ecb49 100644
--- a/dlls/mshtml/tests/xmlhttprequest.c
+++ b/dlls/mshtml/tests/xmlhttprequest.c
@@ -421,8 +421,17 @@ static void create_xmlhttprequest(IHTMLDocument2 *doc)
static void test_header(const struct HEADER_TYPE expect[], int num)
{
int i;
- BSTR key, text;
+ BSTR key, text, all_header;
HRESULT hres;
+ char all[4096], buf[512];
+
+ all_header = NULL;
+ hres = IHTMLXMLHttpRequest_getAllResponseHeaders(xhr, &all_header);
+ ok(hres == S_OK, "getAllResponseHeader failed: %08x\n", hres);
+ ok(all_header != NULL, "all_header == NULL\n");
+
+ WideCharToMultiByte(CP_UTF8, 0, all_header, -1, all, sizeof(all), NULL, NULL);
+ SysFreeString(all_header);
for(i = 0; i < num; ++i) {
text = NULL;
@@ -434,6 +443,11 @@ static void test_header(const struct HEADER_TYPE expect[], int num)
"Expect %s: %s, got %s\n", expect[i].key, expect[i].value, wine_dbgstr_w(text));
SysFreeString(key);
SysFreeString(text);
+
+ strcpy(buf, expect[i].key);
+ strcat(buf, ": ");
+ strcat(buf, expect[i].value);
+ ok(strstr(all, buf) != NULL, "AllResponseHeaders(%s) don't have expected substr(%s)\n", all, buf);
}
}
@@ -495,6 +509,11 @@ static void test_sync_xhr(IHTMLDocument2 *doc, const char *xml_url)
ok(text == NULL, "Expect NULL, got %p\n", text);
text = (BSTR)0xdeadbeef;
+ hres = IHTMLXMLHttpRequest_getAllResponseHeaders(xhr, &text);
+ ok(hres == E_FAIL, "got %08x\n", hres);
+ ok(text == NULL, "text = %p\n", text);
+
+ text = (BSTR)0xdeadbeef;
hres = IHTMLXMLHttpRequest_getResponseHeader(xhr, content_type, &text);
ok(hres == E_FAIL, "got %08x\n", hres);
ok(text == NULL, "text = %p\n", text);
@@ -520,6 +539,11 @@ static void test_sync_xhr(IHTMLDocument2 *doc, const char *xml_url)
}
text = (BSTR)0xdeadbeef;
+ hres = IHTMLXMLHttpRequest_getAllResponseHeaders(xhr, &text);
+ ok(hres == E_FAIL, "got %08x\n", hres);
+ ok(text == NULL, "text = %p\n", text);
+
+ text = (BSTR)0xdeadbeef;
hres = IHTMLXMLHttpRequest_getResponseHeader(xhr, content_type, &text);
ok(hres == E_FAIL, "got %08x\n", hres);
ok(text == NULL, "text = %p\n", text);
@@ -627,6 +651,14 @@ static void test_async_xhr(IHTMLDocument2 *doc, const char *xml_url)
ok(hres == E_FAIL, "got %08x\n", hres);
ok(text == NULL, "text = %p\n", text);
+ hres = IHTMLXMLHttpRequest_getAllResponseHeaders(xhr, NULL);
+ ok(hres == E_POINTER, "Expect E_POINTER, got %08x\n", hres);
+
+ text = (BSTR)0xdeadbeef;
+ hres = IHTMLXMLHttpRequest_getAllResponseHeaders(xhr, &text);
+ ok(hres == E_FAIL, "got %08x\n", hres);
+ ok(text == NULL, "text = %p\n", text);
+
val = 0xdeadbeef;
hres = IHTMLXMLHttpRequest_get_status(xhr, &val);
ok(hres == E_FAIL, "Expect E_FAIL, got: %08x\n", hres);
@@ -663,6 +695,11 @@ static void test_async_xhr(IHTMLDocument2 *doc, const char *xml_url)
}
text = (BSTR)0xdeadbeef;
+ hres = IHTMLXMLHttpRequest_getAllResponseHeaders(xhr, &text);
+ ok(hres == E_FAIL, "got %08x\n", hres);
+ ok(text == NULL, "text = %p\n", text);
+
+ text = (BSTR)0xdeadbeef;
hres = IHTMLXMLHttpRequest_getResponseHeader(xhr, content_type, &text);
ok(hres == E_FAIL, "got %08x\n", hres);
ok(text == NULL, "text = %p\n", text);
@@ -702,6 +739,12 @@ static void test_async_xhr(IHTMLDocument2 *doc, const char *xml_url)
}
text = NULL;
+ hres = IHTMLXMLHttpRequest_getAllResponseHeaders(xhr, &text);
+ ok(hres == S_OK, "getAllResponseHeader failed, got %08x\n", hres);
+ ok(text != NULL, "text == NULL\n");
+ SysFreeString(text);
+
+ text = NULL;
hres = IHTMLXMLHttpRequest_getResponseHeader(xhr, content_type, &text);
ok(hres == S_OK, "getResponseHeader failed, got %08x\n", hres);
ok(text != NULL, "text == NULL\n");
diff --git a/dlls/mshtml/xmlhttprequest.c b/dlls/mshtml/xmlhttprequest.c
index 0321944..ea420c3 100644
--- a/dlls/mshtml/xmlhttprequest.c
+++ b/dlls/mshtml/xmlhttprequest.c
@@ -505,8 +505,28 @@ static HRESULT WINAPI HTMLXMLHttpRequest_send(IHTMLXMLHttpRequest *iface, VARIAN
static HRESULT WINAPI HTMLXMLHttpRequest_getAllResponseHeaders(IHTMLXMLHttpRequest *iface, BSTR *p)
{
HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);
- FIXME("(%p)->(%p)\n", This, p);
- return E_NOTIMPL;
+ nsACString nscstr;
+ nsresult nsres;
+ HRESULT hres;
+ LONG state;
+
+ TRACE("(%p)->(%p)\n", This, p);
+
+ if(!p)
+ return E_POINTER;
+
+ hres = IHTMLXMLHttpRequest_get_readyState(iface, &state);
+ if(FAILED(hres))
+ return hres;
+
+ if(state < 2) {
+ *p = NULL;
+ return E_FAIL;
+ }
+
+ nsACString_Init(&nscstr, NULL);
+ nsres = nsIXMLHttpRequest_GetAllResponseHeaders(This->nsxhr, &nscstr);
+ return return_nscstr(nsres, &nscstr, p);
}
static HRESULT WINAPI HTMLXMLHttpRequest_getResponseHeader(IHTMLXMLHttpRequest *iface, BSTR bstrHeader, BSTR *p)
More information about the wine-cvs
mailing list