chromium/third_party/blink/web_tests/external/wpt/fedcm/support/lfedcm-helpers.js

async function clearLightweightCredential(origin, id) {
  let deletePromise = new Promise((resolve) => {
    let handler = (event) => {
      if (event.origin == origin && event.data == "deleted") {
        resolve();
        window.removeEventListener("message", handler);
      }
    };
    window.addEventListener(
      "message",
      handler,
    );
  });
  let win = window.open(`${origin}/fedcm/support/lfedcm-identity.provider-delete.sub.html?id=${id}`, "_blank");
  await deletePromise;
  win.close();
  await navigator.credentials.preventSilentAccess();
}

async function createLightweightCredential(origin, options) {
  let createPromise = new Promise((resolve) => {
    let handler = (event) => {
      if (event.origin == origin && event.data == "created") {
        resolve();
        window.removeEventListener("message", handler);
      }
    };
    window.addEventListener(
      "message",
      handler,
    );
  });
  options.postMessage = true;

  let url = URL.parse(origin);
  url.pathname = "/fedcm/support/lfedcm-identity.provider-create.sub.html";
  for (const [name, value] of Object.entries(options)) {
    url.searchParams.set(name, value);
  }
  let win = window.open(url, "_blank");
  await createPromise;
  win.close();
}