Source code

Revision control

Copy as Markdown

Other Tools

/* -*- Mode: js; tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set ts=2 sw=2 sts=2 et: */
/**
* @fileoverview
* Unit test to verify that resources with Cache-Control: no-store, no-cache
* and Cache-Control: no-cache, no-store headers are not saved in the cache.
*/
const { HttpServer } = ChromeUtils.importESModule(
);
let httpServer = null;
function startServer() {
httpServer = new HttpServer();
httpServer.registerPathHandler("/test1", (request, response) => {
response.setHeader("Cache-Control", "no-cache, no-store", false);
response.setHeader("Content-Type", "text/plain", false);
response.write("OK");
});
httpServer.registerPathHandler("/test2", (request, response) => {
response.setHeader("Cache-Control", "no-cache, no-store", false);
response.setHeader("Content-Type", "text/plain", false);
response.write("OK");
});
httpServer.registerPathHandler("/test3", (request, response) => {
response.setHeader("Cache-Control", "no-cache", false);
response.setHeader("Cache-Control", "no-store", false);
response.setHeader("Content-Type", "text/plain", false);
response.write("OK");
});
httpServer.registerPathHandler("/test4", (request, response) => {
response.setHeader("Cache-Control", "no-cache", false);
response.setHeader("Cache-Control", "no-store", false);
response.setHeader("Content-Type", "text/plain", false);
response.write("OK");
});
httpServer.start(-1);
registerCleanupFunction(async () => {
if (httpServer) {
await httpServer.stop();
}
});
return httpServer.identity.primaryPort;
}
add_task(async function test_no_cache_no_store() {
const port = startServer();
const baseURI = `http://localhost:${port}`;
let tests = ["/test1", "/test2", "/test3", "/test4"];
for (let test of tests) {
let uri = baseURI + test;
let channel = NetUtil.newChannel({
uri,
loadUsingSystemPrincipal: true,
});
let buffer = await new Promise(resolve => {
channel.asyncOpen(
new ChannelListener(
(request, buffer) => resolve(buffer),
null,
CL_ALLOW_UNKNOWN_CL
)
);
});
Assert.equal(buffer, "OK", `Received expected content for ${test}`);
let entry = await new Promise(resolve => {
asyncOpenCacheEntry(
uri,
"disk",
Ci.nsICacheStorage.OPEN_READONLY,
null,
(status, entry) => resolve(entry)
);
});
Assert.equal(
entry.persistent,
false,
`${test} should not be persistently cached`
);
}
});