3 Tests the Cache-control: stale-while-revalidate response directive.
5 Purpose is to check we DON'T perform the background revalidation when we make the
6 request past the reval window.
9 - response is from the server and version=1
10 - max-age=1, stale-while-revalidate=1
11 * Switch version of the data on the server.
12 * Make request #2 in 3 seconds (entry should be expired by that time and no longer
13 fall into the reval window.)
14 - response is from the server, version=2
21 const { HttpServer
} = ChromeUtils
.importESModule(
22 "resource://testing-common/httpd.sys.mjs"
27 let generate_response
= ver
=> `response version=${ver}`;
29 function test_handler(metadata
, response
) {
30 const originalBody
= generate_response(version
);
31 response
.setHeader("Content-Type", "text/html", false);
34 `max-age=${max_age}, stale-while-revalidate=1`,
37 response
.setStatusLine(metadata
.httpVersion
, 200, "OK");
38 response
.bodyOutputStream
.write(originalBody
, originalBody
.length
);
41 function make_channel(url
) {
42 return NetUtil
.newChannel({
44 loadUsingSystemPrincipal
: true,
45 }).QueryInterface(Ci
.nsIHttpChannel
);
48 async
function get_response(channel
, fromCache
) {
49 return new Promise(resolve
=> {
51 new ChannelListener((request
, buffer
, ctx
, isFromCache
) => {
55 `got response from cache = ${fromCache}`
63 async
function sleep(time
) {
64 return new Promise(resolve
=> {
65 do_timeout(time
* 1000, resolve
);
69 async
function stop_server(httpserver
) {
70 return new Promise(resolve
=> {
71 httpserver
.stop(resolve
);
75 add_task(async
function () {
76 let httpserver
= new HttpServer();
77 httpserver
.registerPathHandler("/testdir", test_handler
);
79 const PORT
= httpserver
.identity
.primaryPort
;
80 const URI
= `http://localhost:${PORT}/testdir`;
86 response
= await
get_response(make_channel(URI
), false);
87 Assert
.equal(response
, generate_response(1), "got response ver 1");
89 await
sleep(max_age
+ 1 /* stale window */ + 1 /* to expire the window */);
92 response
= await
get_response(make_channel(URI
), false);
93 Assert
.equal(response
, generate_response(2), "got response ver 2");
95 await
stop_server(httpserver
);