<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>window.performance.timing.redirect attributes on a client redirect navigation</title>
        <link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
        <link rel="help" href="http://www.w3.org/TR/navigation-timing/#sec-navigation-timing-interface"/>
        <script src="/resources/testharness.js"></script>
        <script src="/resources/testharnessreport.js"></script>
        <script src="resources/webperftestharness.js"></script>
        <link rel="stylesheet" href="/resources/testharness.css" />
        <script>
            setup({explicit_done: true});

            test_namespace('navigation');
            test_namespace('timing', true);

            var redirect_frame;
            function onload_test()
            {
                if (performanceNamespace === undefined)
                {
                    // avoid script errors
                    done();
                    return;
                }

                redirect_frame = document.getElementById("frameContext");
                redirect_frame.onload = do_test;
            }

            function do_test()
            {
                redirect_frame.onload = "";
                test_true(redirect_frame.contentWindow.performance.navigation.type == performanceNamespace.navigation.TYPE_NAVIGATE,
                          'timing.navigation.type is TYPE_NAVIGATE',{help:"http://www.w3.org/TR/navigation-timing/#sec-navigation-info-interface"});

                test_equals(redirect_frame.contentWindow.performance.navigation.redirectCount, 0, 'navigation.redirectCount == 0 on an client redirected navigation',{help:"http://www.w3.org/TR/navigation-timing/#sec-navigation-info-interface"});
                test_equals(redirect_frame.contentWindow.performance.timing.redirectStart, 0, 'timing.redirectStart == 0 on an client redirected navigation');
                test_equals(redirect_frame.contentWindow.performance.timing.redirectEnd, 0, 'timing.redirectEnd == 0 on an client redirected navigation');

                done();
            }
        </script>

    </head>
    <body onload="onload_test();">
        <h1>Description</h1>
        <p>This test validates the values of the window.navigation.redirectCount and the
           window.performance.timing.redirectStart/End times on a client side redirect.</p>

        <div id="log"></div><br />
        <iframe id="frameContext" src="resources/blank_page_meta_redirect.html" style="width: 250px; height: 250px;"></iframe>
    </body>
</html>
