<!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/#sec-navigation-timing-interface"/>
        <script src="/resources/testharness.js"></script>
        <script src="/resources/testharnessreport.js"></script>
    </head>
    <body>
        <h1>Description</h1>
        <p>This test validates that all of the window.performance.getEntriesByType("navigation") attributes remain unchanged after an in document navigation (URL fragment change).</p>

        <script>
            setup({ single_test: true });

            var navTiming2Attributes = [
                'connectEnd',
                'connectStart',
                'decodedBodySize',
                'domComplete',
                'domContentLoadedEventEnd',
                'domContentLoadedEventStart',
                'domInteractive',
                'domainLookupEnd',
                'domainLookupStart',
                'duration',
                'encodedBodySize',
                'entryType',
                'fetchStart',
                'initiatorType',
                'loadEventEnd',
                'loadEventStart',
                'name',
                'redirectCount',
                'redirectEnd',
                'redirectStart',
                'requestStart',
                'responseEnd',
                'responseStart',
                'secureConnectionStart',
                'transferSize',
                'type',
                'unloadEventEnd',
                'unloadEventStart',
                'workerStart'
            ];

            var initial_timing = {};

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

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

            function load_handler()
            {
                window.removeEventListener("load", load_handler);
                setTimeout("save_timing_after_load()", 0);
            }

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