[PATCH 2/8] mshtml: Implement onabort for XMLHttpRequest.
Gabriel Ivăncescu
gabrielopcode at gmail.com
Mon Jun 6 07:24:10 CDT 2022
Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
dlls/mshtml/tests/script.c | 2 ++
dlls/mshtml/tests/xhr.js | 20 ++++++++++++++++++++
dlls/mshtml/xmlhttprequest.c | 9 +++++----
3 files changed, 27 insertions(+), 4 deletions(-)
diff --git a/dlls/mshtml/tests/script.c b/dlls/mshtml/tests/script.c
index 401e130..e368824 100644
--- a/dlls/mshtml/tests/script.c
+++ b/dlls/mshtml/tests/script.c
@@ -3079,6 +3079,8 @@ static void report_data(ProtocolHandler *This)
hres = IServiceProvider_QueryService(service_provider, &IID_IHttpNegotiate, &IID_IHttpNegotiate, (void**)&http_negotiate);
IServiceProvider_Release(service_provider);
+ if(This->delay && hres == E_FAIL) /* aborted too quickly */
+ return;
ok(hres == S_OK, "Could not get IHttpNegotiate interface: %08lx\n", hres);
hres = IUri_GetDisplayUri(This->uri, &url);
diff --git a/dlls/mshtml/tests/xhr.js b/dlls/mshtml/tests/xhr.js
index 6228f73..dd86331 100644
--- a/dlls/mshtml/tests/xhr.js
+++ b/dlls/mshtml/tests/xhr.js
@@ -41,6 +41,25 @@ function test_xhr() {
xhr.send("Testing...");
}
+function test_abort() {
+ var xhr = new XMLHttpRequest();
+ if(!("onabort" in xhr)) { next_test(); return; }
+
+ xhr.onreadystatechange = function() {
+ if(xhr.readyState != 4)
+ return;
+ todo_wine_if(v < 10).
+ ok(v >= 10, "onreadystatechange called");
+ }
+ xhr.onload = function() { ok(false, "onload called"); }
+ xhr.onabort = function(e) { next_test(); }
+
+ xhr.open("POST", "echo.php?delay", true);
+ xhr.setRequestHeader("X-Test", "True");
+ xhr.send("Abort Test");
+ xhr.abort();
+}
+
function test_timeout() {
var xhr = new XMLHttpRequest();
var v = document.documentMode;
@@ -74,5 +93,6 @@ function test_timeout() {
var tests = [
test_xhr,
+ test_abort,
test_timeout
];
diff --git a/dlls/mshtml/xmlhttprequest.c b/dlls/mshtml/xmlhttprequest.c
index 12356f1..54e84cf 100644
--- a/dlls/mshtml/xmlhttprequest.c
+++ b/dlls/mshtml/xmlhttprequest.c
@@ -97,6 +97,7 @@ static HRESULT return_nscstr(nsresult nsres, nsACString *nscstr, BSTR *p)
static const eventid_t events[] = {
EVENTID_READYSTATECHANGE,
EVENTID_LOAD,
+ EVENTID_ABORT,
EVENTID_ERROR,
EVENTID_TIMEOUT,
};
@@ -982,18 +983,18 @@ static HRESULT WINAPI HTMLXMLHttpRequest_private_put_onabort(IWineXMLHttpRequest
{
HTMLXMLHttpRequest *This = impl_from_IWineXMLHttpRequestPrivate(iface);
- FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
+ TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
- return E_NOTIMPL;
+ return set_event_handler(&This->event_target, EVENTID_ABORT, &v);
}
static HRESULT WINAPI HTMLXMLHttpRequest_private_get_onabort(IWineXMLHttpRequestPrivate *iface, VARIANT *p)
{
HTMLXMLHttpRequest *This = impl_from_IWineXMLHttpRequestPrivate(iface);
- FIXME("(%p)->(%p)\n", This, p);
+ TRACE("(%p)->(%p)\n", This, p);
- return E_NOTIMPL;
+ return get_event_handler(&This->event_target, EVENTID_ABORT, p);
}
static HRESULT WINAPI HTMLXMLHttpRequest_private_put_onprogress(IWineXMLHttpRequestPrivate *iface, VARIANT v)
--
2.34.1
More information about the wine-devel
mailing list