diff options
Diffstat (limited to 'testing/web-platform/tests/navigation-api/per-entry-events/dispose-for-navigation-in-child.html')
-rw-r--r-- | testing/web-platform/tests/navigation-api/per-entry-events/dispose-for-navigation-in-child.html | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/testing/web-platform/tests/navigation-api/per-entry-events/dispose-for-navigation-in-child.html b/testing/web-platform/tests/navigation-api/per-entry-events/dispose-for-navigation-in-child.html new file mode 100644 index 0000000000..2482877085 --- /dev/null +++ b/testing/web-platform/tests/navigation-api/per-entry-events/dispose-for-navigation-in-child.html @@ -0,0 +1,41 @@ +<!doctype html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<iframe id="iframe" src="/common/blank.html"></iframe> +<script> +promise_test(async (t) => { + // Wait for after the load event so that the navigation doesn't get converted + // into a replace navigation. + await new Promise(r => window.onload = () => t.step_timeout(r, 0)); + + await iframe.contentWindow.navigation.navigate("#a"); + await navigation.navigate("#1").finished; + await navigation.navigate("#2").finished; + await navigation.navigate("#3").finished; + await iframe.contentWindow.navigation.back().finished; + assert_equals(navigation.entries().length, 4); + assert_equals(iframe.contentWindow.navigation.entries().length, 2); + assert_equals(navigation.currentEntry.index, 0); + assert_equals(iframe.contentWindow.navigation.currentEntry.index, 0); + + let top_entry_0_before = navigation.entries()[0]; + let dispose_promises = []; + for (let i = 1; i < navigation.entries().length; i++) { + dispose_promises.push(new Promise(r => navigation.entries()[i].ondispose = r)) + } + + // This push navigation should truncate in the top window. + await iframe.contentWindow.navigation.navigate("#b").finished; + + // entries() should be updated in both frames, and all forward entries in the + // top window should have dispose events, even though that wasn't the window + // that navigated. + await Promise.all(dispose_promises); + assert_equals(navigation.entries().length, 1); + assert_equals(iframe.contentWindow.navigation.entries().length, 2); + assert_equals(navigation.currentEntry.index, 0); + assert_equals(iframe.contentWindow.navigation.currentEntry.index, 1); + assert_equals(navigation.entries()[0], top_entry_0_before); + +}, "Dispose events should fire when entries are removed by a navigation in a different frame"); +</script> |