<!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/makelongtask.js"></script>

<h1>Long Task: External Script</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 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']});
}, 'Performance longtask entries are observable.');
</script>

</body>