blob: af31b386c98be5578f28e1273fa9003395ce209b [file] [log] [blame]
async function test()
{
var urlResults = new Array;
var statusResults = new Array;
var headerResults = new Array;
function finishThisTest()
{
for (var i = 0; i < urlResults.length; ++i) {
log("URL " + i + " - " + urlResults[i]);
log("Status code " + i + " - " + statusResults[i]);
log("Source' header " + i + " - " + headerResults[i]);
}
finishSWTest();
}
try {
var frame = await interceptedFrame("resources/basic-timeout-worker.js", "/workers/service/resources/");
var fetch = frame.contentWindow.fetch;
if (window.testRunner)
testRunner.setServiceWorkerFetchTimeout(0);
// The following two fetches should time out immediately
fetch("timeout-fallback.html").then(function(response) {
urlResults[0] = response.url;
statusResults[0] = response.status;
headerResults[0] = response.headers.get("Source");
}, function(error) {
log(error);
});
fetch("timeout-no-fallback.html").then(function(response) {
urlResults[1] = response.url;
statusResults[1] = response.status;
headerResults[1] = response.headers.get("Source");
}, function(error) {
log(error);
});
if (window.testRunner)
testRunner.setServiceWorkerFetchTimeout(60);
// The service worker knows how to handle the following fetch *and* has 60 seconds to do so.
// But will be cancelled with the above fetches since we're terminating the service worker, and
// therefore it will then fallback to the network.
fetch("succeed-fallback-check.py").then(function(response) {
urlResults[2] = response.url;
statusResults[2] = response.status;
headerResults[2] = response.headers.get("Source");
setTimeout(checkSuccessAgain, 0);
}, function(error) {
log(error);
finishSWTest();
});
// Now we can fetch that same URL again, which *could* relaunch the service worker and handle it there, but for now this service worker registration is inert and fetches through it will go to the network instead.
// I'm leaving this in to cover future cases where we do relaunch the SW to handle it.
function checkSuccessAgain() {
fetch("succeed-fallback-check.py").then(function(response) {
urlResults[3] = response.url;
statusResults[3] = response.status;
headerResults[3] = response.headers.get("Source");
finishThisTest();
}, function(error) {
log(error);
finishSWTest();
});
}
} catch(e) {
log("Got exception: " + e);
finishSWTest();
}
}
test();