<!DOCTYPE html>
<html>
<head>
    <script src="/js-test-resources/js-test.js"></script>
    <script src="resources/util.js"></script>
    <script>
        description("Tests that redirects for a non-sandboxed iframe nested in a non-sandboxed iframe get counted properly.");
        jsTestIsAsync = true;
        window.addEventListener("message", receiveMessage, false);

        function finishTest() {
            setEnableFeature(false, finishJSTest);
        }

        var lastPageInRedirectChainLoaded = false;
        var statsChecked = false;

        function receiveMessage(event) {
            if (event.origin === "http://localhost:8000") {
                if (event.data.indexOf("PASS") === -1)
                    testFailed(event.data.replace("FAIL ", ""));
            } else
                testFailed("Received a message from an unexpected origin: " + event.origin);

            lastPageInRedirectChainLoaded = true;
            if (statsChecked)
                finishTest();
            else
                testRunner.statisticsNotifyObserver();
        }

        function checkStats() {
            shouldBeTrue('testRunner.isStatisticsRegisteredAsSubFrameUnder("http://localhost", "http://127.0.0.1")');
            shouldBeTrue('testRunner.isStatisticsRegisteredAsRedirectingTo("http://localhost", "http://127.0.0.1")');
            shouldBeTrue('testRunner.isStatisticsRegisteredAsRedirectingTo("http://127.0.0.1", "http://localhost")');

            statsChecked = true;
            if (lastPageInRedirectChainLoaded)
                finishTest();
        }

        if (testRunner) {
            setEnableFeature(true, function() {
                testRunner.installStatisticsDidScanDataRecordsCallback(checkStats);
            });
        }
    </script>
</head>
<body>
<iframe src="http://127.0.0.1:8000/resourceLoadStatistics/resources/page-with-non-sandboxed-iframe-redirect-localhost-to-ip-to-localhost.html">
</iframe>
</body>
</html>
