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