tor-browser

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

test_cache_204_response.js (1872B)


      1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* This Source Code Form is subject to the terms of the Mozilla Public
      3 * License, v. 2.0. If a copy of the MPL was not distributed with this
      4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      5 
      6 /*
      7 Test if 204 response is cached.
      8 1. Make first http request and return a 204 response.
      9 2. Check if the first response is not cached.
     10 3. Make second http request and check if the response is cached.
     11 
     12 */
     13 
     14 "use strict";
     15 
     16 const { HttpServer } = ChromeUtils.importESModule(
     17  "resource://testing-common/httpd.sys.mjs"
     18 );
     19 
     20 function test_handler(metadata, response) {
     21  response.setHeader("Content-Type", "text/html", false);
     22  response.setHeader("Cache-control", "max-age=9999", false);
     23  response.setStatusLine(metadata.httpVersion, 204, "No Content");
     24 }
     25 
     26 function make_channel(url) {
     27  let channel = NetUtil.newChannel({
     28    uri: url,
     29    loadUsingSystemPrincipal: true,
     30  }).QueryInterface(Ci.nsIHttpChannel);
     31  return channel;
     32 }
     33 
     34 async function get_response(channel, fromCache) {
     35  return new Promise(resolve => {
     36    channel.asyncOpen(
     37      new ChannelListener((request, buffer, ctx, isFromCache) => {
     38        Assert.equal(
     39          fromCache,
     40          isFromCache,
     41          `got response from cache = ${fromCache}`
     42        );
     43        resolve();
     44      })
     45    );
     46  });
     47 }
     48 
     49 async function stop_server(httpserver) {
     50  return new Promise(resolve => {
     51    httpserver.stop(resolve);
     52  });
     53 }
     54 
     55 add_task(async function () {
     56  let httpserver = new HttpServer();
     57  httpserver.registerPathHandler("/testdir", test_handler);
     58  httpserver.start(-1);
     59  const PORT = httpserver.identity.primaryPort;
     60  const URI = `http://localhost:${PORT}/testdir`;
     61 
     62  await get_response(make_channel(URI, "GET"), false);
     63  await get_response(make_channel(URI, "GET"), true);
     64 
     65  await stop_server(httpserver);
     66 });