<!DOCTYPE HTML>
<meta charset=utf-8>
<title>LongTask Timing: Promise resolvers</title>
<body>

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

<h1>Long Task: promise resolvers</h1>
<script>
  function test_promise_long_task(name, promise) {
    promise_test(async t => {
      assert_implements(window.PerformanceLongTaskTiming, 'Longtasks are not supported.');
      const longTaskPromise = new Promise(resolve => {
        const observer = new PerformanceObserver(t.step_func(entryList => {
          observer.disconnect();
          resolve(entryList.getEntries());
        }));
        observer.observe({entryTypes: ['longtask']});
      });

      await promise().catch(() => {});
      busyWait();
      const entries = await longTaskPromise;
      assert_greater_than_equal(entries.length, 1);
    }, `Performance longtask entries after a promise: ${name}`);
  }

  test_promise_long_task("successful fetch", () => fetch("/common/dummy.xml"));
  test_promise_long_task("Response.text()", () =>
    fetch("/common/dummy.xml").then(r => r.text()));
  test_promise_long_task("rejected fetch", () => fetch("/common/non-existent.xml"));
  test_promise_long_task("JSON error", () => fetch("/common/dummy.xml").then(r => r.json()));
</script>
</body>
