<!DOCTYPE html>
<meta charset="utf-8" />
<title>Resource timing entries present for uuid-in-package resources</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/test-helpers.js"></script>
<body>
  <script>
    setup(() => {
      assert_true(HTMLScriptElement.supports("webbundle"));
    });

    promise_test(async (t) => {
      const script_id = "uuid-in-package:020111b3-437a-4c5c-ae07-adb6bbffb720";
      const element = createWebBundleElement(
        "../resources/wbn/uuid-in-package.wbn",
        /*resources=*/ [script_id]
      );
      document.body.appendChild(element);
      let script_entries = 0;
      // Declare the report_result function as outputting into stderr
      // because it is used in the WebBundle script to report the script load.
      window.report_result = console.error;
      const promise = new Promise((resolve) => {
        new PerformanceObserver(
          t.step_func((entryList) => {
            let entries = entryList.getEntriesByType("resource");
            for (let i = 0; i < entries.length; ++i) {
              // Ignore any entries for the test harness files if present.
              if (/testharness(report)?\.js/.test(entries[i].name)) {
                continue;
              }

              if (entries[i].name === script_id) ++script_entries;
            }
            if (script_entries == 1) {
              resolve();
            }
          })
        ).observe({ entryTypes: ["resource"] });
      });
      // Add the script so we get the ResourceTiming
      const script = document.createElement("script");
      script.src = script_id;
      document.body.appendChild(script);
      return promise;
    }, "Each uuid-in-package resource should have exactly 1 ResourceTiming entry.");
  </script>
</body>
