<!DOCTYPE HTML>
<meta charset=utf-8>
<title>LongTask Timing: long task in sibling iframe</title>
<body>

<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

<script>
  async_test(t => {
    assert_implements(window.PerformanceLongTaskTiming, 'Longtasks are not supported.');
    window.addEventListener('message', t.step_func(e => {
      assert_equals(e.data['entryType'], 'longtask');
      // Ignore any long task that may be produced by the top-level frame.
      if (e.data['frame-attribution'] === 'same-origin-ancestor')
        return;

      assert_equals(e.data['frame-attribution'], 'same-origin');
      assert_equals(e.data['task-attribution'], 'unknown');
      assert_equals(e.data['containerType'], 'iframe');
      assert_equals(e.data['containerId'], 'longtask-iframe-id');
      assert_equals(e.data['containerName'], 'longtask-iframe-name');
      assert_equals(e.data['containerSrc'], 'resources/subframe-with-longtask.html');
      t.done();
    }));
    const observingFrame = document.createElement('iframe');
    observingFrame.id = 'observing-iframe-id';
    observingFrame.name = 'observing-iframe-name';
    document.body.appendChild(observingFrame);
    observingFrame.src = 'resources/subframe-observing-longtask.html'

    observingFrame.onload = () => {
      const longtaskFrame = document.createElement('iframe');
      longtaskFrame.id = 'longtask-iframe-id';
      longtaskFrame.name = 'longtask-iframe-name';
      document.body.appendChild(longtaskFrame);
      longtaskFrame.src = 'resources/subframe-with-longtask.html'
    };
}, 'Performance longtask entries are observable in sibling iframe.');
</script>
</body>
