<!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>
<script src="resources/utils.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;
        checkLongTaskEntry(longtask, 'same-origin-descendant');
        // 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>
