WPT
wpt / fetch / api / abort / general.any.sharedworker.html
Spec: Fetch ↗
Runs: Chrome 155.0.8038.0 (wpt@05fffeacb, 2026-09-02) | Firefox 157.0a1 (wpt@7addae031, 2026-09-02) | Safari 251 preview (wpt@5ce815a83, 2026-08-27) | Ladybird 1.0-410b4 (wpt@ce41a9c47, 2026-09-02) | Servo Servo 0.6 (wpt@09159dcb3, 2026-09-02) | Blitz 188486089 (wpt@a95401e4e, 2026-09-02)
View on the Blitz WPT dashboard | Open test on wpt.live | wpt.fyi
| Chrome | Firefox | Safari | Ladybird | Servo | Blitz | |
|---|---|---|---|---|---|---|
| Total | 60/61 | 48/61 | 51/61 | 35/61 | 61/61 | NOT RUN |
| Subtest | Chrome | Firefox | Safari | Ladybird | Servo | Blitz |
|---|---|---|---|---|---|---|
| Aborting rejects with AbortError | PASS | PASS | PASS | PASS | PASS | — |
| Aborting rejects with abort reason | PASS | PASS | PASS | PASS | PASS | — |
| Aborting rejects with abort reason when aborted after fetch() called | PASS | FAIL | FAIL | PASS | PASS | — |
| Aborting rejects with AbortError - no-cors | PASS | PASS | PASS | PASS | PASS | — |
| TypeError from request constructor takes priority - RequestInit's window is not null | PASS | PASS | PASS | PASS | PASS | — |
| TypeError from request constructor takes priority - Input URL is not valid | PASS | PASS | PASS | PASS | PASS | — |
| TypeError from request constructor takes priority - Input URL has credentials | PASS | PASS | PASS | PASS | PASS | — |
| TypeError from request constructor takes priority - RequestInit's mode is navigate | PASS | PASS | PASS | PASS | PASS | — |
| TypeError from request constructor takes priority - RequestInit's referrer is invalid | PASS | PASS | PASS | PASS | PASS | — |
| TypeError from request constructor takes priority - RequestInit's method is invalid | PASS | PASS | PASS | PASS | PASS | — |
| TypeError from request constructor takes priority - RequestInit's method is forbidden | PASS | PASS | PASS | PASS | PASS | — |
| TypeError from request constructor takes priority - RequestInit's mode is no-cors and method is not simple | PASS | PASS | PASS | PASS | PASS | — |
| TypeError from request constructor takes priority - RequestInit's cache mode is only-if-cached and mode is not same-origin | PASS | PASS | PASS | PASS | PASS | — |
| TypeError from request constructor takes priority - Request with cache mode: only-if-cached and fetch mode cors | PASS | PASS | PASS | PASS | PASS | — |
| TypeError from request constructor takes priority - Request with cache mode: only-if-cached and fetch mode no-cors | PASS | PASS | PASS | PASS | PASS | — |
| TypeError from request constructor takes priority - Bad referrerPolicy init parameter value | PASS | PASS | PASS | PASS | PASS | — |
| TypeError from request constructor takes priority - Bad mode init parameter value | PASS | PASS | PASS | PASS | PASS | — |
| TypeError from request constructor takes priority - Bad credentials init parameter value | PASS | PASS | PASS | PASS | PASS | — |
| TypeError from request constructor takes priority - Bad cache init parameter value | PASS | PASS | PASS | PASS | PASS | — |
| TypeError from request constructor takes priority - Bad redirect init parameter value | PASS | PASS | PASS | PASS | PASS | — |
| Request objects have a signal property | PASS | PASS | PASS | PASS | PASS | — |
| Signal on request object | PASS | PASS | PASS | PASS | PASS | — |
| Signal on request object should also have abort reason | PASS | PASS | PASS | PASS | PASS | — |
| Signal on request object created from request object | PASS | PASS | PASS | PASS | PASS | — |
| Signal on request object created from request object, with signal on second request | PASS | PASS | PASS | PASS | PASS | — |
| Signal on request object created from request object, with signal on second request overriding another | PASS | PASS | PASS | PASS | PASS | — |
| Signal retained after unrelated properties are overridden by fetch | PASS | PASS | PASS | PASS | PASS | — |
| Signal removed by setting to null | PASS | PASS | PASS | PASS | PASS | — |
| Already aborted signal rejects immediately | PASS | PASS | PASS | PASS | PASS | — |
| Request is still 'used' if signal is aborted before fetching | PASS | PASS | PASS | PASS | PASS | — |
| response.arrayBuffer() rejects if already aborted | PASS | PASS | PASS | FAIL | PASS | — |
| response.arrayBuffer() rejects with abort reason if already aborted | PASS | PASS | FAIL | FAIL | PASS | — |
| response.blob() rejects if already aborted | PASS | PASS | PASS | FAIL | PASS | — |
| response.blob() rejects with abort reason if already aborted | PASS | PASS | FAIL | FAIL | PASS | — |
| response.bytes() rejects if already aborted | PASS | PASS | PASS | FAIL | PASS | — |
| response.bytes() rejects with abort reason if already aborted | PASS | PASS | FAIL | FAIL | PASS | — |
| response.formData() rejects if already aborted | PASS | PASS | PASS | FAIL | PASS | — |
| response.formData() rejects with abort reason if already aborted | PASS | PASS | FAIL | FAIL | PASS | — |
| response.json() rejects if already aborted | PASS | PASS | PASS | FAIL | PASS | — |
| response.json() rejects with abort reason if already aborted | PASS | PASS | FAIL | FAIL | PASS | — |
| response.text() rejects if already aborted | PASS | PASS | PASS | FAIL | PASS | — |
| response.text() rejects with abort reason if already aborted | PASS | PASS | FAIL | FAIL | PASS | — |
| Call text() twice on aborted response | PASS | PASS | PASS | FAIL | PASS | — |
| Already aborted signal does not make request | PASS | PASS | PASS | PASS | PASS | — |
| Already aborted signal can be used for many fetches | PASS | PASS | PASS | PASS | PASS | — |
| Signal can be used to abort other fetches, even if another fetch succeeded before aborting | PASS | PASS | PASS | PASS | PASS | — |
| Underlying connection is closed when aborting after receiving response | PASS | PASS | PASS | FAIL | PASS | — |
| Underlying connection is closed when aborting after receiving response - no-cors | PASS | TIMEOUT | PASS | FAIL | PASS | — |
| Fetch aborted & connection closed when aborted after calling response.arrayBuffer() | PASS | NOTRUN | PASS | TIMEOUT | PASS | — |
| Fetch aborted & connection closed when aborted after calling response.blob() | PASS | NOTRUN | PASS | NOTRUN | PASS | — |
| Fetch aborted & connection closed when aborted after calling response.bytes() | PASS | NOTRUN | PASS | NOTRUN | PASS | — |
| Fetch aborted & connection closed when aborted after calling response.formData() | PASS | NOTRUN | PASS | NOTRUN | PASS | — |
| Fetch aborted & connection closed when aborted after calling response.json() | PASS | NOTRUN | PASS | NOTRUN | PASS | — |
| Fetch aborted & connection closed when aborted after calling response.text() | PASS | NOTRUN | PASS | NOTRUN | PASS | — |
| Stream errors once aborted. Underlying connection closed. | PASS | NOTRUN | PASS | NOTRUN | PASS | — |
| Stream errors once aborted with abort reason. Underlying connection closed. | PASS | NOTRUN | FAIL | NOTRUN | PASS | — |
| Stream errors once aborted, after reading. Underlying connection closed. | PASS | NOTRUN | PASS | NOTRUN | PASS | — |
| Stream will not error if body is empty. It's closed with an empty queue before it errors. | PASS | NOTRUN | PASS | NOTRUN | PASS | — |
| Readable stream synchronously cancels with AbortError if aborted before reading | FAIL | NOTRUN | FAIL | NOTRUN | PASS | — |
| Signal state is cloned | PASS | PASS | PASS | PASS | PASS | — |
| Clone aborts with original controller | PASS | PASS | FAIL | PASS | PASS | — |