// META: global=window,worker
// META: title=HTTP Cache - Freshness
// META: timeout=long
// META: script=/common/utils.js
// META: script=/common/get-host-info.sub.js
// META: script=http-cache.js
var tests = [
// response directives
{
name: "HTTP cache reuses a response with a future Expires",
requests: [
{
response_headers: [
["Expires", (30 * 24 * 60 * 60)]
]
},
{
expected_type: "cached"
}
]
},
{
name: "HTTP cache does not reuse a response with a past Expires",
requests: [
{
response_headers: [
["Expires", (-30 * 24 * 60 * 60)]
]
},
{
expected_type: "not_cached"
}
]
},
{
name: "HTTP cache does not reuse a response with a present Expires",
requests: [
{
response_headers: [
["Expires", 0]
]
},
{
expected_type: "not_cached"
}
]
},
{
name: "HTTP cache does not reuse a response with an invalid Expires",
requests: [
{
response_headers: [
["Expires", "0"]
]
},
{
expected_type: "not_cached"
}
]
},
{
name: "HTTP cache does not reuse a response with an invalid Expires with Last-Modified now",
requests: [
{
response_headers: [
["Expires", "0"],
['Last-Modified', 0]
]
},
{
expected_type: "not_cached"
}
]
},
{
name: "HTTP cache does not reuse a response with an invalid Expires with past Last-Modified",
requests: [
{
response_headers: [
["Expires", "0"],
['Last-Modified', -100000]
]
},
{
expected_type: "not_cached"
}
]
},
{
name: "HTTP cache reuses a response with positive Cache-Control: max-age",
requests: [
{
response_headers: [
["Cache-Control", "max-age=3600"]
]
},
{
expected_type: "cached"
}
]
},
{
name: "HTTP cache does not reuse a response with Cache-Control: max-age=0",
requests: [
{
response_headers: [
["Cache-Control", "max-age=0"]
]
},
{
expected_type: "not_cached"
}
]
},
{
name: "HTTP cache reuses a response with positive Cache-Control: max-age and a past Expires",
requests: [
{
response_headers: [
["Cache-Control", "max-age=3600"],
["Expires", -10000]
]
},
{
expected_type: "cached"
}
]
},
{
name: "HTTP cache reuses a response with positive Cache-Control: max-age and an invalid Expires",
requests: [
{
response_headers: [
["Cache-Control", "max-age=3600"],
["Expires", "0"]
]
},
{
expected_type: "cached"
}
]
},
{
name: "HTTP cache does not reuse a response with Cache-Control: max-age=0 and a future Expires",
requests: [
{
response_headers: [
["Cache-Control", "max-age=0"],
["Expires", 10000]
]
},
{
expected_type: "not_cached"
}
]
},
{
name: "HTTP cache does not prefer Cache-Control: s-maxage over Cache-Control: max-age",
requests: [
{
response_headers: [
["Cache-Control", "max-age=1, s-maxage=3600"]
],
pause_after: true,
},
{
expected_type: "not_cached"
}
]
},
{
name: "HTTP cache does not reuse a response when the Age header is greater than its freshness lifetime",
requests: [
{
response_headers: [
["Cache-Control", "max-age=3600"],
["Age", "12000"]
],
},
{
expected_type: "not_cached"
}
]
},
{
name: "HTTP cache does not store a response with Cache-Control: no-store",
requests: [
{
response_headers: [
["Cache-Control", "no-store"]
]
},
{
expected_type: "not_cached"
}
]
},
{
name: "HTTP cache does not store a response with Cache-Control: no-store, even with max-age and Expires",
requests: [
{
response_headers: [
["Cache-Control", "max-age=10000, no-store"],
["Expires", 10000]
]
},
{
expected_type: "not_cached"
}
]
},
{
name: "HTTP cache stores a response with Cache-Control: no-cache, but revalidates upon use",
requests: [
{
response_headers: [
["Cache-Control", "no-cache"],
["ETag", "abcd"]
]
},
{
expected_type: "etag_validated"
}
]
},
{
name: "HTTP cache stores a response with Cache-Control: no-cache, but revalidates upon use, even with max-age and Expires",
requests: [
{
response_headers: [
["Cache-Control", "max-age=10000, no-cache"],
["Expires", 10000],
["ETag", "abcd"]
]
},
{
expected_type: "etag_validated"
}
]
},
];
run_tests(tests);