<!DOCTYPE HTML>
<meta charset=utf-8>
<title>LongTask Timing: validate long task attributes</title>
<body>

<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

<h1>Long Task Attributes</h1>
<div id="log"></div>
<script>
  async_test(function (t) {
    const observer = new PerformanceObserver(
        t.step_func(function (entryList) {
            const entries = entryList.getEntries();
            assert_equals(entries.length, 1,
                'Exactly one entry is expected.');
            const longtask = entries[0];
            assert_equals(longtask.entryType, 'longtask');
            assert_equals(longtask.name, 'self');
            assert_greater_than(longtask.duration, 50);
            assert_greater_than_equal(longtask.startTime, 0);
            const currentTime = performance.now();
            assert_less_than_equal(longtask.startTime, currentTime);

            // Assert the TaskAttributionTiming entry in attribution.
            assert_equals(longtask.attribution.length, 1,
                'Exactly one attribution entry is expected');
            const attribution = longtask.attribution[0];
            assert_equals(attribution.entryType, 'taskattribution');
            assert_equals(attribution.name, 'script');
            assert_equals(attribution.duration, 0);
            assert_equals(attribution.startTime, 0);
            assert_equals(attribution.containerId, '');
            assert_equals(attribution.containerName, '');
            assert_equals(attribution.containerSrc, '');
            observer.disconnect();
            t.done();
        })
    );
    observer.observe({entryTypes: ['longtask']});

    /* Generate a slow task */
    const begin = window.performance.now();
    while (window.performance.now() < begin + 51);

}, 'Performance longtask entries are observable.');
</script>

</body>