<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>window.performance.navigation attributes</title>
        <link rel="author" title="Mozilla" href="https://www.mozilla.org/" />
        <link rel="help" href="https://www.w3.org/TR/navigation-timing-2/#processing-model"/>
        <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 checks that the transferSize, encodedBodySize and decodedBodySize attributes have correct values when checked in the onload handler</p>

        <div id="log"></div>

        <script>
            async_test(function (t) {
                document.addEventListener("DOMContentLoaded", t.step_func_done(() => {
                    let entry = window.performance.getEntriesByType("navigation")[0];
                    assert_greater_than(entry.transferSize, 1000, "descr");
                    assert_greater_than(entry.encodedBodySize, 1000, "descr");
                    assert_greater_than(entry.decodedBodySize, 1000, "descr");
                }));
            }, "Test that the attributes have a proper value during DOMContentLoaded");

            async_test(function (t) {
                window.addEventListener("load", t.step_func_done(() => {
                    let entry = window.performance.getEntriesByType("navigation")[0];
                    assert_greater_than(entry.transferSize, 1000, "descr");
                    assert_greater_than(entry.encodedBodySize, 1000, "descr");
                    assert_greater_than(entry.decodedBodySize, 1000, "descr");
                    async_test(function (t) {
                        setTimeout(t.step_func_done(() => {
                          let entry = window.performance.getEntriesByType("navigation")[0];
                          assert_greater_than(entry.transferSize, 1000, "descr");
                          assert_greater_than(entry.encodedBodySize, 1000, "descr");
                          assert_greater_than(entry.decodedBodySize, 1000, "descr");
                        }), 0);
                    }, "Test that the attributes have a proper value during a task after onload");
                }));
            }, "Test that the attributes have a proper value during onload");

        </script>
    </body>
</html>
