chromium/third_party/blink/web_tests/external/wpt/navigation-timing/nav2-test-unique-nav-instances.html

<!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>
    </head>
    <body>
        <h1>Description</h1>
        <p>This test validates that each window has a unique nav timing 2 instance.</p>
        <iframe id="frameContext" src="resources/blank_page_green.html" style="display:none;";></iframe>
        <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'
            ];

            function not_same_instance(instance1, instance2, attributes) {
                for (var i in attributes) {
                    if (instance1[attributes[i]] != instance2[attributes[i]])
                        return true;
                }
                return false;
            }

            async_test(function (t) {
                var observer = new PerformanceObserver(
                    t.step_func(function (entryList) {
                        assert_equals(entryList.getEntriesByType("navigation").length, 1, "Only one nav timing instance exists.");
                        assert_equals(document.getElementById("frameContext").contentWindow.performance.getEntriesByType("navigation").length, 1,
                            "Only one nav timing instance exists.");
                        var main_frame_instance = entryList.getEntriesByType("navigation")[0];
                        var iframe_instance = document.getElementById("frameContext").contentWindow.performance.getEntriesByType("navigation")[0];
                        assert_true(not_same_instance(main_frame_instance, iframe_instance, navTiming2Attributes),
                            "Two nav timing instances are not the same instance.");
                        observer.disconnect();
                        t.done();
                    })
                );
                observer.observe({entryTypes: ["navigation"]});

            }, "Each window has a unique nav timing 2 instance.");
        </script>
    </body>
</html>