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));
}
} else if (event.request.url.indexOf("csp-report.sjs") >= 0) {
event.respondWith(clients.matchAll()
.then(function(clients) {
clients.forEach(function(c) {
c.postMessage({data: "csp-report", context: event.request.context});
});
return new Response("ack");
}));
respondToServiceWorker(event, "csp-report");
} else if (event.request.url.indexOf("embed") >= 0) {
respondToServiceWorker(event, "embed");
} else if (event.request.url.indexOf("object") >= 0) {
respondToServiceWorker(event, "object");
}
// Fail any request that we don't know about.
try {
@ -49,3 +47,13 @@ self.addEventListener("fetch", function(event) {
// 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([
testFetch(),
testImage(),
@ -119,6 +150,8 @@
testVideo(),
testBeacon(),
testCSPReport(),
testEmbed(),
testObject(),
])
.then(function() {
finish();