<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" >
        <title>window.performance.timing in document navigation</title>
        <link rel="author" title="Google" href="http://www.google.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="/common/performance-timeline-utils.js"></script>
        <script src="resources/webperftestharness.js"></script>
    </head>
    <body>
        <h1>Description</h1>
        <p>This test validates that all of the window.performance.timing attributes remain unchanged after an in document navigation (URL fragment change).</p>

        <div id="log"></div>
        <script>
            setup({explicit_done: true});

            // explicitly test the namespace before we start testing
            test_namespace('timing');

            var timing;

            function check_timing_not_changed()
            {
                for (var i = 0; i < timingAttributes.length; ++i)
                {
                    var property = timingAttributes[i];
                    test_equals(timing[property], initial_timing[property],
                                property + " is the same after in document navigation.");
                }
                done();
            }

            var initial_timing = {};
            function save_timing_after_load()
            {
                for (var i = 0; i < timingAttributes.length; ++i)
                {
                    var property = timingAttributes[i];
                    initial_timing[property] = timing[property];
                }
                window.location.href = "#1";
                step_timeout(check_timing_not_changed, 0);
            }

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

                timing = performanceNamespace.timing;

                window.removeEventListener("load", load_handler);
                step_timeout(save_timing_after_load, 0);
            }

            window.addEventListener("load", load_handler, false);
        </script>
    </body>
</html>
