88 lines
2.6 KiB
JavaScript
88 lines
2.6 KiB
JavaScript
/* -*- 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(
|
|
"resource://testing-common/httpd.sys.mjs"
|
|
);
|
|
|
|
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`
|
|
);
|
|
}
|
|
});
|