// Any copyright is dedicated to the Public Domain. // http://creativecommons.org/publicdomain/zero/1.0/ function serviceWorkerTestExec(testFile) { return new Promise(function (resolve, reject) { function setupSW(registration) { var worker = registration.installing || registration.waiting || registration.active; var iframe; window.addEventListener("message", function onMessage(event) { if (event.data.context != "ServiceWorker") { return; } if (event.data.type == "finish") { window.removeEventListener("message", onMessage); iframe.remove(); registration.unregister().then(resolve).catch(reject); } else if (event.data.type == "status") { ok(event.data.status, event.data.context + ": " + event.data.msg); } }); worker.onerror = reject; iframe = document.createElement("iframe"); iframe.src = "message_receiver.html"; iframe.onload = function () { worker.postMessage({ script: testFile }); }; document.body.appendChild(iframe); } navigator.serviceWorker .register("worker_wrapper.js", { scope: "." }) .then(setupSW); }); }