Backed out changeset 2450366cf7ca (bug 1891629) for causing win msix mochitest failures
[gecko.git] / dom / base / test / referrerHelper.js
blobda3097b849343352b34f1cf3ea2cd426dc0307f1
1 /**
2  * Listen for notifications from the child.
3  * These are sent in case of error, or when the loads we await have completed.
4  */
5 window.addEventListener("message", function (event) {
6   if (event.data == "childLoadComplete") {
7     // all loads happen, continue the test.
8     advance();
9   } else if (event.data == "childOverload") {
10     // too many loads happened in a test frame, abort.
11     ok(false, "Too many load handlers called in test.");
12     SimpleTest.finish();
13   } else if (event.data.indexOf("fail-") == 0) {
14     // something else failed in the test frame, abort.
15     ok(false, "Child failed the test with error " + event.data.substr(5));
16     SimpleTest.finish();
17   }
18 });
20 /**
21  * helper to perform an XHR.
22  */
23 function doXHR(url, onSuccess, onFail) {
24   var xhr = new XMLHttpRequest();
25   xhr.onload = function () {
26     if (xhr.status == 200) {
27       onSuccess(xhr);
28     } else {
29       onFail(xhr);
30     }
31   };
32   xhr.open("GET", url, true);
33   xhr.send(null);
36 /**
37  * This triggers state-resetting on the counter server.
38  */
39 function resetCounter() {
40   doXHR(
41     "/tests/dom/base/test/bug704320_counter.sjs?reset",
42     advance,
43     function (xhr) {
44       ok(false, "Need to be able to reset the request counter");
45       SimpleTest.finish();
46     }
47   );
50 /**
51  * Grabs the results via XHR and passes to checker.
52  */
53 function checkIndividualResults(testname, expected) {
54   doXHR(
55     "/tests/dom/base/test/bug704320_counter.sjs?results",
56     function (xhr) {
57       var results = JSON.parse(xhr.responseText);
58       info(xhr.responseText);
60       ok(
61         "img" in results,
62         testname + " test: some image loads required in results object."
63       );
64       is(
65         results.img.count,
66         2,
67         testname + " Test: Expected 2 loads for image requests."
68       );
70       expected.forEach(function (ref) {
71         ok(
72           results.img.referrers.includes(ref),
73           testname +
74             " Test: Expected " +
75             ref +
76             " referrer policy in test, results were " +
77             JSON.stringify(results.img.referrers) +
78             "."
79         );
80       });
81       advance();
82     },
83     function (xhr) {
84       ok(false, "Can't get results from the counter server.");
85       SimpleTest.finish();
86     }
87   );
90 /**
91  * Grabs the results via XHR and checks them
92  */
93 function checkExpectedGlobalResults(testName) {
94   var url = "bug704320.sjs?action=get-test-results";
95   doXHR(
96     url,
97     function (xhr) {
98       var response = JSON.parse(xhr.response);
100       for (type in response) {
101         for (scheme in response[type]) {
102           for (policy in response[type][scheme]) {
103             var expectedResult =
104               EXPECTED_RESULTS[type] === undefined
105                 ? EXPECTED_RESULTS.default[scheme][policy]
106                 : EXPECTED_RESULTS[type][scheme][policy];
107             is(
108               response[type][scheme][policy],
109               expectedResult,
110               type + " " + scheme + " " + policy
111             );
112           }
113         }
114       }
115       advance(testName);
116     },
117     function (xhr) {
118       ok(false, "Can't get results from the counter server.");
119       SimpleTest.finish();
120     }
121   );
124 var EXPECTED_RESULTS = {
125   // From docshell/base/nsDocShell.cpp:
126   //   "If the document containing the hyperlink being audited was not retrieved
127   //    over an encrypted connection and its address does not have the same
128   //    origin as "ping URL", send a referrer."
129   "link-ping": {
130     // Same-origin
131     "http-to-http": {
132       "no-referrer": "",
133       "unsafe-url": "",
134       origin: "",
135       "origin-when-cross-origin": "",
136       "no-referrer-when-downgrade": "",
137       "same-origin": "",
138       "strict-origin": "",
139       "strict-origin-when-cross-origin": "",
140     },
141     "http-to-https": {
142       "no-referrer": "",
143       "unsafe-url":
144         "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=https&policy=unsafe-url",
145       origin: "http://example.com/",
146       "origin-when-cross-origin": "http://example.com/",
147       "no-referrer-when-downgrade":
148         "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=https&policy=no-referrer-when-downgrade",
149       "same-origin": "",
150       "strict-origin": "http://example.com/",
151       "strict-origin-when-cross-origin": "http://example.com/",
152     },
153     // Encrypted and not same-origin
154     "https-to-http": {
155       "no-referrer": "",
156       "unsafe-url": "",
157       origin: "",
158       "origin-when-cross-origin": "",
159       "no-referrer-when-downgrade": "",
160       "same-origin": "",
161       "strict-origin": "",
162       "strict-origin-when-cross-origin": "",
163     },
164     // Encrypted
165     "https-to-https": {
166       "no-referrer": "",
167       "unsafe-url": "",
168       origin: "",
169       "origin-when-cross-origin": "",
170       "no-referrer-when-downgrade": "",
171       "same-origin": "",
172       "strict-origin": "",
173       "strict-origin-when-cross-origin": "",
174     },
175   },
176   // form is tested in a 2nd level iframe.
177   form: {
178     "http-to-http": {
179       "no-referrer": "",
180       "unsafe-url":
181         "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=unsafe-url&type=form",
182       origin: "http://example.com/",
183       "origin-when-cross-origin":
184         "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=origin-when-cross-origin&type=form",
185       "no-referrer-when-downgrade":
186         "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=no-referrer-when-downgrade&type=form",
187       "same-origin":
188         "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=same-origin&type=form",
189       "strict-origin": "http://example.com/",
190       "strict-origin-when-cross-origin":
191         "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=strict-origin-when-cross-origin&type=form",
192     },
193     "http-to-https": {
194       "no-referrer": "",
195       "unsafe-url":
196         "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=https&policy=unsafe-url&type=form",
197       origin: "http://example.com/",
198       "origin-when-cross-origin": "http://example.com/",
199       "no-referrer-when-downgrade":
200         "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=https&policy=no-referrer-when-downgrade&type=form",
201       "same-origin": "",
202       "strict-origin": "http://example.com/",
203       "strict-origin-when-cross-origin": "http://example.com/",
204     },
205     "https-to-http": {
206       "no-referrer": "",
207       "unsafe-url":
208         "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=http&policy=unsafe-url&type=form",
209       origin: "https://example.com/",
210       "origin-when-cross-origin": "https://example.com/",
211       "no-referrer-when-downgrade": "",
212       "same-origin": "",
213       "strict-origin": "",
214       "strict-origin-when-cross-origin": "",
215     },
216     "https-to-https": {
217       "no-referrer": "",
218       "unsafe-url":
219         "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=unsafe-url&type=form",
220       origin: "https://example.com/",
221       "origin-when-cross-origin":
222         "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=origin-when-cross-origin&type=form",
223       "no-referrer-when-downgrade":
224         "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=no-referrer-when-downgrade&type=form",
225       "same-origin":
226         "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=same-origin&type=form",
227       "strict-origin": "https://example.com/",
228       "strict-origin-when-cross-origin":
229         "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=strict-origin-when-cross-origin&type=form",
230     },
231   },
232   // window.location is tested in a 2nd level iframe.
233   "window.location": {
234     "http-to-http": {
235       "no-referrer": "",
236       "unsafe-url":
237         "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=unsafe-url&type=window.location",
238       origin: "http://example.com/",
239       "origin-when-cross-origin":
240         "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=origin-when-cross-origin&type=window.location",
241       "no-referrer-when-downgrade":
242         "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=no-referrer-when-downgrade&type=window.location",
243       "same-origin":
244         "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=same-origin&type=window.location",
245       "strict-origin": "http://example.com/",
246       "strict-origin-when-cross-origin":
247         "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=http&policy=strict-origin-when-cross-origin&type=window.location",
248     },
249     "http-to-https": {
250       "no-referrer": "",
251       "unsafe-url":
252         "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=https&policy=unsafe-url&type=window.location",
253       origin: "http://example.com/",
254       "origin-when-cross-origin": "http://example.com/",
255       "no-referrer-when-downgrade":
256         "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=http&scheme-to=https&policy=no-referrer-when-downgrade&type=window.location",
257       "same-origin": "",
258       "strict-origin": "http://example.com/",
259       "strict-origin-when-cross-origin": "http://example.com/",
260     },
261     "https-to-http": {
262       "no-referrer": "",
263       "unsafe-url":
264         "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=http&policy=unsafe-url&type=window.location",
265       origin: "https://example.com/",
266       "origin-when-cross-origin": "https://example.com/",
267       "no-referrer-when-downgrade": "",
268       "same-origin": "",
269       "strict-origin": "",
270       "strict-origin-when-cross-origin": "",
271     },
272     "https-to-https": {
273       "no-referrer": "",
274       "unsafe-url":
275         "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=unsafe-url&type=window.location",
276       origin: "https://example.com/",
277       "origin-when-cross-origin":
278         "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=origin-when-cross-origin&type=window.location",
279       "no-referrer-when-downgrade":
280         "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=no-referrer-when-downgrade&type=window.location",
281       "same-origin":
282         "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=same-origin&type=window.location",
283       "strict-origin": "https://example.com/",
284       "strict-origin-when-cross-origin":
285         "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-2nd-level-iframe&scheme-from=https&scheme-to=https&policy=strict-origin-when-cross-origin&type=window.location",
286     },
287   },
288   default: {
289     "http-to-http": {
290       "no-referrer": "",
291       "unsafe-url":
292         "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=http&policy=unsafe-url",
293       origin: "http://example.com/",
294       "origin-when-cross-origin":
295         "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=http&policy=origin-when-cross-origin",
296       "no-referrer-when-downgrade":
297         "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=http&policy=no-referrer-when-downgrade",
298       "same-origin":
299         "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=http&policy=same-origin",
300       "strict-origin": "http://example.com/",
301       "strict-origin-when-cross-origin":
302         "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=http&policy=strict-origin-when-cross-origin",
303     },
304     "http-to-https": {
305       "no-referrer": "",
306       "unsafe-url":
307         "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=https&policy=unsafe-url",
308       origin: "http://example.com/",
309       "origin-when-cross-origin": "http://example.com/",
310       "no-referrer-when-downgrade":
311         "http://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=http&scheme-to=https&policy=no-referrer-when-downgrade",
312       "same-origin": "",
313       "strict-origin": "http://example.com/",
314       "strict-origin-when-cross-origin": "http://example.com/",
315     },
316     "https-to-http": {
317       "no-referrer": "",
318       "unsafe-url":
319         "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=https&scheme-to=http&policy=unsafe-url",
320       origin: "https://example.com/",
321       "origin-when-cross-origin": "https://example.com/",
322       "no-referrer-when-downgrade": "",
323       "same-origin": "",
324       "strict-origin": "",
325       "strict-origin-when-cross-origin": "",
326     },
327     "https-to-https": {
328       "no-referrer": "",
329       "unsafe-url":
330         "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=https&scheme-to=https&policy=unsafe-url",
331       origin: "https://example.com/",
332       "origin-when-cross-origin":
333         "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=https&scheme-to=https&policy=origin-when-cross-origin",
334       "no-referrer-when-downgrade":
335         "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=https&scheme-to=https&policy=no-referrer-when-downgrade",
336       "same-origin":
337         "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=https&scheme-to=https&policy=same-origin",
338       "strict-origin": "https://example.com/",
339       "strict-origin-when-cross-origin":
340         "https://example.com/tests/dom/base/test/bug704320.sjs?action=create-1st-level-iframe&scheme-from=https&scheme-to=https&policy=strict-origin-when-cross-origin",
341     },
342   },