<!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>
            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>
