<!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) {
    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];
            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.containerType, 'window');
            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>
