55 lines
2.6 KiB
HTML
55 lines
2.6 KiB
HTML
<!DOCTYPE html>
|
|
<title>Test history.length in outermost document</title>
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src="resources/utils.js"></script>
|
|
<script src="/common/utils.js"></script>
|
|
|
|
<body>
|
|
<script>
|
|
promise_test(async () => {
|
|
const kInnerAssertion = "Navigations inside of a fenced frame are always " +
|
|
"replacement navigations and never increase " +
|
|
"`history.length` inside the fence: ";
|
|
const kOuterAssertion = "Navigations inside of a fenced frame never " +
|
|
"contribute to joint session history, or increase " +
|
|
"`history.length` outside the fence: ";
|
|
// This is used by
|
|
// `resources/history-length-fenced-navigations-replace-do-not-contribute-to-joint-inner.html`
|
|
// to let us know once a navigation is complete inside the fence. The inner
|
|
// page will test its `history.length` and report to us "PASS <frame type>" or
|
|
// "FAIL <frame type>" (the history length should be unaffected by the
|
|
// navigation). If the inner test passes, then we will check our
|
|
// `history.length` and ensure that the inner fenced navigation did not
|
|
// contribute to the joint session history.
|
|
const fenced_navigation_complete_key = token();
|
|
// This is sent by us to the inner page to let it know that we're finished
|
|
// observing the effects of the last navigation, and that it should perform
|
|
// the next one for us to observe.
|
|
const outer_page_ready_for_next_fenced_navigation_key = token();
|
|
|
|
const level = "top-level-fenced-frame";
|
|
|
|
attachFencedFrame(generateURL(
|
|
"resources/history-length-fenced-navigations-replace-do-" +
|
|
"not-contribute-to-joint-inner.html",
|
|
[fenced_navigation_complete_key,
|
|
outer_page_ready_for_next_fenced_navigation_key,
|
|
level]));
|
|
|
|
const tests = ["top-level-fenced-frame", "nested-fenced-frame", "nested-iframe"];
|
|
for (test_type of tests) {
|
|
// Wait for the fenced navigations to complete, and then see if they
|
|
// observable via the outermost `history.length`.
|
|
let result = await nextValueFromServer(fenced_navigation_complete_key);
|
|
assert_equals(result, "PASS > " + test_type, kInnerAssertion + test_type);
|
|
assert_equals(history.length, 1, kOuterAssertion + test_type);
|
|
|
|
// Acknowledge the results, and let the fenced frame know that we're ready
|
|
// to observe more fenced navigations.
|
|
writeValueToServer(outer_page_ready_for_next_fenced_navigation_key, "READY");
|
|
}
|
|
}, "All fenced navigations should be replace-only and not contribute to joint " +
|
|
"session history");
|
|
</script>
|
|
</body>
|