<!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 sandboxed iframe nested in a non-sandboxed iframe get counted properly.");
        jsTestIsAsync = true;
        window.addEventListener("message", receiveMessage, false);

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

        if (testRunner) {
            setEnableFeature(true, function() {
                testRunner.installStatisticsDidScanDataRecordsCallback(checkStats);
            });
        }

        var lastPageInRedirectChainLoaded = false;
        var statsChecked = false;

        function receiveMessage(event) {
            if (event.origin === "null") {
                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();
        }
    </script>
</head>
<body>
<iframe sandbox="allow-scripts" src="http://127.0.0.1:8000/resourceLoadStatistics/resources/page-with-sandboxed-iframe-redirect-ip-to-localhost-to-ip.html">
</iframe>
</body>
</html>
