test_bug1091883.html (2977B)
1 <!DOCTYPE html> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=1091883 5 --> 6 <head> 7 <meta charset="utf-8"> 8 <meta name="referrer" content="origin-when-cross-origin"> 9 <title>Test for Bug 1091883</title> 10 <script src="/tests/SimpleTest/SimpleTest.js"></script> 11 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 12 </head> 13 <body> 14 <p><a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1091883">Mozilla Bug 1091883</a></p> 15 <h2>Results</h2> 16 <pre id="results">Running...</pre> 17 18 <script> 19 SimpleTest.waitForExplicitFinish(); 20 21 var origins = [ 22 "http://mochi.test:8888", "http://example.com", "http://example.org"]; 23 var numOrigins = origins.length; 24 25 // For each combination of (frame, subframe, target) origins, this test 26 // includes a "frame" that includes a "subframe"; and then this test 27 // navigates this "subframe" to the "target". Both the referrer and 28 // the triggering principal are this test, i.e., "http://mochi.test:8888". 29 // Since the referrer policy is origin-when-cross-origin, we expect to have 30 // a full referrer if and only if the target is also "http://mochi.test:8888"; 31 // in all other cases, the referrer needs to be the origin alone. 32 var numTests = numOrigins * numOrigins * numOrigins; 33 34 // Helpers to look up the approriate origins for a given test number. 35 function getFrameOrigin(i) { 36 return origins[(i / (numOrigins * numOrigins)) | 0]; 37 } 38 function getSubframeOrigin(i) { 39 return origins[((i / numOrigins) | 0) % 3]; 40 } 41 function getTargetOrigin(i) { 42 return origins[i % 3]; 43 } 44 45 // Create the frames, and tell them which subframes to load. 46 for (let i = 0; i < numTests; i++) { 47 var frame = document.createElement("iframe"); 48 frame.src = getFrameOrigin(i) + 49 "/tests/dom/base/test/file_bug1091883_frame.html#" + 50 getSubframeOrigin(i); 51 document.body.appendChild(frame); 52 } 53 54 // Navigate all subframes to the target. 55 window.onload = function() { 56 for (let i = 0; i < numTests; i++) { 57 frames[i].frames[0].location = getTargetOrigin(i) + 58 "/tests/dom/base/test/file_bug1091883_target.html#" + i; 59 } 60 }; 61 62 // Check referrer messages from the target. 63 var results = {}; 64 function makeResultsKey(i) { 65 return i + ": " + getFrameOrigin(i) + " | " + getSubframeOrigin(i) + " -> " + 66 getTargetOrigin(i); 67 } 68 window.addEventListener("message", function(event) { 69 var out = event.data.split(" "); 70 var referrer = out[0]; 71 var testRun = +out[1]; 72 results[makeResultsKey(testRun)] = referrer; 73 if (event.origin == "http://mochi.test:8888") { 74 is(referrer.split("?")[0], 75 "http://mochi.test:8888/tests/dom/base/test/test_bug1091883.html", 76 "must be full referrer"); 77 } else { 78 is(referrer, "http://mochi.test:8888/", "must be origin referrer"); 79 } 80 if (Object.keys(results).length == numTests) { 81 document.getElementById("results").textContent = 82 JSON.stringify(results, null, 4); 83 SimpleTest.finish(); 84 } 85 }); 86 </script> 87 88 </body> 89 </html>