[PATCH v2 4/5] mshtml: Implement overrideMimeType for XMLHttpRequest.
Gabriel Ivăncescu
gabrielopcode at gmail.com
Wed Jun 8 13:01:10 CDT 2022
We have to special case empty string since Gecko special cases them, but
IE does not.
Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
dlls/mshtml/tests/xhr.js | 16 ++++++++++++++--
dlls/mshtml/xmlhttprequest.c | 23 +++++++++++++++++++++--
2 files changed, 35 insertions(+), 4 deletions(-)
diff --git a/dlls/mshtml/tests/xhr.js b/dlls/mshtml/tests/xhr.js
index 303c4ad..8d9af26 100644
--- a/dlls/mshtml/tests/xhr.js
+++ b/dlls/mshtml/tests/xhr.js
@@ -71,7 +71,7 @@ function test_xhr() {
}
function test_content_types() {
- var xhr = new XMLHttpRequest(), types, i = 0;
+ var xhr = new XMLHttpRequest(), types, i = 0, override = false;
var v = document.documentMode;
var types = [
@@ -95,7 +95,19 @@ function test_content_types() {
if(v < 10 || types === xml_types)
ok(xhr.responseXML !== null, "unexpected null responseXML for " + types[i]);
else
- ok(xhr.responseXML === null, "unexpected non-null responseXML for " + types[i]);
+ ok(xhr.responseXML === null, "unexpected non-null responseXML for " + (override ? "overriden " : "") + types[i]);
+
+ if(("overrideMimeType" in xhr) && !override) {
+ override = true;
+ xhr = new XMLHttpRequest();
+ xhr.onload = onload;
+ xhr.open("POST", "echo.php", true);
+ xhr.setRequestHeader("X-Test", "True");
+ xhr.overrideMimeType(types[i]);
+ xhr.send(xml);
+ return;
+ }
+ override = false;
if(++i >= types.length) {
if(types === xml_types) {
diff --git a/dlls/mshtml/xmlhttprequest.c b/dlls/mshtml/xmlhttprequest.c
index c165218..f21114a 100644
--- a/dlls/mshtml/xmlhttprequest.c
+++ b/dlls/mshtml/xmlhttprequest.c
@@ -978,10 +978,29 @@ static HRESULT WINAPI HTMLXMLHttpRequest_private_get_withCredentials(IWineXMLHtt
static HRESULT WINAPI HTMLXMLHttpRequest_private_overrideMimeType(IWineXMLHttpRequestPrivate *iface, BSTR mimeType)
{
HTMLXMLHttpRequest *This = impl_from_IWineXMLHttpRequestPrivate(iface);
+ static const WCHAR generic_type[] = L"application/octet-stream";
+ const WCHAR *type = NULL;
+ WCHAR *lowercase = NULL;
+ nsAString nsstr;
+ nsresult nsres;
- FIXME("(%p)->(%s)\n", This, debugstr_w(mimeType));
+ TRACE("(%p)->(%s)\n", This, debugstr_w(mimeType));
- return E_NOTIMPL;
+ if(mimeType) {
+ if(mimeType[0]) {
+ if(!(lowercase = heap_strdupW(mimeType)))
+ return E_OUTOFMEMORY;
+ _wcslwr(lowercase);
+ type = lowercase;
+ }else
+ type = generic_type;
+ }
+
+ nsAString_InitDepend(&nsstr, type);
+ nsres = nsIXMLHttpRequest_SlowOverrideMimeType(This->nsxhr, &nsstr);
+ nsAString_Finish(&nsstr);
+ heap_free(lowercase);
+ return map_nsresult(nsres);
}
static HRESULT WINAPI HTMLXMLHttpRequest_private_put_onerror(IWineXMLHttpRequestPrivate *iface, VARIANT v)
--
2.34.1
More information about the wine-devel
mailing list