| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| <title>respondWith with response body having invalid chunks</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="resources/test-helpers.sub.js"></script> |
| <script> |
| 'use strict'; |
| |
| const WORKER = |
| 'resources/fetch-event-respond-with-response-body-with-invalid-chunk-worker.js'; |
| const SCOPE = |
| 'resources/fetch-event-respond-with-response-body-with-invalid-chunk-iframe.html'; |
| |
| // Called by the iframe when it has the reader promise we should watch. |
| var set_reader_promise; |
| let reader_promise = new Promise(resolve => set_reader_promise = resolve); |
| |
| var set_fetch_promise; |
| let fetch_promise = new Promise(resolve => set_fetch_promise = resolve); |
| |
| // This test creates an controlled iframe that makes a fetch request. The |
| // service worker returns a response with a body stream containing an invalid |
| // chunk. |
| promise_test(async t => { |
| // Start off the process. |
| let errorConstructor; |
| await service_worker_unregister_and_register(t, WORKER, SCOPE) |
| .then(reg => { |
| add_completion_callback(() => reg.unregister()); |
| return wait_for_state(t, reg.installing, 'activated'); |
| }) |
| .then(() => with_iframe(SCOPE)) |
| .then(frame => { |
| t.add_cleanup(() => frame.remove()) |
| errorConstructor = frame.contentWindow.TypeError; |
| }); |
| |
| await promise_rejects_js(t, errorConstructor, reader_promise, |
| "read() should be rejected"); |
| // Fetch should complete properly, because the reader error is caught in |
| // the subframe. That is, there should be no errors _other_ than the |
| // reader! |
| return fetch_promise; |
| }, 'Response with a ReadableStream having non-Uint8Array chunks should be transferred as errored'); |
| </script> |