blob: f375c40e8e8c5a0b95be08c8435263debb56e08a [file] [log] [blame]
function handleString(event) {
event.respondWith(new Response('Test string'));
}
function handleBlob(event) {
event.respondWith(new Response(new Blob(['Test blob'])));
}
function handleReferrer(event) {
event.respondWith(new Response(new Blob(
['Referrer: ' + event.request.referrer])));
}
function handleClientId(event) {
var body;
if (event.clientId !== null) {
body = 'Client ID Found: ' + event.clientId;
} else {
body = 'Client ID Not Found';
}
event.respondWith(new Response(body));
}
function handleNullBody(event) {
event.respondWith(new Response());
}
function handleFetch(event) {
event.respondWith(fetch('other.html'));
}
function handleFormPost(event) {
event.respondWith(new Promise(function(resolve) {
event.request.text()
.then(function(result) {
resolve(new Response(event.request.method + ':' +
event.request.headers.get('Content-Type') + ':' +
result));
});
}));
}
function handleMultipleRespondWith(event) {
var logForMultipleRespondWith = '';
for (var i = 0; i < 3; ++i) {
logForMultipleRespondWith += '(' + i + ')';
try {
event.respondWith(new Promise(function(resolve) {
setTimeout(function() {
resolve(new Response(logForMultipleRespondWith));
}, 0);
}));
} catch (e) {
logForMultipleRespondWith += '[' + e.name + ']';
}
}
}
var lastResponseForUsedCheck = undefined;
function handleUsedCheck(event) {
if (!lastResponseForUsedCheck) {
event.respondWith(fetch('other.html').then(function(response) {
lastResponseForUsedCheck = response;
return response;
}));
} else {
event.respondWith(new Response(
'bodyUsed: ' + lastResponseForUsedCheck.bodyUsed));
}
}
function handleHeaders(event) {
const headers = Array.from(event.request.headers);
event.respondWith(new Response(JSON.stringify(headers)));
}
self.addEventListener('fetch', function(event) {
var url = event.request.url;
var handlers = [
{ pattern: '?string', fn: handleString },
{ pattern: '?blob', fn: handleBlob },
{ pattern: '?referrer', fn: handleReferrer },
{ pattern: '?clientId', fn: handleClientId },
{ pattern: '?ignore', fn: function() {} },
{ pattern: '?null', fn: handleNullBody },
{ pattern: '?fetch', fn: handleFetch },
{ pattern: '?form-post', fn: handleFormPost },
{ pattern: '?multiple-respond-with', fn: handleMultipleRespondWith },
{ pattern: '?used-check', fn: handleUsedCheck },
{ pattern: '?headers', fn: handleHeaders }
];
var handler = null;
for (var i = 0; i < handlers.length; ++i) {
if (url.indexOf(handlers[i].pattern) != -1) {
handler = handlers[i];
break;
}
}
if (handler) {
handler.fn(event);
} else {
event.respondWith(new Response(new Blob(
['Service Worker got an unexpected request: ' + url])));
}
});