// META: script=/common/get-host-info.sub.js
// META: script=/common/utils.js
// META: script=/common/dispatcher/dispatcher.js
// META: script=./credentialless/resources/common.js
// META: script=./resources/common.js
const cors_coep_headers = coep_require_corp + corp_cross_origin;
const same_origin = get_host_info().HTTPS_ORIGIN;
const cross_origin = get_host_info().HTTPS_REMOTE_ORIGIN;
const newIframe = async (
test,
parent_origin,
parent_headers,
child_origin,
child_headers
) => {
const [future_child, future_error] =
await createIsolatedFrame(parent_origin, parent_headers);
future_error.then(test.unreached_func('cannot create isolated iframe.'));
const child = await future_child;
add_completion_callback(() => child.remove());
const grand_child_token = token();
const grand_child = child.contentDocument.createElement('iframe');
grand_child.src = child_origin + executor_path + child_headers +
`&uuid=${grand_child_token}`;
child.contentDocument.body.appendChild(grand_child);
add_completion_callback(() => grand_child.remove());
return grand_child_token;
};
const childFrameIsCrossOriginIsolated = async (
test,
child_origin,
parent_permission_coi
) => {
let parent_headers = cors_coep_headers;
const child_headers = cors_coep_headers;
if (parent_permission_coi !== undefined) {
// Escape right parenthesis in WPT pipe:
parent_permission_coi = parent_permission_coi.replace(')', '\\)');
parent_headers += `|header(permissions-policy,` +
`cross-origin-isolated=${parent_permission_coi})`;
}
const parent_origin = same_origin;
const iframe = await newIframe(
test,
parent_origin,
parent_headers,
child_origin,
child_headers);
return IsCrossOriginIsolated(iframe);
}
const generate_iframe_test = async (origin, isolation, expect_coi) => {
promise_test_parallel(async (test) => {
const isCrossOriginIsolated =
await childFrameIsCrossOriginIsolated(test, origin, isolation);
assert_equals(isCrossOriginIsolated, expect_coi)
}, `iframe (origin: ${origin}) cross origin isolated (${isolation}) ` +
`permission test`);
}
generate_iframe_test(same_origin, undefined, true);
generate_iframe_test(same_origin, '*', true);
generate_iframe_test(same_origin, 'self', true);
generate_iframe_test(same_origin, '()', false);
generate_iframe_test(cross_origin, undefined, false);
generate_iframe_test(cross_origin, '*', false);
generate_iframe_test(cross_origin, 'self', false);
generate_iframe_test(cross_origin, '()', false);