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