entries-mainframe-with-iframe.html (3329B)
1 <!doctype html> 2 <script src="/resources/testharness.js"></script> 3 <script src="/resources/testharnessreport.js"></script> 4 <iframe id="i" 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 let start_length = navigation.entries().length; 10 let start_index = navigation.currentEntry.index; 11 await new Promise(resolve => window.onload = () => t.step_timeout(resolve, 0)); 12 13 // Record initial state 14 assert_equals(navigation.entries().length, start_length, "initial outer entries() length"); 15 assert_equals(i.contentWindow.navigation.entries().length, 1, "initial iframe entries() length"); 16 17 let initialMainURL = location.href; 18 let initialIframeURL = i.contentWindow.location.href; 19 20 // Navigate main frame 21 await navigation.navigate("#main1").committed; 22 assert_equals(navigation.entries().length, start_length + 1, "after #main1 outer entries() length"); 23 assert_equals(i.contentWindow.navigation.entries().length, 1, "after #main1 iframe entries() length"); 24 25 await navigation.navigate("#main2").committed; 26 assert_equals(navigation.entries().length, start_length + 2, "after #main2 outer entries() length"); 27 assert_equals(i.contentWindow.navigation.entries().length, 1, "after #main2 iframe entries() length"); 28 29 // Navigate iframe 30 await i.contentWindow.navigation.navigate("#iframe1").committed; 31 assert_equals(navigation.entries().length, start_length + 2, "after #iframe1 outer entries() length"); 32 assert_equals(i.contentWindow.navigation.entries().length, 2, "after #iframe1 iframe entries() length"); 33 34 await i.contentWindow.navigation.navigate("#iframe2").committed; 35 assert_equals(navigation.entries().length, start_length + 2, "after #iframe2 outer entries() length"); 36 assert_equals(i.contentWindow.navigation.entries().length, 3, "after #iframe2 iframe entries() length"); 37 38 // Verify main frame entries contain only main frame URLs 39 let mainEntries = navigation.entries().slice(start_index); 40 assert_equals(mainEntries.length, 3, "main frame should have 3 entries"); 41 42 assert_true(mainEntries[0].url.includes(initialMainURL.split('#')[0]), "main entry 0 should be main frame URL"); 43 assert_true(mainEntries[1].url.endsWith("#main1"), "main entry 1 should end with #main1"); 44 assert_true(mainEntries[2].url.endsWith("#main2"), "main entry 2 should end with #main2"); 45 46 for (let entry of mainEntries) 47 assert_false(entry.url.includes("#iframe"), "main frame entry should not contain iframe hash: " + entry.url); 48 49 // Verify iframe entries contain only iframe URLs 50 let iframeEntries = i.contentWindow.navigation.entries(); 51 assert_equals(iframeEntries.length, 3, "iframe should have 3 entries"); 52 53 assert_true(iframeEntries[0].url.includes(initialIframeURL.split('#')[0]), "iframe entry 0 should be iframe URL"); 54 assert_true(iframeEntries[1].url.endsWith("#iframe1"), "iframe entry 1 should end with #iframe1"); 55 assert_true(iframeEntries[2].url.endsWith("#iframe2"), "iframe entry 1 should end with #iframe2"); 56 57 for (let entry of iframeEntries) 58 assert_false(entry.url.includes("#main"), "iframe entry should not contain main frame hash: " + entry.url); 59 60 }, "navigation.entries() for main frame excludes iframe history entries"); 61 </script>