<!DOCTYPE HTML>
<meta charset=utf-8>
<title>LongTask Timing: long task in external script</title>
<body>

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

<h1>Long Task: External Script</h1>
<div id="log"></div>
<script>
  async_test(function (t) {
    if (typeof PerformanceLongTaskTiming === 'undefined') {
        assert_unreached("Longtasks are not supported.");
        t.done();
    }
    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 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.containerId, '');
            assert_equals(attribution.containerName, '');
            assert_equals(attribution.containerSrc, '');
            observer.disconnect();
            t.done();
        })
    );
    observer.observe({entryTypes: ['longtask']});
    window.onload = () => {
        const script = document.createElement('script');
        script.src = 'resources/makelongtask.js';
        document.body.appendChild(script);
    }
}, 'Performance longtask entries are observable.');
</script>
</body>
