<!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()
            {
                const frame_performance = document.getElementById("frameContext").contentWindow.performance;
                assert_equals(frame_performance.getEntriesByType("navigation")[0].type,
                    "navigate",
                    "Expected navigation type to be navigate.");
                assert_equals(frame_performance.getEntriesByType("navigation")[0].redirectCount, 0,
                    "Expected redirectCount to be 0.");
                assert_equals(frame_performance.getEntriesByType("navigation")[0].redirectStart, 0,
                    "Expected redirectStart to be 0.");
                assert_equals(frame_performance.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 when the redirect chooses to opt-in.</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
            const destUrl_first = make_absolute_url({subdomain: "www",
                                             path: "/common/redirect-opt-in.py",
                                             query: "location=" + make_absolute_url(
                                                         {path: "/navigation-timing/resources/blank_page_green.html"})
                                             });
            const destUrl = make_absolute_url({subdomain: "www",
                                             path: "/common/redirect.py",
                                             query: "location=" + destUrl_first});
            let frameContext = document.getElementById("frameContext");
            frameContext.onload = onload_test;
            frameContext.src = destUrl;
        </script>
    </body>
</html>
