<!DOCTYPE html>
<meta charset="utf-8">
<title>FederatedCredential.revoke() promise resolution</title>
<link rel="author" title="Christian Biesinger" href="mailto:cbiesinger@chromium.org">
<link rel="help" href="https://wicg.github.io/FedCM/#browser-api-revocation">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

<script type="module">
  import {fedcm_test} from './support/fedcm-helper.js';

  async function getCredential(provider_url) {
    const provider = {
      url: provider_url || "https://idp.example/",
      clientId: "1234",
    };
    return await navigator.credentials.get({
      federated:  {
        providers: [provider],
      },
    });
  }

  fedcm_test(async (t, mock) => {
    mock.revokeReturn("kSuccess");
    await (await getCredential()).revoke("foo@bar.com");
  }, "Successfully revoking a token should resolve the promise.");

  fedcm_test(async (t, mock) => {
    mock.revokeReturn("kError");
    const result = (await getCredential()).revoke("foo@bar.com");
    return promise_rejects_dom(t, "NetworkError", result);
  }, "Error should reject the promise.");

  fedcm_test(async (t, mock) => {
    mock.revokeReturn("kError");
    const result = (await getCredential()).revoke("");
    return promise_rejects_dom(t, "InvalidStateError", result);
  }, "Empty hint should reject the promise.");

  fedcm_test(async (t, mock) => {
    const result = getCredential("https://other-idp.example/").then((c) => c.revoke("foo@bar.com"));
    return promise_rejects_dom(t, "NetworkError", result);
  }, "Provider URL should honor Content-Security-Policy.");
</script>
