1 // This helper expects these globals to be defined.
2 /* global PARAMS, SJS, testCases */
5 * common functionality for iframe, anchor, and area referrer attribute tests
7 const GET_RESULT = SJS + "ACTION=get-test-results";
8 const RESET_STATE = SJS + "ACTION=resetState";
10 SimpleTest.waitForExplicitFinish();
11 var advance = function() {
16 * Listen for notifications from the child.
17 * These are sent in case of error, or when the loads we await have completed.
19 window.addEventListener("message", function(event) {
20 if (event.data == "childLoadComplete") {
21 // all loads happen, continue the test.
27 * helper to perform an XHR
28 * to do checkIndividualResults and resetState
30 function doXHR(aUrl, onSuccess, onFail) {
31 // The server is at http[s]://example.com so we need cross-origin XHR.
32 var xhr = new XMLHttpRequest({ mozSystem: true });
33 xhr.responseType = "json";
34 xhr.onload = function() {
37 xhr.onerror = function() {
40 xhr.open("GET", "http" + aUrl, true);
45 * Grabs the results via XHR and passes to checker.
47 function checkIndividualResults(aTestname, aExpectedReferrer, aName) {
49 var results = xhr.response;
50 info(JSON.stringify(xhr.response));
51 ok(aName in results, aName + " tests have to be performed.");
53 results[aName].policy,
57 results[aName].policy +
59 results[aName].referrer +
64 var onerror = xhr => {
65 ok(false, "Can't get results from the counter server.");
68 doXHR(GET_RESULT, onload, onerror);
71 function resetState() {
72 doXHR(RESET_STATE, advance, function(xhr) {
73 ok(false, "error in reset state");
79 * testing if referrer header is sent correctly
81 var tests = (function*() {
82 yield SpecialPowers.pushPrefEnv(
83 { set: [["network.preload", true]] },
86 yield SpecialPowers.pushPrefEnv(
87 { set: [["security.mixed_content.block_active_content", false]] },
90 yield SpecialPowers.pushPermissions(
91 [{ type: "systemXHR", allow: true, context: document }],
95 var iframe = document.getElementById("testframe");
97 for (var j = 0; j < testCases.length; j++) {
98 if (testCases[j].PREFS) {
99 yield SpecialPowers.pushPrefEnv({ set: testCases[j].PREFS }, advance);
102 var actions = testCases[j].ACTION;
103 var subTests = testCases[j].TESTS;
104 for (var k = 0; k < actions.length; k++) {
105 var actionString = actions[k];
106 for (var i = 0; i < subTests.length; i++) {
108 var searchParams = new URLSearchParams();
109 searchParams.append("ACTION", actionString);
110 searchParams.append("NAME", subTests[i].NAME);
111 for (var l of PARAMS) {
112 if (subTests[i][l]) {
113 searchParams.append(l, subTests[i][l]);
116 var schemeFrom = subTests[i].SCHEME_FROM || "http";
117 yield (iframe.src = schemeFrom + SJS + searchParams.toString());
118 yield checkIndividualResults(