summaryrefslogtreecommitdiffstats
path: root/dom/security/test/csp/file_main.js
blob: d5afe580f1b518b65d5ed65b370df7f84cc6bd2d (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
41
42
43
44
45
46
47
48
49
50
51
function doXHR(uri, callback) {
  try {
    var xhr = new XMLHttpRequest();
    xhr.open("GET", uri);
    xhr.responseType = "blob";
    xhr.send();
    xhr.onload = function () {
      if (callback) callback(xhr.response);
    }
  } catch(ex) {}
}

doXHR("http://mochi.test:8888/tests/dom/security/test/csp/file_CSP.sjs?testid=xhr_good");
doXHR("http://example.com/tests/dom/security/test/csp/file_CSP.sjs?testid=xhr_bad");
fetch("http://mochi.test:8888/tests/dom/security/test/csp/file_CSP.sjs?testid=fetch_good");
fetch("http://example.com/tests/dom/security/test/csp/file_CSP.sjs?testid=fetch_bad");
navigator.sendBeacon("http://mochi.test:8888/tests/dom/security/test/csp/file_CSP.sjs?testid=beacon_good");
navigator.sendBeacon("http://example.com/tests/dom/security/test/csp/file_CSP.sjs?testid=beacon_bad");

var topWorkerBlob;
var nestedWorkerBlob;

doXHR("file_main_worker.js", function (topResponse) {
  topWorkerBlob = URL.createObjectURL(topResponse);
  doXHR("file_child_worker.js", function (response) {
    nestedWorkerBlob = URL.createObjectURL(response);
    runWorker();
  });
});

function runWorker() {
  // Top level worker, no subworker
  // Worker does not inherit CSP from owner document
  new Worker("file_main_worker.js").postMessage({inherited : "none"});

  // Top level worker, no subworker
  // Worker inherits CSP from owner document
  new Worker(topWorkerBlob).postMessage({inherited : "document"});

  // Subworker
  // Worker does not inherit CSP from parent worker
  new Worker("file_main_worker.js").postMessage({inherited : "none", nested : nestedWorkerBlob});

  // Subworker
  // Worker inherits CSP from parent worker
  new Worker("file_main_worker.js").postMessage({inherited : "parent", nested : nestedWorkerBlob});

  // Subworker
  // Worker inherits CSP from owner document -> parent worker -> subworker
  new Worker(topWorkerBlob).postMessage({inherited : "document", nested : nestedWorkerBlob});
}