<!DOCTYPE html>
<title>Ensures that prefetch respects HTTP cache semantics</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/utils.js"></script>
<script src="resources/prefetch-helper.js"></script>
<body>
<script>

async function prefetch_and_count(cacheControl, t) {
    const {href} = await prefetch({
        "cache-control": cacheControl,
        "type": "application/javascript",
        content: "/**/"}, t);
    const script = document.createElement("script");
    script.src = href;
    t.add_cleanup(() => script.remove());
    const loaded = new Promise(resolve => script.addEventListener("load", resolve));
    document.body.appendChild(script);
    await loaded;
    const info = await get_prefetch_info(href);
    return info.length;
}

promise_test(async t => {
    const result = await prefetch_and_count("max-age=604800", t);
    assert_equals(result, 1);
}, "Prefetch should populate the HTTP cache");

for (const cacheControl of ["no-cache", "no-store", "max-age=0"]) {
    promise_test(async t => {
        const result = await prefetch_and_count(cacheControl, t);
        assert_equals(result, 2);
    }, `Prefetch should respect cache-control: ${cacheControl}`);
}
</script>
</body>