<!DOCTYPE HTML>
<meta charset=utf-8>
<title>LongTask Timing: long tasks in long-name iframe containers</title>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<h1>Longtasks in iframe</h1>
<div id="log"></div>
<script>
const longContainerName = 'iframeWithLongNameMoreThan100CharactersSpaceHolderSpaceHolderSpaceHolderSpaceHolderSpaceHolderSpaceHolder';

promise_test(async t => {
assert_implements(window.PerformanceLongTaskTiming, 'Longtasks are not supported.');
const initialTime = performance.now();
return new Promise(resolve => {
    const observer = new PerformanceObserver(t.step_func(entryList => {
        const entries = entryList.getEntries();
        assert_equals(entries.length, 1,
            'Exactly one entry is expected.');
        const longtask = entries[0];
        assert_equals(longtask.entryType, 'longtask');
        if (longtask.name == 'self' ||
            longtask.name == 'multiple-contexts' ||
            longtask.name == 'unknown')
            return;
        assert_equals(longtask.name, 'same-origin-descendant');
        assert_greater_than(longtask.duration, 50);
        assert_greater_than_equal(longtask.startTime, initialTime);
        const currentTime = performance.now();
        assert_less_than_equal(longtask.startTime, currentTime);
        // 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, longContainerName + '-id');
        assert_equals(attribution.containerName, longContainerName + '-name');
        assert_equals(attribution.containerSrc, 'resources/subframe-with-longtask.html');
        observer.disconnect();
        resolve();
    }));
    observer.observe({entryTypes: ['longtask']});
    const iframe = document.createElement('iframe');
    iframe.id = longContainerName + '-id';
    iframe.name = longContainerName + '-name';
    iframe.src = 'resources/subframe-with-longtask.html';
    document.body.appendChild(iframe);
});
}, `Performance longtask entries in ${longContainerName} are observable in parent.`);
</script>
</body>
