| <!DOCTYPE html> |
| <title>Test Content-Security-Policy frame-ancestors</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/common/utils.js"></script> |
| <script src="/common/dispatcher/dispatcher.js"></script> |
| <script src="resources/utils.js"></script> |
| <script src="/common/get-host-info.sub.js"></script> |
| <body> |
| <script> |
| promise_test(async (t) => { |
| // The fenced frame loads with a frame-ancestors policy set. The only way for |
| // the fenced frame to know that it can't load is if it checks its parent's |
| // policy across the fenced frame boundary. |
| const frame = await attachFencedFrameContext({ |
| headers: [[ |
| 'Content-Security-Policy', |
| 'frame-ancestors {{hosts[alt][www1]}}:{{ports[https][0]}}' |
| ]] |
| }); |
| let timeout_promise = |
| new Promise(resolve => t.step_timeout(() => resolve('timeout'), 1000)); |
| let execute_promise = frame.execute(() => {}); |
| const result = await Promise.race([timeout_promise, execute_promise]); |
| assert_equals(result, 'timeout', 'The fenced frame should not load'); |
| }, 'Fenced frames check beyond fenced boundary for CSP frame-ancestors'); |
| |
| promise_test(async () => { |
| // The Protected Audience fenced frame loads with a frame-ancestors policy |
| // set. It should be allowed to load even though the parent's origin isn't |
| // part of the policy. |
| const frame = await attachFencedFrameContext({ |
| generator_api: 'fledge', |
| headers: [[ |
| 'Content-Security-Policy', |
| 'frame-ancestors {{hosts[alt][www1]}}:{{ports[https][0]}}' |
| ]] |
| }); |
| await frame.execute(() => {}); |
| }, 'Protected Audience fenced frames do not check beyond fenced boundary for ' + |
| 'CSP frame-ancestors'); |
| </script> |
| </body> |