<!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>
<script src="resources/utils.js"></script>

<h1>Long Task Attributes</h1>
<div id="log"></div>
<script>
  async_test(function (t) {
    assert_implements(window.PerformanceLongTaskTiming, 'Longtasks are not supported.');
    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];
            checkLongTaskEntry(longtask);
            // 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, 'unknown');
            assert_equals(attribution.duration, 0);
            assert_equals(attribution.startTime, 0);
            assert_equals(attribution.containerType, 'window');
            assert_equals(attribution.containerId, '');
            assert_equals(attribution.containerName, '');
            assert_equals(attribution.containerSrc, '');
            observer.disconnect();
            t.done();
        })
    );
    observer.observe({entryTypes: ['longtask']});

    window.onload = () => {
        /* Generate a slow task */
        const begin = window.performance.now();
        while (window.performance.now() < begin + 60);
    };
}, 'Performance longtask entries are observable.');
</script>

</body>
