tor-browser

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

test_E10SUtils_nested_URIs.js (2501B)


      1 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
      2 /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
      3 
      4 const { E10SUtils } = ChromeUtils.importESModule(
      5  "resource://gre/modules/E10SUtils.sys.mjs"
      6 );
      7 
      8 var TEST_PREFERRED_REMOTE_TYPES = [
      9  E10SUtils.WEB_REMOTE_TYPE,
     10  E10SUtils.NOT_REMOTE,
     11  "fakeRemoteType",
     12 ];
     13 
     14 // These test cases give a nestedURL and a plainURL that should always load in
     15 // the same remote type. By making these tests comparisons, they should work
     16 // with any pref combination.
     17 var TEST_CASES = [
     18  {
     19    nestedURL: "jar:file:///some.file!/",
     20    plainURL: "file:///some.file",
     21  },
     22  {
     23    nestedURL: "jar:jar:file:///some.file!/!/",
     24    plainURL: "file:///some.file",
     25  },
     26  {
     27    nestedURL: "jar:http://some.site/file!/",
     28    plainURL: "http://some.site/file",
     29  },
     30  {
     31    nestedURL: "view-source:http://some.site",
     32    plainURL: "http://some.site",
     33  },
     34  {
     35    nestedURL: "view-source:file:///some.file",
     36    plainURL: "file:///some.file",
     37  },
     38  {
     39    nestedURL: "view-source:about:home",
     40    plainURL: "about:home",
     41  },
     42  {
     43    nestedURL: "view-source:about:robots",
     44    plainURL: "about:robots",
     45  },
     46  {
     47    nestedURL: "view-source:pcast:http://some.site",
     48    plainURL: "http://some.site",
     49  },
     50 ];
     51 
     52 function run_test() {
     53  for (let testCase of TEST_CASES) {
     54    for (let preferredRemoteType of TEST_PREFERRED_REMOTE_TYPES) {
     55      let plainUri = Services.io.newURI(testCase.plainURL);
     56      let plainRemoteType = E10SUtils.getRemoteTypeForURIObject(plainUri, {
     57        multiProcess: true,
     58        remoteSubFrames: false,
     59        preferredRemoteType,
     60      });
     61 
     62      let nestedUri = Services.io.newURI(testCase.nestedURL);
     63      let nestedRemoteType = E10SUtils.getRemoteTypeForURIObject(nestedUri, {
     64        multiProcess: true,
     65        remoteSubFrames: false,
     66        preferredRemoteType,
     67      });
     68 
     69      let nestedStr = nestedUri.scheme + ":";
     70      do {
     71        nestedUri = nestedUri.QueryInterface(Ci.nsINestedURI).innerURI;
     72        if (nestedUri.scheme == "about") {
     73          nestedStr += nestedUri.spec;
     74          break;
     75        }
     76 
     77        nestedStr += nestedUri.scheme + ":";
     78      } while (nestedUri instanceof Ci.nsINestedURI);
     79 
     80      let plainStr =
     81        plainUri.scheme == "about" ? plainUri.spec : plainUri.scheme + ":";
     82      equal(
     83        nestedRemoteType,
     84        plainRemoteType,
     85        `Check that ${nestedStr} loads in same remote type as ${plainStr}` +
     86          ` with preferred remote type: ${preferredRemoteType}`
     87      );
     88    }
     89  }
     90 }