// SJS file for CSP frame ancestor mochitests function handleRequest(request, response) { var query = {}; request.queryString.split('&').forEach(function (val) { var [name, value] = val.split('='); query[name] = unescape(value); }); var isPreflight = request.method == "OPTIONS"; //avoid confusing cache behaviors response.setHeader("Cache-Control", "no-cache", false); // grab the desired policy from the query, and then serve a page if (query['csp']) response.setHeader("Content-Security-Policy", unescape(query['csp']), false); if (query['scriptedreport']) { // spit back a script that records that the page loaded response.setHeader("Content-Type", "text/javascript", false); if (query['double']) response.write('window.parent.parent.parent.postMessage({call: "frameLoaded", testname: "' + query['scriptedreport'] + '", uri: "window.location.toString()"}, "*");'); else response.write('window.parent.parent.postMessage({call: "frameLoaded", testname: "' + query['scriptedreport'] + '", uri: "window.location.toString()"}, "*");'); } else if (query['internalframe']) { // spit back an internal iframe (one that might be blocked) response.setHeader("Content-Type", "text/html", false); response.write(''); if (query['double']) response.write(''); else response.write(''); response.write(''); response.write(unescape(query['internalframe'])); response.write(''); } else if (query['externalframe']) { // spit back an internal iframe (one that won't be blocked, and probably // has no CSP) response.setHeader("Content-Type", "text/html", false); response.write(''); response.write(''); response.write(unescape(query['externalframe'])); response.write(''); } else { // default case: error. response.setHeader("Content-Type", "text/html", false); response.write(''); response.write("ERROR: not sure what to serve."); response.write(''); } }