From ed888e284b01cf10dc89060b96b32f6eac1b379f Mon Sep 17 00:00:00 2001 From: Tunahan Karlibas Date: Sun, 1 Jun 2025 18:37:46 +0300 Subject: [PATCH] script: Set HTTP status code when aborting an `XMLHttpRequest` (#37190) Correctly set status when aborting a XMLHttpRequest. Testing: WPT test xhr/abort-during-done.window.html --------- Signed-off-by: Tunahan Karlibas --- components/script/dom/xmlhttprequest.rs | 3 +++ tests/wpt/meta/xhr/abort-during-done.window.js.ini | 9 --------- .../meta/xhr/abort-during-headers-received.window.js.ini | 3 --- tests/wpt/meta/xhr/abort-during-loading.window.js.ini | 3 --- 4 files changed, 3 insertions(+), 15 deletions(-) delete mode 100644 tests/wpt/meta/xhr/abort-during-done.window.js.ini delete mode 100644 tests/wpt/meta/xhr/abort-during-headers-received.window.js.ini delete mode 100644 tests/wpt/meta/xhr/abort-during-loading.window.js.ini diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs index 4e7c136f42b..858cd24d45d 100644 --- a/components/script/dom/xmlhttprequest.rs +++ b/components/script/dom/xmlhttprequest.rs @@ -797,6 +797,7 @@ impl XMLHttpRequestMethods for XMLHttpRequest { if self.ready_state.get() == XMLHttpRequestState::Done { self.change_ready_state(XMLHttpRequestState::Unsent, can_gc); self.response_status.set(Err(())); + *self.status.borrow_mut() = HttpStatus::new_error(); self.response.borrow_mut().clear(); self.response_headers.borrow_mut().clear(); } @@ -1188,6 +1189,8 @@ impl XMLHttpRequest { self.discard_subsequent_responses(); self.send_flag.set(false); + *self.status.borrow_mut() = HttpStatus::new_error(); + self.response_headers.borrow_mut().clear(); // XXXManishearth set response to NetworkError self.change_ready_state(XMLHttpRequestState::Done, can_gc); return_if_fetch_was_terminated!(); diff --git a/tests/wpt/meta/xhr/abort-during-done.window.js.ini b/tests/wpt/meta/xhr/abort-during-done.window.js.ini deleted file mode 100644 index cfce26bf75b..00000000000 --- a/tests/wpt/meta/xhr/abort-during-done.window.js.ini +++ /dev/null @@ -1,9 +0,0 @@ -[abort-during-done.window.html] - [XMLHttpRequest: abort() during DONE (sync)] - expected: FAIL - - [XMLHttpRequest: abort() during DONE (sync aborted in readystatechange)] - expected: FAIL - - [XMLHttpRequest: abort() during DONE (async)] - expected: FAIL diff --git a/tests/wpt/meta/xhr/abort-during-headers-received.window.js.ini b/tests/wpt/meta/xhr/abort-during-headers-received.window.js.ini deleted file mode 100644 index aa78b3966cc..00000000000 --- a/tests/wpt/meta/xhr/abort-during-headers-received.window.js.ini +++ /dev/null @@ -1,3 +0,0 @@ -[abort-during-headers-received.window.html] - [XMLHttpRequest: abort() during HEADERS_RECEIVED] - expected: FAIL diff --git a/tests/wpt/meta/xhr/abort-during-loading.window.js.ini b/tests/wpt/meta/xhr/abort-during-loading.window.js.ini deleted file mode 100644 index 33a6772164b..00000000000 --- a/tests/wpt/meta/xhr/abort-during-loading.window.js.ini +++ /dev/null @@ -1,3 +0,0 @@ -[abort-during-loading.window.html] - [XMLHttpRequest: abort() during LOADING] - expected: FAIL