67 lines
2.2 KiB
HTML
67 lines
2.2 KiB
HTML
<!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>
|