Bug 1465670 P3 Fix dom/cache service worker test harness to call importScripts() during install. r=asuth

This commit is contained in:
Ben Kelly 2018-06-05 10:49:12 -07:00
Родитель ba44f4c92d
Коммит 3e9f410d33
2 изменённых файлов: 15 добавлений и 5 удалений

Просмотреть файл

@ -4,8 +4,10 @@
function serviceWorkerTestExec(testFile) { function serviceWorkerTestExec(testFile) {
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
function setupSW(registration) { function setupSW(registration) {
var worker = registration.waiting || var worker = registration.installing ||
registration.waiting ||
registration.active; registration.active;
var iframe;
window.addEventListener("message",function onMessage(event) { window.addEventListener("message",function onMessage(event) {
if (event.data.context != "ServiceWorker") { if (event.data.context != "ServiceWorker") {
@ -13,6 +15,7 @@ function serviceWorkerTestExec(testFile) {
} }
if (event.data.type == 'finish') { if (event.data.type == 'finish') {
window.removeEventListener("message", onMessage); window.removeEventListener("message", onMessage);
iframe.remove();
registration.unregister() registration.unregister()
.then(resolve) .then(resolve)
.catch(reject); .catch(reject);
@ -23,7 +26,7 @@ function serviceWorkerTestExec(testFile) {
worker.onerror = reject; worker.onerror = reject;
var iframe = document.createElement("iframe"); iframe = document.createElement("iframe");
iframe.src = "message_receiver.html"; iframe.src = "message_receiver.html";
iframe.onload = function() { iframe.onload = function() {
worker.postMessage({ script: testFile }); worker.postMessage({ script: testFile });
@ -31,7 +34,7 @@ function serviceWorkerTestExec(testFile) {
document.body.appendChild(iframe); document.body.appendChild(iframe);
} }
navigator.serviceWorker.ready.then(setupSW); navigator.serviceWorker.register("worker_wrapper.js", {scope: "."})
navigator.serviceWorker.register("worker_wrapper.js", {scope: "."}); .then(setupSW);
}); });
} }

9
dom/cache/test/mochitest/worker_wrapper.js поставляемый
Просмотреть файл

@ -92,6 +92,8 @@ function workerTestGetUserAgent(cb) {
}); });
} }
var completeInstall = null;
addEventListener('message', function workerWrapperOnMessage(e) { addEventListener('message', function workerWrapperOnMessage(e) {
removeEventListener('message', workerWrapperOnMessage); removeEventListener('message', workerWrapperOnMessage);
var data = e.data; var data = e.data;
@ -108,7 +110,7 @@ addEventListener('message', function workerWrapperOnMessage(e) {
} }
} }
if ("ServiceWorker" in self) { if ("ServiceWorker" in self) {
self.clients.matchAll().then(function(clients) { self.clients.matchAll({ includeUncontrolled: true }).then(function(clients) {
for (var i = 0; i < clients.length; ++i) { for (var i = 0; i < clients.length; ++i) {
if (clients[i].url.indexOf("message_receiver.html") > -1) { if (clients[i].url.indexOf("message_receiver.html") > -1) {
client = clients[i]; client = clients[i];
@ -120,6 +122,7 @@ addEventListener('message', function workerWrapperOnMessage(e) {
} }
context = "ServiceWorker"; context = "ServiceWorker";
runScript(); runScript();
completeInstall();
}); });
} else { } else {
client = self; client = self;
@ -127,3 +130,7 @@ addEventListener('message', function workerWrapperOnMessage(e) {
runScript(); runScript();
} }
}); });
addEventListener("install", e => {
e.waitUntil(new Promise(resolve => completeInstall = resolve));
})