tor-browser

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

navigation-api.https.html (3063B)


      1 <!DOCTYPE html>
      2 <meta name="timeout" content="long">
      3 <script src="/resources/testharness.js"></script>
      4 <script src="/resources/testharnessreport.js"></script>
      5 <script src="/common/utils.js"></script>
      6 <script src="/common/dispatcher/dispatcher.js"></script>
      7 <script src="/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js"></script>
      8 <script src="../resources/utils.js"></script>
      9 <script src="resources/utils.js"></script>
     10 
     11 <body>
     12 <script>
     13 setup(() => assertSpeculationRulesIsSupported());
     14 
     15 promise_test(async t => {
     16  const rcHelper = new PrerenderingRemoteContextHelper();
     17  const referrerRC = await rcHelper.addWindow(undefined, { features: 'noopener' });
     18  assert_equals(await referrerRC.executeScript(() => navigation.entries().length), 1);
     19  let referrerRCCurrentId = await referrerRC.executeScript(() => navigation.currentEntry.id);
     20 
     21  const prerenderedRC = await referrerRC.addPrerender();
     22  let activationStateBeforeActivation = await prerenderedRC.executeScript(() => {
     23    return {
     24     entries: navigation.entries().map(e => ({ id: e.id, })),
     25     activationEntryId: navigation.activation.entry?.id,
     26     activationFromId: navigation.activation.from?.id,
     27     activationNavigationType : navigation.activation.navigationType,
     28    }
     29  });
     30  assert_equals(activationStateBeforeActivation.entries.length, 1);
     31  assert_equals(activationStateBeforeActivation.activationFromId, referrerRCCurrentId);
     32  assert_equals(activationStateBeforeActivation.activationEntryId, activationStateBeforeActivation.entries[0].id);
     33  assert_equals(activationStateBeforeActivation.activationNavigationType, "push");
     34 
     35  // Save the current entry before activation.
     36  await prerenderedRC.executeScript(() => window.currentEntryBeforeActivation = navigation.currentEntry);
     37 
     38  await referrerRC.navigateExpectingPrerenderingActivation(prerenderedRC);
     39 
     40  let activationStateAfterActivation = await prerenderedRC.executeScript(() => {
     41    return {
     42     entries: navigation.entries().map(e => ({ id: e.id, })),
     43     activationEntryId: navigation.activation.entry?.id,
     44     activationFromId: navigation.activation.from?.id,
     45     activationNavigationType : navigation.activation.navigationType,
     46    }
     47  });
     48  assert_equals(activationStateAfterActivation.entries.length, 2);
     49  assert_equals(activationStateAfterActivation.activationFromId, activationStateAfterActivation.entries[0].id);
     50  assert_equals(activationStateAfterActivation.activationFromId, referrerRCCurrentId);
     51  assert_equals(activationStateAfterActivation.activationEntryId, activationStateAfterActivation.entries[1].id);
     52  assert_equals(activationStateAfterActivation.activationNavigationType, "push");
     53 
     54  let currentEntryIdentity = await prerenderedRC.executeScript(() => {
     55    return window.currentEntryBeforeActivation === navigation.currentEntry &&
     56           navigation.currentEntry === navigation.entries()[navigation.entries().length - 1];
     57  });
     58  assert_true(currentEntryIdentity);
     59 },`navigation.entries() and navigation.activation should be updated on activation`);
     60 </script>