blob: 477bc6c948f29cc18dc987e828eb5799b4a946ab [file] [log] [blame]
const SAME_ORIGIN = {origin: get_host_info().HTTPS_ORIGIN, name: "SAME_ORIGIN"};
const SAME_SITE = {origin: get_host_info().HTTPS_REMOTE_ORIGIN, name: "SAME_SITE"};
const CROSS_ORIGIN = {origin: get_host_info().HTTPS_NOTSAMESITE_ORIGIN, name: "CROSS_ORIGIN"}
function url_test(t, url, channelName, hasOpener, openerDOMAccess) {
const bc = new BroadcastChannel(channelName);
bc.onmessage = t.step_func_done(event => {
const payload = event.data;
assert_equals(payload.name, hasOpener ? channelName : "", 'name');
assert_equals(payload.opener, hasOpener, 'opener');
// TODO(zcorpan): add openerDOMAccess expectations to all tests
if (openerDOMAccess !== undefined) {
assert_equals(payload.openerDOMAccess, openerDOMAccess, 'openerDOMAccess');
}
});
const w = window.open(url, channelName);
// w will be closed by its postback iframe. When out of process,
// window.close() does not work.
t.add_cleanup(() => w.close());
}
function coop_coep_test(t, host, coop, coep, channelName, hasOpener, openerDOMAccess) {
url_test(t, `${host.origin}/html/cross-origin-opener-policy/resources/coop-coep.py?coop=${encodeURIComponent(coop)}&coep=${coep}&channel=${channelName}`, channelName, hasOpener, openerDOMAccess);
}
function coop_test(t, host, coop, channelName, hasOpener) {
coop_coep_test(t, host, coop, "", channelName, hasOpener);
}
function run_coop_tests(documentCOOPValueTitle, testArray) {
for (const test of testArray) {
async_test(t => {
coop_test(t, test[0], test[1],
`${documentCOOPValueTitle}_to_${test[0].name}_${test[1].replace(/ /g,"-")}`,
test[2]);
}, `${documentCOOPValueTitle} document opening popup to ${test[0].origin} with COOP: "${test[1]}"`);
}
}