Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

// META: global=window,worker
// META: script=../resources/utils.js
// META: script=/common/utils.js
// META: script=/common/get-host-info.sub.js
const redirectUrl = RESOURCES_DIR + "redirect.h2.py";
const redirectLocation = "top.txt";
async function fetchStreamRedirect(statusCode) {
const url = RESOURCES_DIR + "redirect.h2.py" +
`?redirect_status=${statusCode}&location=${redirectLocation}`;
const requestInit = {method: "POST"};
requestInit["body"] = new ReadableStream({start: controller => {
const encoder = new TextEncoder();
controller.enqueue(encoder.encode("Test"));
controller.close();
}});
requestInit.duplex = "half";
return fetch(url, requestInit);
}
promise_test(async () => {
const resp = await fetchStreamRedirect(303);
assert_equals(resp.status, 200);
assert_true(new URL(resp.url).pathname.endsWith(redirectLocation),
"Response's url should be the redirected one");
}, "Fetch upload streaming should be accepted on 303");
for (const statusCode of [301, 302, 307, 308]) {
promise_test(t => {
return promise_rejects_js(t, TypeError, fetchStreamRedirect(statusCode));
}, `Fetch upload streaming should fail on ${statusCode}`);
}