summaryrefslogtreecommitdiffstats
path: root/dom/tests/mochitest/general/frameStorageNullprincipal.sjs
blob: 7dfdc32d1ee9d2d3c612d06f6c3b1384bac62f2d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// This is a sjs file which reads in frameStoragePrevented.html, and writes it out as a data: URI, which this page redirects to.
// This produces a URI with the null principal, which should be unable to access storage.
// We append the #nullprincipal hash to the end of the data: URI to tell the script that it shouldn't try to spawn a webworker,
// as it won't be allowed to, as it has a null principal.

function handleRequest(request, response) {
  // Get the nsIFile for frameStoragePrevented.html
  var file;
  getObjectState("SERVER_ROOT", function (serverRoot) {
    file = serverRoot.getFile(
      "/tests/dom/tests/mochitest/general/frameStoragePrevented.html"
    );
  });

  // Set up the file streams to read in the file as UTF-8
  let fstream = Components.classes[
    "@mozilla.org/network/file-input-stream;1"
  ].createInstance(Components.interfaces.nsIFileInputStream);
  fstream.init(file, -1, 0, 0);
  let cstream = Components.classes[
    "@mozilla.org/intl/converter-input-stream;1"
  ].createInstance(Components.interfaces.nsIConverterInputStream);
  cstream.init(fstream, "UTF-8", 0, 0);

  // Read in the file, and concatenate it onto the data string
  let data = "";
  let str = {};
  let read = 0;
  do {
    read = cstream.readString(0xffffffff, str);
    data += str.value;
  } while (read != 0);

  // Write out the file as a data: URI, and redirect to it
  response.setStatusLine("1.1", 302, "Found");
  response.setHeader(
    "Location",
    "data:text/html," + encodeURIComponent(data) + "#nullprincipal"
  );
}