referrerHelper.js (15316B)
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 }); 19 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); 34 } 35 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 ); 48 } 49 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); 59 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 ); 69 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 ); 88 } 89 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); 99 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 ); 122 } 123 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 }, 343 };