tor-browser

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

test_cache2_nostore.js (2646B)


      1 /* -*- Mode: js; tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */
      2 /* vim: set ts=2 sw=2 sts=2 et: */
      3 
      4 /**
      5 * @file
      6 *   Unit test to verify that resources with Cache-Control: no-store, no-cache
      7 *   and Cache-Control: no-cache, no-store headers are not saved in the cache.
      8 */
      9 
     10 const { HttpServer } = ChromeUtils.importESModule(
     11  "resource://testing-common/httpd.sys.mjs"
     12 );
     13 
     14 let httpServer = null;
     15 
     16 function startServer() {
     17  httpServer = new HttpServer();
     18  httpServer.registerPathHandler("/test1", (request, response) => {
     19    response.setHeader("Cache-Control", "no-cache, no-store", false);
     20    response.setHeader("Content-Type", "text/plain", false);
     21    response.write("OK");
     22  });
     23  httpServer.registerPathHandler("/test2", (request, response) => {
     24    response.setHeader("Cache-Control", "no-cache, no-store", false);
     25    response.setHeader("Content-Type", "text/plain", false);
     26    response.write("OK");
     27  });
     28  httpServer.registerPathHandler("/test3", (request, response) => {
     29    response.setHeader("Cache-Control", "no-cache", false);
     30    response.setHeader("Cache-Control", "no-store", false);
     31    response.setHeader("Content-Type", "text/plain", false);
     32    response.write("OK");
     33  });
     34  httpServer.registerPathHandler("/test4", (request, response) => {
     35    response.setHeader("Cache-Control", "no-cache", false);
     36    response.setHeader("Cache-Control", "no-store", false);
     37    response.setHeader("Content-Type", "text/plain", false);
     38    response.write("OK");
     39  });
     40  httpServer.start(-1);
     41  registerCleanupFunction(async () => {
     42    if (httpServer) {
     43      await httpServer.stop();
     44    }
     45  });
     46  return httpServer.identity.primaryPort;
     47 }
     48 
     49 add_task(async function test_no_cache_no_store() {
     50  const port = startServer();
     51  const baseURI = `http://localhost:${port}`;
     52  let tests = ["/test1", "/test2", "/test3", "/test4"];
     53 
     54  for (let test of tests) {
     55    let uri = baseURI + test;
     56    let channel = NetUtil.newChannel({
     57      uri,
     58      loadUsingSystemPrincipal: true,
     59    });
     60 
     61    let buffer = await new Promise(resolve => {
     62      channel.asyncOpen(
     63        new ChannelListener(
     64          (request, buffer) => resolve(buffer),
     65          null,
     66          CL_ALLOW_UNKNOWN_CL
     67        )
     68      );
     69    });
     70 
     71    Assert.equal(buffer, "OK", `Received expected content for ${test}`);
     72 
     73    let entry = await new Promise(resolve => {
     74      asyncOpenCacheEntry(
     75        uri,
     76        "disk",
     77        Ci.nsICacheStorage.OPEN_READONLY,
     78        null,
     79        (status, entry) => resolve(entry)
     80      );
     81    });
     82    Assert.equal(
     83      entry.persistent,
     84      false,
     85      `${test} should not be persistently cached`
     86    );
     87  }
     88 });