blob: f9693a649f6bd2926dca3f8f0fca3214a3550ad8 [file] [log] [blame]
function get_query_params(url) {
var search = (new URL(url)).search;
if (!search) {
return {};
}
var ret = {};
var params = search.substring(1).split('&');
params.forEach(function(param) {
var element = param.split('=');
ret[decodeURIComponent(element[0])] = decodeURIComponent(element[1]);
});
return ret;
}
function get_request_init(params) {
var init = {};
if (params['method']) {
init['method'] = params['method'];
}
if (params['mode']) {
init['mode'] = params['mode'];
}
if (params['credentials']) {
init['credentials'] = params['credentials'];
}
if (params['redirect-mode']) {
init['redirect'] = params['redirect-mode'];
}
return init;
}
self.addEventListener('fetch', function(event) {
var params = get_query_params(event.request.url);
var init = get_request_init(params);
var url = params['url'];
if (params['ignore']) {
return;
}
if (params['reject']) {
event.respondWith(new Promise(function(resolve, reject) {
reject();
}));
return;
}
if (params['resolve-null']) {
event.respondWith(new Promise(function(resolve) {
resolve(null);
}));
return;
}
if (params['generate-png']) {
var binary = atob(
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAA' +
'RnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAhSURBVDhPY3wro/Kf' +
'gQLABKXJBqMGjBoAAqMGDLwBDAwAEsoCTFWunmQAAAAASUVORK5CYII=');
var array = new Uint8Array(binary.length);
for(var i = 0; i < binary.length; i++) {
array[i] = binary.charCodeAt(i)
};
event.respondWith(new Response(new Blob([array], {type: 'image/png'})));
return;
}
event.respondWith(new Promise(function(resolve, reject) {
var request = event.request;
if (url) {
request = new Request(url, init);
}
fetch(request).then(resolve, reject);
}));
});