tor-browser

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

navigation-api-location-replace.https.html (3026B)


      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, url => {
     39    location.replace(url);
     40  });
     41 
     42  let activationStateAfterActivation = await prerenderedRC.executeScript(() => {
     43    return {
     44     entries: navigation.entries().map(e => ({ id: e.id, })),
     45     activationEntryId: navigation.activation.entry?.id,
     46     activationFromId: navigation.activation.from?.id,
     47     activationNavigationType : navigation.activation.navigationType,
     48    }
     49  });
     50  assert_equals(activationStateAfterActivation.entries.length, 1);
     51  assert_equals(activationStateAfterActivation.activationFromId, referrerRCCurrentId);
     52  assert_equals(activationStateAfterActivation.activationEntryId, activationStateAfterActivation.entries[0].id);
     53  assert_equals(activationStateAfterActivation.activationNavigationType, "replace");
     54 
     55  let currentEntryIdentity = await prerenderedRC.executeScript(() => {
     56    return window.currentEntryBeforeActivation === navigation.currentEntry &&
     57           navigation.currentEntry === navigation.entries()[navigation.entries().length - 1];
     58  });
     59  assert_true(currentEntryIdentity);
     60 },`navigation.entries() and navigation.activation should be updated on activation and handle replacing correctly`);
     61 </script>