| <!DOCTYPE html> | |
| <title>Test window.fence availability in iframes.</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> | |
| <body> | |
| <script> | |
| promise_test(async(t) => { | |
| const frame = await attachIFrameContext(); | |
| await frame.execute(() => { | |
| assert_equals(window.fence, null); | |
| }); | |
| }, 'window.fence is unavailable in normal (non-urn) iframes'); | |
| promise_test(async(t) => { | |
| // window.fence works in urn iframes. | |
| var frame = await attachIFrameContext({generator_api: 'fledge'}); | |
| await frame.execute(() => { | |
| assert_not_equals(window.fence, null); | |
| }); | |
| // window.fence works after navigating to a new urn. | |
| frame = await replaceFrameContext(frame, {generator_api: 'fledge'}); | |
| await frame.execute(() => { | |
| assert_not_equals(window.fence, null); | |
| }); | |
| // window.fence still works after embedder-initiated navigations to non-urns, | |
| // because the concept of "embedder-initiated" navigations is nebulous in | |
| // iframes. | |
| frame = await replaceFrameContext(frame); | |
| await frame.execute(() => { | |
| assert_not_equals(window.fence, null); | |
| }); | |
| }, 'window.fence is available in urn iframes'); | |
| promise_test(async(t) => { | |
| // window.fence works in urn iframes. | |
| const frame = await attachIFrameContext({generator_api: 'fledge'}); | |
| await frame.execute(async () => { | |
| assert_not_equals(window.fence, null); | |
| const nested_frame = await attachIFrameContext(); | |
| await nested_frame.execute(() => { | |
| assert_not_equals(window.fence, null); | |
| }); | |
| }); | |
| }, 'window.fence is available in same-origin subframes of urn iframes'); | |
| </script> | |
| </body> |