Source code

Revision control

Copy as Markdown

Other Tools

<!--
Any copyright is dedicated to the Public Domain.
-->
<!DOCTYPE HTML>
<html>
<head>
<title>Bug 1058311 - controlled page</title>
<script class="testbody" type="text/javascript">
var re = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
var frameType = "none";
var testWindow = parent;
if (parent != window) {
frameType = "nested";
} else if (opener) {
frameType = "auxiliary";
testWindow = opener;
} else if (parent == window) {
frameType = "top-level";
} else {
postResult(false, "Unexpected frameType");
}
window.onload = function() {
navigator.serviceWorker.ready.then(function(swr) {
// Send a message to our SW that will cause it to do clients.matchAll()
// and send a message *to each client about themselves* (rather than
// replying directly to us with all the clients it finds).
swr.active.postMessage("Start");
});
}
function postResult(result, msg) {
response = {
result,
message: msg
};
testWindow.postMessage(response, "*");
}
navigator.serviceWorker.onmessage = async function(msg) {
// ## Verify the contents of the SW's serialized rep of our client info.
// Clients are opaque identifiers at a spec level, but we want to verify
// that they are UUID's *without wrapping "{}" characters*.
result = re.test(msg.data.id);
postResult(result, "Client id test");
result = msg.data.url == window.location;
postResult(result, "Client url test");
result = msg.data.visibilityState === document.visibilityState;
postResult(result, "Client visibility test. expected=" +document.visibilityState);
result = msg.data.focused === document.hasFocus();
postResult(result, "Client focus test. expected=" + document.hasFocus());
result = msg.data.frameType === frameType;
postResult(result, "Client frameType test. expected=" + frameType);
result = msg.data.type === "window";
postResult(result, "Client type test. expected=window");
// ## Verify the FetchEvent.clientId
// In bug 1446225 it turned out we provided UUID's wrapped with {}'s. We
// now also get coverage by forcing our clients.get() to forbid UUIDs
// with that form.
const clientIdResp = await fetch('clientId');
const fetchClientId = await clientIdResp.text();
result = re.test(fetchClientId);
postResult(result, "Fetch clientId test");
postResult(true, "DONE");
window.close();
};
</script>
</head>
<body>
</body>
</html>