| <!DOCTYPE html> | |
| <title>Test named frame navigation of 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> | |
| <body> | |
| <script> | |
| promise_test(async () => { | |
| // This test uses the following layout: | |
| // A: Top-level frame | |
| // B: iframe | |
| // C: fencedframe | |
| // D: fencedframe | |
| // E: iframe | |
| // | |
| // The purpose is to test that name resolution of navigation targets ignores | |
| // ancestors beyond fence boundaries. | |
| // Create an iframe B. | |
| const B = attachIFrameContext(); | |
| await B.execute(async () => { | |
| window.name = "B"; | |
| // Create a fenced frame C inside of it. | |
| window.C = attachFencedFrameContext(); | |
| await window.C.execute(async () => { | |
| window.name = "C"; | |
| // Navigate the target "B" from inside the fenced frame. | |
| // It should open in a new tab due to fenced name lookup. | |
| window.open("resources/dummy.html", "B"); | |
| }); | |
| }); | |
| // Observe that it created a new window, and the frame B is still here. | |
| await B.execute(async () => { | |
| // Create a nested iframe and fenced frame. | |
| await window.C.execute(async () => { | |
| window.D = attachFencedFrameContext(); | |
| window.E = attachIFrameContext(); | |
| // Navigate the target "C" from inside the nested fenced frame. | |
| // It should open in a new tab due to fenced name lookup. | |
| await window.D.execute(async () => { | |
| window.open("resources/dummy.html", "C"); | |
| }); | |
| }); | |
| // Observe that it created a new window, and the frame C is still here. | |
| await window.C.execute(async () => { | |
| // Now attempt to navigate the target "C" from inside the iframe. | |
| // It should open in a new tab with a console error, because sandboxed | |
| // iframes (inherited from the fenced frame) are not allowed to navigate | |
| // their ancestors. | |
| await window.E.execute(() => { | |
| window.open("resources/dummy.html", "C"); | |
| }); | |
| }); | |
| // Observe that C is still here. | |
| await window.C.execute(() => {}); | |
| }); | |
| }, 'navigate named ancestors'); | |
| </script> | |
| </body> |