tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>