chromium/third_party/blink/web_tests/wpt_internal/digital-credentials/identity-get.tentative.https.html

<!DOCTYPE html>
<title>Digital Identity Credential tests.</title>
<link rel="help" href="https://wicg.github.io/digital-identities/">
<script src="/common/get-host-info.sub.js"></script>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>

<body>
<script type="module">
import { buildValidNavigatorIdentityRequest, buildValidNavigatorIdentityRequestWithRequestObject, requestIdentityWithActivation } from '/wpt_internal/digital-credentials/support/helper.js';


// Internal test because the spec currently does not require transient user activation.
promise_test(async t=>{
  assert_false(navigator.userActivation.isActive);
  let request = buildValidNavigatorIdentityRequest();
  await promise_rejects_dom(t, "NetworkError", navigator.identity.get(request));
}, "navigator.identity.get() fails if the page doesn't have user activation");

// Tests for success are here because the tests rely on the
// --use-fake-ui-for-digital-identity command line flag. Moving the tests to
// /external requires a WebDriver testing API.

promise_test(async t => {
  let request = buildValidNavigatorIdentityRequest();
  let credential = await requestIdentityWithActivation(test_driver, request);
  assert_equals("openid4vp", credential.protocol);
  assert_equals("fake_test_token", credential.data);
}, "navigator.identity.get() API works in toplevel frame.");

promise_test(async t => {
  const request = buildValidNavigatorIdentityRequestWithRequestObject();
  let credential = await requestIdentityWithActivation(test_driver, request);
  assert_equals("openid4vp", credential.protocol);
  assert_equals("fake_test_token", credential.data);
}, "navigator.identity.get() API succeeds when IdentityRequestProvider#request is an object instead of stringified JSON object");

promise_test(async t=> {
  let abortController = new AbortController();
  let request = buildValidNavigatorIdentityRequest();
  request.signal = abortController.signal;
  let requestPromise = requestIdentityWithActivation(test_driver, request);
  abortController.abort();
  await promise_rejects_dom(t, "AbortError", requestPromise);
}, "navigator.identity.get() promise is rejected when the page aborts the request.");

// Internal test because the spec does not have a 1 provider limit.
promise_test(async t => {
  let request = buildValidNavigatorIdentityRequest();
  let providerCopy = structuredClone(request.digital.providers[0]);
  request.digital.providers.push(providerCopy);
  await promise_rejects_js(t, TypeError, requestIdentityWithActivation(test_driver, request));
}, "navigator.identity.get() API fails if there is more than one provider.");
</script>