<html>
<head>
<script>
if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.dumpChildFramesAsText();
    testRunner.waitUntilDone();
}

function runTest() {
    var iframe = document.getElementById("iframe");
    iframe.contentWindow.postMessage({"action": "click", "offsetLeft": iframe.offsetLeft, "offsetTop": iframe.offsetTop}, "*");
}
</script>
</head>
<body>
<p>
This test checks the referrer policy is obeyed along the redirect chain.  The
test passes if the referrer is https://127.0.0.1:8443
</p>
<iframe id="iframe" name="iframe" onload="runTest()" src="https://127.0.0.1:8443/security/resources/referrer-policy-redirect-link.html"></iframe>
</body>
</html>
