file_frameancestors.sjs (2419B)
1 // SJS file for CSP frame ancestor mochitests 2 function handleRequest(request, response) { 3 var query = {}; 4 request.queryString.split("&").forEach(function (val) { 5 var [name, value] = val.split("="); 6 query[name] = unescape(value); 7 }); 8 9 var isPreflight = request.method == "OPTIONS"; 10 11 //avoid confusing cache behaviors 12 response.setHeader("Cache-Control", "no-cache", false); 13 14 // grab the desired policy from the query, and then serve a page 15 if (query.csp) { 16 response.setHeader("Content-Security-Policy", unescape(query.csp), false); 17 } 18 if (query.scriptedreport) { 19 // spit back a script that records that the page loaded 20 response.setHeader("Content-Type", "text/javascript", false); 21 if (query.double) { 22 response.write( 23 'window.parent.parent.parent.postMessage({call: "frameLoaded", testname: "' + 24 query.scriptedreport + 25 '", uri: "window.location.toString()"}, "*");' 26 ); 27 } else { 28 response.write( 29 'window.parent.parent.postMessage({call: "frameLoaded", testname: "' + 30 query.scriptedreport + 31 '", uri: "window.location.toString()"}, "*");' 32 ); 33 } 34 } else if (query.internalframe) { 35 // spit back an internal iframe (one that might be blocked) 36 response.setHeader("Content-Type", "text/html", false); 37 response.write("<html><head>"); 38 if (query.double) { 39 response.write( 40 '<script src="file_frameancestors.sjs?double=1&scriptedreport=' + 41 query.testid + 42 '"></script>' 43 ); 44 } else { 45 response.write( 46 '<script src="file_frameancestors.sjs?scriptedreport=' + 47 query.testid + 48 '"></script>' 49 ); 50 } 51 response.write("</head><body>"); 52 response.write(unescape(query.internalframe)); 53 response.write("</body></html>"); 54 } else if (query.externalframe) { 55 // spit back an internal iframe (one that won't be blocked, and probably 56 // has no CSP) 57 response.setHeader("Content-Type", "text/html", false); 58 response.write("<html><head>"); 59 response.write("</head><body>"); 60 response.write(unescape(query.externalframe)); 61 response.write("</body></html>"); 62 } else { 63 // default case: error. 64 response.setHeader("Content-Type", "text/html", false); 65 response.write("<html><body>"); 66 response.write("ERROR: not sure what to serve."); 67 response.write("</body></html>"); 68 } 69 }