| <!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> |