tor-browser

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

browser_test_referrer_loadInOtherProcess.js (5109B)


      1 const TEST_PAGE =
      2  "https://example.org/browser/browser/base/content/test/general/dummy_page.html";
      3 const TEST_REFERRER = "http://mochi.test:8888/";
      4 
      5 const ReferrerInfo = Components.Constructor(
      6  "@mozilla.org/referrer-info;1",
      7  "nsIReferrerInfo",
      8  "init"
      9 );
     10 
     11 let referrerInfo = new ReferrerInfo(
     12  Ci.nsIReferrerInfo.ORIGIN,
     13  true,
     14  Services.io.newURI(TEST_REFERRER)
     15 );
     16 let deReferrerInfo = E10SUtils.serializeReferrerInfo(referrerInfo);
     17 
     18 var checkResult = async function (isRemote, browserKey, uri) {
     19  is(
     20    gBrowser.selectedBrowser.isRemoteBrowser,
     21    isRemote,
     22    "isRemoteBrowser should be correct"
     23  );
     24 
     25  is(
     26    gBrowser.selectedBrowser.permanentKey,
     27    browserKey,
     28    "browser.permanentKey should be correct"
     29  );
     30 
     31  if (SpecialPowers.Services.appinfo.sessionHistoryInParent) {
     32    let sessionHistory =
     33      gBrowser.selectedBrowser.browsingContext.sessionHistory;
     34    let entry = sessionHistory.getEntryAtIndex(sessionHistory.count - 1);
     35    let args = { uri, referrerInfo: deReferrerInfo, isRemote };
     36    Assert.equal(entry.URI.spec, args.uri, "Uri should be correct");
     37 
     38    // Main process like about:mozilla does not trigger the real network request.
     39    // So we don't store referrerInfo in sessionHistory in that case.
     40    // Besides, the referrerInfo stored in sessionHistory was computed, we only
     41    // check pre-computed things.
     42    if (args.isRemote) {
     43      let resultReferrerInfo = entry.referrerInfo;
     44      let expectedReferrerInfo = E10SUtils.deserializeReferrerInfo(
     45        args.referrerInfo
     46      );
     47 
     48      Assert.equal(
     49        resultReferrerInfo.originalReferrer.spec,
     50        expectedReferrerInfo.originalReferrer.spec,
     51        "originalReferrer should be correct"
     52      );
     53      Assert.equal(
     54        resultReferrerInfo.sendReferrer,
     55        expectedReferrerInfo.sendReferrer,
     56        "sendReferrer should be correct"
     57      );
     58      Assert.equal(
     59        resultReferrerInfo.referrerPolicy,
     60        expectedReferrerInfo.referrerPolicy,
     61        "referrerPolicy should be correct"
     62      );
     63    } else {
     64      Assert.equal(entry.referrerInfo, null, "ReferrerInfo should be correct");
     65    }
     66 
     67    return;
     68  }
     69 
     70  await SpecialPowers.spawn(
     71    gBrowser.selectedBrowser,
     72    [{ uri, referrerInfo: deReferrerInfo, isRemote }],
     73    async function (args) {
     74      let webNav = content.docShell.QueryInterface(Ci.nsIWebNavigation);
     75      let sessionHistory = webNav.sessionHistory;
     76      let entry = sessionHistory.legacySHistory.getEntryAtIndex(
     77        sessionHistory.count - 1
     78      );
     79 
     80      var { E10SUtils } = SpecialPowers.ChromeUtils.importESModule(
     81        "resource://gre/modules/E10SUtils.sys.mjs"
     82      );
     83 
     84      Assert.equal(entry.URI.spec, args.uri, "Uri should be correct");
     85 
     86      // Main process like about:mozilla does not trigger the real network request.
     87      // So we don't store referrerInfo in sessionHistory in that case.
     88      // Besides, the referrerInfo stored in sessionHistory was computed, we only
     89      // check pre-computed things.
     90      if (args.isRemote) {
     91        let resultReferrerInfo = entry.referrerInfo;
     92        let expectedReferrerInfo = E10SUtils.deserializeReferrerInfo(
     93          args.referrerInfo
     94        );
     95 
     96        Assert.equal(
     97          resultReferrerInfo.originalReferrer.spec,
     98          expectedReferrerInfo.originalReferrer.spec,
     99          "originalReferrer should be correct"
    100        );
    101        Assert.equal(
    102          resultReferrerInfo.sendReferrer,
    103          expectedReferrerInfo.sendReferrer,
    104          "sendReferrer should be correct"
    105        );
    106        Assert.equal(
    107          resultReferrerInfo.referrerPolicy,
    108          expectedReferrerInfo.referrerPolicy,
    109          "referrerPolicy should be correct"
    110        );
    111      } else {
    112        Assert.equal(
    113          entry.referrerInfo,
    114          null,
    115          "ReferrerInfo should be correct"
    116        );
    117      }
    118    }
    119  );
    120 };
    121 var waitForLoad = async function (uri) {
    122  info("waitForLoad " + uri);
    123  let loadURIOptions = {
    124    triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(),
    125    referrerInfo,
    126  };
    127  gBrowser.selectedBrowser.webNavigation.loadURI(
    128    Services.io.newURI(uri),
    129    loadURIOptions
    130  );
    131 
    132  await BrowserTestUtils.browserStopped(gBrowser, uri);
    133 };
    134 
    135 // Tests referrerInfo when navigating from a page in the remote process to main
    136 // process and vice versa.
    137 add_task(async function test_navigation() {
    138  // Navigate from non remote to remote
    139  gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, "about:blank");
    140  let testURI = TEST_PAGE;
    141  let { permanentKey } = gBrowser.selectedBrowser;
    142  await waitForLoad(testURI);
    143  await checkResult(true, permanentKey, testURI);
    144  gBrowser.removeCurrentTab();
    145 
    146  // Navigate from remote to non-remote
    147  gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, TEST_PAGE);
    148  // Wait for the non-blank page to finish loading
    149  await BrowserTestUtils.browserStopped(gBrowser, TEST_PAGE);
    150  testURI = "about:mozilla";
    151  permanentKey = gBrowser.selectedBrowser.permanentKey;
    152  await waitForLoad(testURI);
    153  await checkResult(false, permanentKey, testURI);
    154 
    155  gBrowser.removeCurrentTab();
    156 });