Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

// META: global=window,worker
// META: script=../resources/utils.js
// META: script=/common/utils.js
// META: timeout=long
/**
* Fetches a target that returns response with HTTP status code `statusCode` to
* redirect `maxCount` times.
*/
function redirectCountTest(maxCount, {statusCode, shouldPass = true} = {}) {
const desc = `Redirect ${statusCode} ${maxCount} times`;
const fromUrl = `${RESOURCES_DIR}redirect.py`;
const toUrl = fromUrl;
const token1 = token();
const url = `${fromUrl}?token=${token1}` +
`&max_age=0` +
`&redirect_status=${statusCode}` +
`&max_count=${maxCount}` +
`&location=${encodeURIComponent(toUrl)}`;
const requestInit = {'redirect': 'follow'};
promise_test((test) => {
return fetch(`${RESOURCES_DIR}clean-stash.py?token=${token1}`)
.then((resp) => {
assert_equals(
resp.status, 200, 'Clean stash response\'s status is 200');
if (!shouldPass)
return promise_rejects_js(test, TypeError, fetch(url, requestInit));
return fetch(url, requestInit)
.then((resp) => {
assert_equals(resp.status, 200, 'Response\'s status is 200');
return resp.text();
})
.then((body) => {
assert_equals(
body, maxCount.toString(), `Redirected ${maxCount} times`);
});
});
}, desc);
}
for (const statusCode of [301, 302, 303, 307, 308]) {
redirectCountTest(20, {statusCode});
redirectCountTest(21, {statusCode, shouldPass: false});
}
done();