client.sjs (2177B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 const RESPONSE = ` 5 <!DOCTYPE HTML> 6 <html> 7 <head> 8 <title>Bug 1172870 - page opened by ServiceWorkerClients.OpenWindow</title> 9 </head> 10 <body> 11 <p id="display"></p> 12 <div id="content" style="display: none"></div> 13 <pre id="test"></pre> 14 <h1>client.sjs</h1> 15 <script class="testbody" type="text/javascript"> 16 17 window.onload = function() { 18 if (document.domain === "example.com") { 19 navigator.serviceWorker.ready.then(function(result) { 20 navigator.serviceWorker.onmessage = function(event) { 21 if (event.data !== "CLOSE") { 22 dump("ERROR: unexepected reply from the service worker.\\n"); 23 } 24 if (parent) { 25 parent.postMessage("CLOSE", "*"); 26 } 27 window.close(); 28 } 29 30 let message = window.crossOriginIsolated ? "NEW_ISOLATED_WINDOW" : "NEW_WINDOW"; 31 navigator.serviceWorker.controller.postMessage(message); 32 }) 33 } else { 34 window.onmessage = function(event) { 35 if (event.data !== "CLOSE") { 36 dump("ERROR: unexepected reply from the iframe.\\n"); 37 } 38 window.close(); 39 } 40 41 var iframe = document.createElement('iframe'); 42 iframe.src = "https://example.com/tests/dom/notification/test/mochitest/open_window/client.sjs"; 43 document.body.appendChild(iframe); 44 } 45 } 46 47 </script> 48 </pre> 49 </body> 50 </html> 51 `; 52 53 function handleRequest(request, response) { 54 let query = new URLSearchParams(request.queryString); 55 56 // If the request has been marked to be isolated with COOP+COEP, set the appropriate headers. 57 if (query.get("crossOriginIsolated") == "true") { 58 response.setHeader("Cross-Origin-Opener-Policy", "same-origin", false); 59 } 60 61 // Always set the COEP and CORP headers, so that this document can be framed 62 // by a document which has also set COEP to require-corp. 63 response.setHeader("Cross-Origin-Embedder-Policy", "require-corp", false); 64 response.setHeader("Cross-Origin-Resource-Policy", "cross-origin", false); 65 66 response.setHeader("Content-Type", "text/html", false); 67 response.write(RESPONSE); 68 }