| <!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> |