tor-browser

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

test_hpke_out_of_process.js (2564B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 const { HttpServer } = ChromeUtils.importESModule(
      7  "resource://testing-common/httpd.sys.mjs"
      8 );
      9 
     10 const { XPCShellContentUtils } = ChromeUtils.importESModule(
     11  "resource://testing-common/XPCShellContentUtils.sys.mjs"
     12 );
     13 
     14 XPCShellContentUtils.ensureInitialized(this);
     15 
     16 let gHttpServer;
     17 
     18 add_setup(async function () {
     19  gHttpServer = new HttpServer();
     20  let invalidHandler = (req, res) => {
     21    res.setStatusLine(req.httpVersion, 500, "Oh no, it broke");
     22    res.write("Uh oh, it broke.");
     23  };
     24  let validHandler = (req, res) => {
     25    res.setHeader("Content-Type", "application/ohttp-keys");
     26    res.write("1234");
     27  };
     28 
     29  gHttpServer.registerPathHandler("/.wellknown/invalid", invalidHandler);
     30  gHttpServer.registerPathHandler("/.wellknown/valid", validHandler);
     31 
     32  gHttpServer.start(-1);
     33 });
     34 
     35 function getLocalURL(path) {
     36  return `http://localhost:${gHttpServer.identity.primaryPort}/.wellknown/${path}`;
     37 }
     38 
     39 add_task(async function test_out_of_process_use() {
     40  let page = await XPCShellContentUtils.loadContentPage("about:certificate", {
     41    remote: true,
     42  });
     43 
     44  let fetchURL = getLocalURL("valid");
     45  let contentFetch = await page.spawn([fetchURL], url => {
     46    // eslint-disable-next-line no-shadow
     47    let { HPKEConfigManager } = ChromeUtils.importESModule(
     48      "resource://gre/modules/HPKEConfigManager.sys.mjs"
     49    );
     50 
     51    return HPKEConfigManager.get(url);
     52  });
     53  Assert.deepEqual(contentFetch, new TextEncoder().encode("1234"));
     54  Assert.ok(
     55    page.browsingContext.currentWindowGlobal.domProcess.getActor(
     56      "HPKEConfigManager"
     57    ),
     58    "Should be able to get a parent actor for this browsingContext"
     59  );
     60 
     61  let randomPage = await XPCShellContentUtils.loadContentPage(
     62    "data:text/html,2",
     63    {
     64      remote: true,
     65    }
     66  );
     67 
     68  await Assert.rejects(
     69    randomPage.spawn([fetchURL], async url => {
     70      // eslint-disable-next-line no-shadow
     71      let { HPKEConfigManager } = ChromeUtils.importESModule(
     72        "resource://gre/modules/HPKEConfigManager.sys.mjs"
     73      );
     74 
     75      return HPKEConfigManager.get(url);
     76    }),
     77    /cannot be used/,
     78    "Shouldn't be able to use HPKEConfigManager from random content processes."
     79  );
     80  Assert.throws(
     81    () =>
     82      randomPage.browsingContext.currentWindowGlobal.domProcess.getActor(
     83        "HPKEConfigManager"
     84      ),
     85    /Process protocol .*support remote type/,
     86    "Should not be able to get a parent actor for a non-privilegedabout browsingContext"
     87  );
     88 });