Skip to content

Commit 99555d8

Browse files
authored
fix(xmlhttprequest): replace to req.destroy from req.abort (#100)
1 parent 7ed320a commit 99555d8

File tree

2 files changed

+33
-11
lines changed

2 files changed

+33
-11
lines changed

src/xmlhttprequest.ts

+14-11
Original file line numberDiff line numberDiff line change
@@ -200,11 +200,22 @@ export default class XMLHttpRequest extends XMLHttpRequestEventTarget {
200200
*/
201201
abort(): void {
202202
if (
203-
this.readyState === XMLHttpRequest.HEADERS_RECEIVED ||
204-
this.readyState === XMLHttpRequest.LOADING
203+
this.readyState === XMLHttpRequest.UNSENT ||
204+
this.readyState === XMLHttpRequest.OPENED ||
205+
this.readyState === XMLHttpRequest.DONE ||
206+
!this.#client
205207
) {
206-
this.#client?.abort();
208+
return;
207209
}
210+
211+
this.#client.destroy();
212+
213+
this.#readyState = XMLHttpRequest.UNSENT;
214+
215+
this.dispatchEvent(new ProgressEvent('abort'));
216+
this.upload.dispatchEvent(new ProgressEvent('abort'));
217+
218+
this.#client = null;
208219
}
209220

210221
/**
@@ -314,14 +325,6 @@ export default class XMLHttpRequest extends XMLHttpRequestEventTarget {
314325
protocol
315326
});
316327

317-
this.#client.addListener('abort', () => {
318-
this.dispatchEvent(new ProgressEvent('abort'));
319-
this.upload.dispatchEvent(new ProgressEvent('abort'));
320-
321-
this.#client = null;
322-
this.#readyState = XMLHttpRequest.UNSENT;
323-
});
324-
325328
this.#client.addListener('error', () => {
326329
this.dispatchEvent(new ProgressEvent('error'));
327330
this.upload.dispatchEvent(new ProgressEvent('error'));

test/integration/xmlhttprequest.ts

+19
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,25 @@ describe('XMLHttpRequest', () => {
6565
baseURL = null;
6666
});
6767

68+
describe('abort()', () => {
69+
it('basic use case', (done) => {
70+
const client = new XMLHttpRequest();
71+
72+
client.addEventListener('abort', (event) => {
73+
expect(event.type).toBe('abort');
74+
expect(client.readyState).toBe(XMLHttpRequest.UNSENT);
75+
76+
done();
77+
});
78+
client.addEventListener('loadstart', () => {
79+
client.abort();
80+
});
81+
82+
client.open('GET', `${baseURL}/?body=abort`);
83+
client.send();
84+
});
85+
});
86+
6887
describe("addEventListener(event: 'error')", () => {
6988
it('basic use case', (done) => {
7089
const client = new XMLHttpRequest();

0 commit comments

Comments
 (0)