var status = "no status";
var cache;
var worker = self;

async function prepareCache()
{
    status = "opening cache";
    cache = await caches.open("test");
    status = "creating response";
    var response = new Response(new ArrayBuffer(12940), { status: 200, statusText: "OK"});
    status = "filling cache";
    await cache.put("/resources/square100.png", response);
    status = "cache is ready";
}

function statusResponse()
{
    return new Response(null, {status: 200, statusText: status});
}

self.addEventListener("fetch", async (event) => {
    if (event.request.url.indexOf("status") !== -1) {
        event.respondWith(promise.then(statusResponse, statusResponse));
        return;
    }
    if (event.request.url.indexOf("opaqueWithBlob") !== -1) {
        event.respondWith(self.caches.open("opaque").then((cache) => {
            let response = self.internals.createOpaqueWithBlobBodyResponse();
            return cache.put("opaque", response);
        }).then(() => {
            return new Response("PASS");
        }));
        return;
    }
    if (!event.request.url.endsWith(".fromserviceworker")) {
        state = "unknown url";
        event.respondWith(new Response(null, {status: 404, statusText: "Not Found"}));
        return;
    }
    event.respondWith(promise.then(() => {
        status = "opening cache for " + event.request.url.substring(0, event.request.url.length - 18);
        return caches.open("test").then((cache) => {
            status = "matching cache for " + event.request.url.substring(0, event.request.url.length - 18);
            return cache.match(event.request.url.substring(0, event.request.url.length - 18));
        }).then((response) => {
            status = "matched cache for " + event.request.url.substring(0, event.request.url.length - 18);
            return response;
        });
    }));
});
var promise = prepareCache();
