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 });