| <!doctype html> |
| <html> |
| <head> |
| <meta charset="utf-8"> |
| <title>Response Receives Propagated Error from ReadableStream</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| </head> |
| <body> |
| <script> |
| function CustomTestError() { |
| const error = Error(); |
| error.name = 'custom-test-error'; |
| return error; |
| } |
| |
| function newStreamWithStartError() { |
| return new ReadableStream({ |
| start(controller) { |
| controller.error(CustomTestError()); |
| } |
| }) |
| } |
| |
| function newStreamWithPullError() { |
| return new ReadableStream({ |
| pull(controller) { |
| controller.error(CustomTestError()); |
| } |
| }) |
| } |
| |
| function runRequestPromiseTest(stream, responseReaderMethod, testDescription) { |
| promise_test(test => { |
| return promise_rejects( |
| test, |
| CustomTestError(), |
| new Response(stream)[responseReaderMethod](), |
| 'CustomTestError should propagate' |
| ) |
| }, testDescription) |
| } |
| |
| |
| promise_test(test => { |
| return promise_rejects(test, CustomTestError(), newStreamWithStartError().getReader().read(), 'CustomTestError should propagate') |
| }, "ReadableStreamDefaultReader Promise receives ReadableStream start() Error") |
| |
| promise_test(test => { |
| return promise_rejects(test, CustomTestError(), newStreamWithPullError().getReader().read(), 'CustomTestError should propagate') |
| }, "ReadableStreamDefaultReader Promise receives ReadableStream pull() Error") |
| |
| |
| // test start() errors for all Body reader methods |
| runRequestPromiseTest(newStreamWithStartError(), 'arrayBuffer', 'ReadableStream start() Error propagates to Response.arrayBuffer() Promise'); |
| runRequestPromiseTest(newStreamWithStartError(), 'blob', 'ReadableStream start() Error propagates to Response.blob() Promise'); |
| runRequestPromiseTest(newStreamWithStartError(), 'formData', 'ReadableStream start() Error propagates to Response.formData() Promise'); |
| runRequestPromiseTest(newStreamWithStartError(), 'json', 'ReadableStream start() Error propagates to Response.json() Promise'); |
| runRequestPromiseTest(newStreamWithStartError(), 'text', 'ReadableStream start() Error propagates to Response.text() Promise'); |
| |
| // test pull() errors for all Body reader methods |
| runRequestPromiseTest(newStreamWithPullError(), 'arrayBuffer', 'ReadableStream pull() Error propagates to Response.arrayBuffer() Promise'); |
| runRequestPromiseTest(newStreamWithPullError(), 'blob', 'ReadableStream pull() Error propagates to Response.blob() Promise'); |
| runRequestPromiseTest(newStreamWithPullError(), 'formData', 'ReadableStream pull() Error propagates to Response.formData() Promise'); |
| runRequestPromiseTest(newStreamWithPullError(), 'json', 'ReadableStream pull() Error propagates to Response.json() Promise'); |
| runRequestPromiseTest(newStreamWithPullError(), 'text', 'ReadableStream pull() Error propagates to Response.text() Promise'); |
| </script> |
| </body> |
| </html> |