<!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>
<script src="resources/utils.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];
            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 = () => {
        const script = document.createElement('script');
        script.src = 'resources/makelongtask.js';
        document.body.appendChild(script);
    }
}, 'Performance longtask entries are observable.');
</script>
</body>
