tor-browser

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

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>