<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Navigation Timing 2 WPT</title>
        <link rel="author" title="Google" href="http://www.google.com/" />
        <link rel="help" href="http://www.w3.org/TR/navigation-timing-2/#sec-PerformanceNavigationTiming"/>
        <script src="/resources/testharness.js"></script>
        <script src="/resources/testharnessreport.js"></script>
        <script src="/common/utils.js"></script>
        <script>
            setup({ single_test: true });

            function onload_test()
            {
                var performanceNamespace = document.getElementById("frameContext").contentWindow.performance;
                assert_equals(performanceNamespace.getEntriesByType("navigation")[0].type,
                    "navigate",
                    "Expected navigation type to be navigate.");
                assert_equals(performanceNamespace.getEntriesByType("navigation")[0].redirectCount, 0,
                    "Expected redirectCount to be 0.");
                assert_equals(performanceNamespace.getEntriesByType("navigation")[0].redirectStart, 0,
                    "Expected redirectStart to be 0.");
                assert_equals(performanceNamespace.getEntriesByType("navigation")[0].redirectEnd, 0,
                    "Expected redirectEnd to be 0.");

                done();
            }
        </script>

    </head>
    <body>
        <h1>Description</h1>
        <p>This test validates the values of the window.performance.getEntriesByType("navigation")[0].redirectCount and the
           window.performance.getEntriesByType("navigation")[0].redirectStart/End times for a cross-origin server side redirect navigation.</p>

        <iframe id="frameContext" src="" style="width: 250px; height: 250px;"></iframe>
        <script>
            // combine the page origin and redirect origin into the IFRAME's src URL
            var destUrl = make_absolute_url({subdomain: "www",
                                             path: "/common/redirect.py",
                                             query: "location=" + make_absolute_url(
                                                         {path: "/navigation-timing/resources/blank_page_green.html"})
                                             });
            var frameContext = document.getElementById("frameContext");
            frameContext.onload = onload_test;
            frameContext.src = destUrl;
        </script>
    </body>
</html>
