<!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();
  const performanceObserverTimeout = 5 * 1000;
  const longTasksPromise = new Promise(resolve => {
    const observer = new PerformanceObserver(t.step_func(entryList => {
      const entries = entryList.getEntries();
      entries.forEach(longtask => {
        assert_equals(longtask.entryType, 'longtask');
        if (hasUnrelatedTaskName(longtask.name, 'same-origin-descendant')) {
            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);
  });
  const timeout = new Promise(
    (resolve, reject) => t.step_timeout(
      () => { reject(new Error('observer failed to find any entries')) },
      performanceObserverTimeout)
  )
  return Promise.race([longTasksPromise, timeout]);
}, `Performance longtask entries in ${longContainerName} are observable in parent.`);
</script>
</body>
