Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

  • This WPT test may be referenced by the following Test IDs:
<!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>