blob: 22d02feaf1d272f13e1143fb5911281effd84703 [file] [log] [blame]
script = '''
var initPromise = Promise.resolve();
if ('SharedWorkerGlobalScope' in self &&
self instanceof SharedWorkerGlobalScope) {
initPromise = new Promise(resolve => {
self.addEventListener('connect', event => {
self.postMessage = msg => { event.ports[0].postMessage(msg); };
resolve();
});
});
}
var info = '';
function importCachedScriptTest() {
return new Promise((resolve, reject) => {
info = '';
try {
importScripts('appcache-worker-import.py?type=cached');
} catch(e) {
reject(new Error('Error while importing the cached script: ' +
e.toString()));
return;
}
if (info != 'Set by the cached script') {
reject(new Error('The cached script was not correctly executed'));
}
resolve();
});
}
function importNotInCacheSciptTest() {
return new Promise((resolve, reject) => {
try {
importScripts('appcache-worker-import.py?type=not-in-cache');
reject(new Error('Importing a non-cached script must fail.'));
} catch(e) {
resolve();
}
});
}
function importFallbackSciptTest() {
return new Promise((resolve, reject) => {
info = '';
try {
importScripts('appcache-worker-import.py?type=fallingback');
} catch(e) {
reject(new Error('Error while importing the fallingback script: ' +
e.toString()));
}
if (info != 'Set by the fallbacked script') {
reject(new Error('The fallingback script was not correctly executed'));
}
resolve();
});
}
function fetchCachedFileTest() {
return fetch('appcache-worker-data.py?type=cached')
.then(res => res.text(),
_ => { throw new Error('Failed to fetch cached file'); })
.then(text => {
if (text != 'cached') {
throw new Error('cached file missmatch');
}
});
}
function fetchNotInCacheFileTest() {
return fetch('appcache-worker-data.py?type=not-in-cache')
.then(_ => { throw new Error('Fetching not-in-cache file must fail'); },
_ => {});
}
function fetchFallbackFileTest() {
return fetch('appcache-worker-data.py?type=fallingback')
.then(res => res.text(),
_ => { throw new Error('Failed to fetch fallingback file'); })
.then(text => {
if (text != 'fallbacked') {
throw new Error('fallbacked file miss match');
}
});
}
initPromise
.then(importCachedScriptTest)
.then(importNotInCacheSciptTest)
.then(importFallbackSciptTest)
.then(fetchCachedFileTest)
.then(fetchNotInCacheFileTest)
.then(_ => postMessage('Done: %s'),
error => postMessage(error.toString()));
'''
def main(request, response):
type = request.GET['type']
if request.GET['type'] == 'fallingback':
return 404, [('Content-Type', 'text/plain')], "Page not found"
return [('Content-Type', 'text/javascript')], script % type