file_bug910139.sjs (1615B)
1 // Server side js file for bug 910139, see file test_bug910139.html for details. 2 3 const { NetUtil } = ChromeUtils.importESModule( 4 "resource://gre/modules/NetUtil.sys.mjs" 5 ); 6 7 function loadResponseFromFile(path) { 8 var testHTMLFile = Cc["@mozilla.org/file/directory_service;1"] 9 .getService(Ci.nsIProperties) 10 .get("CurWorkD", Ci.nsIFile); 11 var dirs = path.split("/"); 12 for (var i = 0; i < dirs.length; i++) { 13 testHTMLFile.append(dirs[i]); 14 } 15 var testHTMLFileStream = Cc[ 16 "@mozilla.org/network/file-input-stream;1" 17 ].createInstance(Ci.nsIFileInputStream); 18 testHTMLFileStream.init(testHTMLFile, -1, 0, 0); 19 var testHTML = NetUtil.readInputStreamToString( 20 testHTMLFileStream, 21 testHTMLFileStream.available() 22 ); 23 return testHTML; 24 } 25 26 var policies = [ 27 "default-src 'self'; script-src 'self'", // CSP for checkAllowed 28 "default-src 'self'; script-src *.example.com", // CSP for checkBlocked 29 ]; 30 31 function getPolicy() { 32 var index; 33 // setState only accepts strings as arguments 34 if (!getState("counter")) { 35 index = 0; 36 setState("counter", index.toString()); 37 } else { 38 index = parseInt(getState("counter")); 39 ++index; 40 setState("counter", index.toString()); 41 } 42 return policies[index]; 43 } 44 45 function handleRequest(request, response) { 46 // avoid confusing cache behaviors 47 response.setHeader("Cache-Control", "no-cache", false); 48 49 // set the required CSP 50 response.setHeader("Content-Security-Policy", getPolicy(), false); 51 52 // return the requested XML file. 53 response.write( 54 loadResponseFromFile("tests/dom/security/test/csp/file_bug910139.xml") 55 ); 56 }