dispose-for-navigation-in-child.html (2050B)
1 <!doctype html> 2 <script src="/resources/testharness.js"></script> 3 <script src="/resources/testharnessreport.js"></script> 4 <iframe id="iframe" src="/common/blank.html"></iframe> 5 <script> 6 promise_test(async (t) => { 7 // Wait for after the load event so that the navigation doesn't get converted 8 // into a replace navigation. 9 await new Promise(r => window.onload = () => t.step_timeout(r, 0)); 10 let start_length = navigation.entries().length; 11 let start_index = navigation.currentEntry.index; 12 13 await iframe.contentWindow.navigation.navigate("#a"); 14 await navigation.navigate("#1").finished; 15 await navigation.navigate("#2").finished; 16 await navigation.navigate("#3").finished; 17 await iframe.contentWindow.navigation.back().finished; 18 assert_equals(navigation.entries().length, start_length + 3); 19 assert_equals(iframe.contentWindow.navigation.entries().length, 2); 20 assert_equals(navigation.currentEntry.index, start_index); 21 assert_equals(iframe.contentWindow.navigation.currentEntry.index, 0); 22 23 let top_entry_0_before = navigation.entries()[start_index]; 24 let dispose_promises = []; 25 for (let i = start_index + 1; i < navigation.entries().length; i++) { 26 dispose_promises.push(new Promise(r => navigation.entries()[i].ondispose = r)) 27 } 28 29 // This push navigation should truncate in the top window. 30 await iframe.contentWindow.navigation.navigate("#b").finished; 31 32 // entries() should be updated in both frames, and all forward entries in the 33 // top window should have dispose events, even though that wasn't the window 34 // that navigated. 35 await Promise.all(dispose_promises); 36 assert_equals(navigation.entries().length, start_length); 37 assert_equals(iframe.contentWindow.navigation.entries().length, 2); 38 assert_equals(navigation.currentEntry.index, start_index); 39 assert_equals(iframe.contentWindow.navigation.currentEntry.index, 1); 40 assert_equals(navigation.entries()[start_index], top_entry_0_before); 41 42 }, "Dispose events should fire when entries are removed by a navigation in a different frame"); 43 </script>