blob: 55a740753fc3dada4712879bf37aae5dcd53b99f [file] [log] [blame]
self.addEventListener('install', function(event) {
var params = JSON.parse(decodeURIComponent(location.search.substring(1)));
if (!('scopes' in params)) {
if ('relscopes' in params) {
params.scopes = params.relscopes.map(s => registration.scope + s);
} else {
params.scopes = [registration.scope];
}
}
if (!('origins' in params))
params.origins = ['*'];
event.registerForeignFetch(params);
});
function handle_basic(event) {
event.respondWith({response: new Response('Foreign Fetch'), origin: event.origin});
}
function handle_null(event) {
event.respondWith({response: null });
}
function handle_onmessage(event) {
event.respondWith({origin: event.origin, response:
new Response('<script>window.onmessage = e => e.ports[0].postMessage("failed");</script>',
{headers: {'Content-Type': 'text/html'}})});
}
function handle_fallback(event) {
// Do nothing.
}
function handle_fetch(event) {
event.respondWith(
fetch(event.request).then(response => ({response, origin: event.origin})));
}
function handle_meta(event) {
var data = {
origin: event.origin,
referrer: event.request.referrer
};
event.respondWith({response: new Response(JSON.stringify(data)),
origin: event.origin});
}
function handle_script(event) {
event.respondWith({origin: event.origin, response:
new Response('self.DidLoad("Foreign Fetch");')});
}
self.addEventListener('foreignfetch', function(event) {
var url = event.request.url;
var handlers = [
{ pattern: '?basic', fn: handle_basic },
{ pattern: '?null', fn: handle_null },
{ pattern: '?fallback', fn: handle_fallback },
{ pattern: '?fetch', fn: handle_fetch },
{ pattern: '?onmessage', fn: handle_onmessage },
{ pattern: '?meta', fn: handle_meta },
{ pattern: '?script', fn: handle_script }
];
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({origin: event.origin,
response: new Response('unexpected request')});
}
});