// META: timeout=long // META: script=/common/get-host-info.sub.js // META: script=/common/utils.js // META: script=beacon-common.sub.js 'use strict'; const {ORIGIN} = get_host_info(); // Execute each sample test per redirect status code. // Note that status codes 307 and 308 are the only codes that will maintain POST // data through a redirect. for (const status of [307, 308]) { for (const type of [STRING, ARRAYBUFFER, FORM, BLOB]) { parallelPromiseTest(async (t) => { const iframe = document.createElement('iframe'); document.body.appendChild(iframe); t.add_cleanup(() => iframe.remove()); const payload = makePayload(SMALL, type); const id = token(); const destination = `${ORIGIN}/beacon/resources/beacon.py?cmd=store&id=${id}`; const url = `${ORIGIN}/common/redirect.py` + `?status=${status}&location=${encodeURIComponent(destination)}`; assert_true(iframe.contentWindow.navigator.sendBeacon(url, payload)); iframe.remove(); await waitForResult(id); }, `cross-origin, CORS-safelisted: status = ${status}, type = ${type}`); } }; done();