tor-browser

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

browser_491168.js (3300B)


      1 "use strict";
      2 
      3 const REFERRER1 = "http://example.org/?" + Date.now();
      4 const REFERRER2 = "http://example.org/?" + Math.random();
      5 const REFERRER3 = "http://example.org/?" + Math.random();
      6 
      7 add_task(async function () {
      8  function getExpectedReferrer(referrer) {
      9    let defaultPolicy = Services.prefs.getIntPref(
     10      "network.http.referer.defaultPolicy"
     11    );
     12    Assert.greater(
     13      [2, 3].indexOf(defaultPolicy),
     14      -1,
     15      "default referrer policy should be either strict-origin-when-cross-origin(2) or no-referrer-when-downgrade(3)"
     16    );
     17    if (defaultPolicy == 2) {
     18      return referrer.match(/https?:\/\/[^\/]+\/?/i)[0];
     19    }
     20    return referrer;
     21  }
     22 
     23  async function checkDocumentReferrer(referrer, msg) {
     24    await SpecialPowers.spawn(
     25      gBrowser.selectedBrowser,
     26      [{ referrer, msg }],
     27      async function (args) {
     28        Assert.equal(content.document.referrer, args.referrer, args.msg);
     29      }
     30    );
     31  }
     32 
     33  let ReferrerInfo = Components.Constructor(
     34    "@mozilla.org/referrer-info;1",
     35    "nsIReferrerInfo",
     36    "init"
     37  );
     38  // Add a new tab.
     39  let tab = (gBrowser.selectedTab = BrowserTestUtils.addTab(
     40    gBrowser,
     41    "about:blank"
     42  ));
     43  let browser = tab.linkedBrowser;
     44  await BrowserTestUtils.browserLoaded(browser, { wantLoad: "about:blank" });
     45 
     46  // Load a new URI with a specific referrer.
     47  let referrerInfo1 = new ReferrerInfo(
     48    Ci.nsIReferrerInfo.EMPTY,
     49    true,
     50    Services.io.newURI(REFERRER1)
     51  );
     52  browser.loadURI(Services.io.newURI("http://example.org"), {
     53    referrerInfo: referrerInfo1,
     54    triggeringPrincipal: Services.scriptSecurityManager.createNullPrincipal({}),
     55  });
     56  await promiseBrowserLoaded(browser);
     57 
     58  await TabStateFlusher.flush(browser);
     59  let tabState = JSON.parse(ss.getTabState(tab));
     60  let actualReferrerInfo = E10SUtils.deserializeReferrerInfo(
     61    tabState.entries[0].referrerInfo
     62  );
     63  is(
     64    actualReferrerInfo.originalReferrer.spec,
     65    REFERRER1,
     66    "Referrer retrieved via getTabState matches referrer set via loadURI."
     67  );
     68 
     69  let referrerInfo2 = new ReferrerInfo(
     70    Ci.nsIReferrerInfo.EMPTY,
     71    true,
     72    Services.io.newURI(REFERRER2)
     73  );
     74 
     75  tabState.entries[0].referrerInfo =
     76    E10SUtils.serializeReferrerInfo(referrerInfo2);
     77  await promiseTabState(tab, tabState);
     78 
     79  await checkDocumentReferrer(
     80    getExpectedReferrer(REFERRER2),
     81    "document.referrer matches referrer set via setTabState using referrerInfo."
     82  );
     83  gBrowser.removeCurrentTab();
     84 
     85  // Restore the closed tab.
     86  tab = ss.undoCloseTab(window, 0);
     87  await promiseTabRestored(tab);
     88 
     89  await checkDocumentReferrer(
     90    getExpectedReferrer(REFERRER2),
     91    "document.referrer is still correct after closing and reopening the tab."
     92  );
     93 
     94  tabState.entries[0].referrerInfo = null;
     95  tabState.entries[0].referrer = REFERRER3;
     96  await promiseTabState(tab, tabState);
     97 
     98  await checkDocumentReferrer(
     99    getExpectedReferrer(REFERRER3),
    100    "document.referrer matches referrer set via setTabState using referrer."
    101  );
    102  gBrowser.removeCurrentTab();
    103 
    104  // Restore the closed tab.
    105  tab = ss.undoCloseTab(window, 0);
    106  await promiseTabRestored(tab);
    107 
    108  await checkDocumentReferrer(
    109    getExpectedReferrer(REFERRER3),
    110    "document.referrer is still correct after closing and reopening the tab."
    111  );
    112  gBrowser.removeCurrentTab();
    113 });