Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- This WPT test may be referenced by the following Test IDs:
            - /webauthn/getclientcapabilities.https.html - WPT Dashboard Interop Dashboard
 
<!DOCTYPE html>
<meta charset="utf-8">
<title>getClientCapabilities tests</title>
<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>
<script src=helpers.js></script>
<body></body>
<script>
"use strict";
const KNOWN_CAPABILITIES_SET = new Set([
  "conditionalCreate",
  "conditionalGet",
  "hybridTransport",
  "passkeyPlatformAuthenticator",
  "relatedOrigins",
  "signalAllAcceptedCredentials",
  "signalCurrentUserDetails",
  "signalUnknownCredential",
  "userVerifyingPlatformAuthenticator",
  // Extensions implemented by the client
  "extension:appid",
  "extension:appidExclude",
  "extension:hmacCreateSecret",
  "extension:credentialProtectionPolicy",
  "extension:enforceCredentialProtectionPolicy",
  "extension:minPinLength",
  "extension:credProps",
  "extension:largeBlob",
  "extension:credBlob",
  "extension:getCredBlob",
  "extension:payment",
  "extension:prf",
]);
promise_test(async t => {
  const capabilities = await PublicKeyCredential.getClientCapabilities();
  const keys = Object.keys(capabilities);
  const sortedKeys = [...keys].sort();
  assert_array_equals(keys, sortedKeys, "Keys should be sorted lexicographically");
  for (const key of keys) {
    assert_equals(
      typeof capabilities[key],
      "boolean",
      `Value for "${key}" should be boolean`
    );
  }
}, "Capabilities object has sorted keys and boolean values");
promise_test(async t => {
  const capabilities = await PublicKeyCredential.getClientCapabilities();
  for (const key of Object.keys(capabilities)) {
    assert_true(
      KNOWN_CAPABILITIES_SET.has(key),
      `Capability "${key}" should be a known capability`
    );
  }
}, "Capabilities keys are known");
</script>