Bug 1147699 - Part 9: Add tests for FetchEvent.request.context when intercepting embeds and objects; r=nsm

This commit is contained in:
Ehsan Akhgari 2015-03-26 14:49:20 -04:00
parent 3ccccb6763
commit dd3079f0ba
2 changed files with 48 additions and 7 deletions

View File

@ -33,13 +33,11 @@ self.addEventListener("fetch", function(event) {
event.respondWith(fetch(event.request)); event.respondWith(fetch(event.request));
} }
} else if (event.request.url.indexOf("csp-report.sjs") >= 0) { } else if (event.request.url.indexOf("csp-report.sjs") >= 0) {
event.respondWith(clients.matchAll() respondToServiceWorker(event, "csp-report");
.then(function(clients) { } else if (event.request.url.indexOf("embed") >= 0) {
clients.forEach(function(c) { respondToServiceWorker(event, "embed");
c.postMessage({data: "csp-report", context: event.request.context}); } else if (event.request.url.indexOf("object") >= 0) {
}); respondToServiceWorker(event, "object");
return new Response("ack");
}));
} }
// Fail any request that we don't know about. // Fail any request that we don't know about.
try { try {
@ -49,3 +47,13 @@ self.addEventListener("fetch", function(event) {
// code above has called respondWith too. // code above has called respondWith too.
} }
}); });
function respondToServiceWorker(event, data) {
event.respondWith(clients.matchAll()
.then(function(clients) {
clients.forEach(function(c) {
c.postMessage({data: data, context: event.request.context});
});
return new Response("ack");
}));
}

View File

@ -110,6 +110,37 @@
}); });
} }
function testEmbed() {
return new Promise(function(resolve, reject) {
var embed = document.createElement("embed");
embed.src = "embed";
document.documentElement.appendChild(embed);
navigator.serviceWorker.addEventListener("message", function onMessage(e) {
if (e.data.data == "embed") {
// FIXME: Bug 1148030: This should be "embed".
is(e.data.context, "object", "Expected the object context on an embed");
navigator.serviceWorker.removeEventListener("message", onMessage);
resolve();
}
}, false);
});
}
function testObject() {
return new Promise(function(resolve, reject) {
var object = document.createElement("object");
object.data = "object";
document.documentElement.appendChild(object);
navigator.serviceWorker.addEventListener("message", function onMessage(e) {
if (e.data.data == "object") {
is(e.data.context, "object", "Expected the object context on an object");
navigator.serviceWorker.removeEventListener("message", onMessage);
resolve();
}
}, false);
});
}
Promise.all([ Promise.all([
testFetch(), testFetch(),
testImage(), testImage(),
@ -119,6 +150,8 @@
testVideo(), testVideo(),
testBeacon(), testBeacon(),
testCSPReport(), testCSPReport(),
testEmbed(),
testObject(),
]) ])
.then(function() { .then(function() {
finish(); finish();