| // 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); |