async function(cross) {
const results = {};
const local = URL.createObjectURL(new Blob(['local']));
for (const opaque of [false, true]) {
const kind = opaque ? 'opaque' : 'inherited';
const cases = [
{name: 'relative', url: './forbidden-' + kind, mode: 'same-origin'},
{name: 'home', url: location.origin + (opaque ? '/forbidden-opaque-home' : '/allowed-home'), mode: 'same-origin'},
{name: 'redirect', url: location.origin + '/redirect-allowed?to=' + encodeURIComponent(cross + '/forbidden-redirect-' + kind), mode: 'same-origin'},
{name: 'blob', url: local, mode: 'same-origin'},
{name: 'data', url: 'data:text/plain,data', mode: 'same-origin'},
{name: 'cors', url: './cors-' + kind, mode: 'cors'},
{name: 'preflight', url: './preflight-' + kind, mode: 'cors', method: 'PUT', headers: {'X-Probe': 'yes'}}
];
const frame = document.createElement('iframe');
if (opaque) frame.setAttribute('sandbox', 'allow-scripts');
const terminal = new Promise(resolve => {
const handler = event => {
if (event.source !== frame.contentWindow || event.data.kind !== kind) return;
removeEventListener('message', handler);
resolve(event.data.results);
};
addEventListener('message', handler);
});
frame.srcdoc = `