Bug 1686668 [wpt PR 27185] - Update wpt metadata, a=testonly
[gecko.git] / dom / base / test / referrer_helper.js
blob78bb9ac14571733cebf0605114c1a86ab25e4524
1 // This helper expects these globals to be defined.
2 /* global PARAMS, SJS, testCases */
4 /*
5  * common functionality for iframe, anchor, and area referrer attribute tests
6  */
7 const GET_RESULT = SJS + "ACTION=get-test-results";
8 const RESET_STATE = SJS + "ACTION=resetState";
10 SimpleTest.waitForExplicitFinish();
11 var advance = function() {
12   tests.next();
15 /**
16  * Listen for notifications from the child.
17  * These are sent in case of error, or when the loads we await have completed.
18  */
19 window.addEventListener("message", function(event) {
20   if (event.data == "childLoadComplete") {
21     // all loads happen, continue the test.
22     advance();
23   }
24 });
26 /**
27  * helper to perform an XHR
28  * to do checkIndividualResults and resetState
29  */
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() {
35     onSuccess(xhr);
36   };
37   xhr.onerror = function() {
38     onFail(xhr);
39   };
40   xhr.open("GET", "http" + aUrl, true);
41   xhr.send(null);
44 /**
45  * Grabs the results via XHR and passes to checker.
46  */
47 function checkIndividualResults(aTestname, aExpectedReferrer, aName) {
48   var onload = xhr => {
49     var results = xhr.response;
50     info(JSON.stringify(xhr.response));
51     ok(aName in results, aName + " tests have to be performed.");
52     is(
53       results[aName].policy,
54       aExpectedReferrer,
55       aTestname +
56         " --- " +
57         results[aName].policy +
58         " (" +
59         results[aName].referrer +
60         ")"
61     );
62     advance();
63   };
64   var onerror = xhr => {
65     ok(false, "Can't get results from the counter server.");
66     SimpleTest.finish();
67   };
68   doXHR(GET_RESULT, onload, onerror);
71 function resetState() {
72   doXHR(RESET_STATE, advance, function(xhr) {
73     ok(false, "error in reset state");
74     SimpleTest.finish();
75   });
78 /**
79  * testing if referrer header is sent correctly
80  */
81 var tests = (function*() {
82   yield SpecialPowers.pushPrefEnv(
83     { set: [["network.preload", true]] },
84     advance
85   );
86   yield SpecialPowers.pushPrefEnv(
87     { set: [["security.mixed_content.block_active_content", false]] },
88     advance
89   );
90   yield SpecialPowers.pushPermissions(
91     [{ type: "systemXHR", allow: true, context: document }],
92     advance
93   );
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);
100     }
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++) {
107         yield resetState();
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]);
114           }
115         }
116         var schemeFrom = subTests[i].SCHEME_FROM || "http";
117         yield (iframe.src = schemeFrom + SJS + searchParams.toString());
118         yield checkIndividualResults(
119           subTests[i].DESC,
120           subTests[i].RESULT,
121           subTests[i].NAME
122         );
123       }
124     }
125   }
127   // complete.
128   SimpleTest.finish();
129 })();