зеркало из https://github.com/mozilla/gecko-dev.git
90 строки
2.9 KiB
HTML
90 строки
2.9 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<!--
|
|
https://bugzilla.mozilla.org/show_bug.cgi?id=1091883
|
|
-->
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="referrer" content="origin-when-cross-origin">
|
|
<title>Test for Bug 1091883</title>
|
|
<script src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
|
</head>
|
|
<body>
|
|
<p><a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1091883">Mozilla Bug 1091883</a></p>
|
|
<h2>Results</h2>
|
|
<pre id="results">Running...</pre>
|
|
|
|
<script>
|
|
SimpleTest.waitForExplicitFinish();
|
|
|
|
var origins = [
|
|
"http://mochi.test:8888", "http://example.com", "http://example.org"];
|
|
var numOrigins = origins.length;
|
|
|
|
// For each combination of (frame, subframe, target) origins, this test
|
|
// includes a "frame" that includes a "subframe"; and then this test
|
|
// navigates this "subframe" to the "target". Both the referrer and
|
|
// the triggering principal are this test, i.e., "http://mochi.test:8888".
|
|
// Since the referrer policy is origin-when-cross-origin, we expect to have
|
|
// a full referrer if and only if the target is also "http://mochi.test:8888";
|
|
// in all other cases, the referrer needs to be the origin alone.
|
|
var numTests = numOrigins * numOrigins * numOrigins;
|
|
|
|
// Helpers to look up the approriate origins for a given test number.
|
|
function getFrameOrigin(i) {
|
|
return origins[(i / (numOrigins * numOrigins)) | 0];
|
|
}
|
|
function getSubframeOrigin(i) {
|
|
return origins[((i / numOrigins) | 0) % 3];
|
|
}
|
|
function getTargetOrigin(i) {
|
|
return origins[i % 3];
|
|
}
|
|
|
|
// Create the frames, and tell them which subframes to load.
|
|
for (let i = 0; i < numTests; i++) {
|
|
var frame = document.createElement("iframe");
|
|
frame.src = getFrameOrigin(i) +
|
|
"/tests/dom/base/test/file_bug1091883_frame.html#" +
|
|
getSubframeOrigin(i);
|
|
document.body.appendChild(frame);
|
|
}
|
|
|
|
// Navigate all subframes to the target.
|
|
window.onload = function() {
|
|
for (let i = 0; i < numTests; i++) {
|
|
frames[i].frames[0].location = getTargetOrigin(i) +
|
|
"/tests/dom/base/test/file_bug1091883_target.html#" + i;
|
|
}
|
|
};
|
|
|
|
// Check referrer messages from the target.
|
|
var results = {};
|
|
function makeResultsKey(i) {
|
|
return i + ": " + getFrameOrigin(i) + " | " + getSubframeOrigin(i) + " -> " +
|
|
getTargetOrigin(i);
|
|
}
|
|
window.addEventListener("message", function(event) {
|
|
var out = event.data.split(" ");
|
|
var referrer = out[0];
|
|
var testRun = +out[1];
|
|
results[makeResultsKey(testRun)] = referrer;
|
|
if (event.origin == "http://mochi.test:8888") {
|
|
is(referrer,
|
|
"http://mochi.test:8888/tests/dom/base/test/test_bug1091883.html",
|
|
"must be full referrer");
|
|
} else {
|
|
is(referrer, "http://mochi.test:8888/", "must be origin referrer");
|
|
}
|
|
if (Object.keys(results).length == numTests) {
|
|
document.getElementById("results").textContent =
|
|
JSON.stringify(results, null, 4);
|
|
SimpleTest.finish();
|
|
}
|
|
});
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|