This is a snapshot of web-platform-tests results. It is not maintained and developers should refer to wpt.fyi for the most current test results and other developments.
| file name | chrome | edge | firefox | safari |
|---|---|---|---|---|
| createcredential-badargs-attestation.https.html | ||||
| Overall | 7 / 7 | 7 / 7 | 6 / 6 | 6 / 6 |
| Harness status | OK | OK | OK | OK |
| Bad attestation parameter: attestation is empty object | PASS | PASS | PASS | PASS |
| Bad attestation parameter: attestation is empty array | PASS | PASS | PASS | PASS |
| Bad attestation parameter: attestation is null | PASS | PASS | PASS | PASS |
| Bad attestation parameter: attestation is "noneofyourbusiness" | PASS | PASS | PASS | PASS |
| Bad attestation parameter: attestation is empty string | PASS | PASS | PASS | PASS |
| Clean up the test environment | PASS | PASS | missing | missing |
| createcredential-badargs-authnrselection.https.html | ||||
| Overall | 14 / 14 | 14 / 14 | 13 / 13 | 0 / 0 |
| Harness status | OK | OK | OK | ERROR |
| Bad AuthenticatorSelectionCriteria: authenticatorSelection is empty string | PASS | PASS | PASS | missing |
| Bad AuthenticatorSelectionCriteria: authenticatorSelection is string | PASS | PASS | PASS | missing |
| Bad AuthenticatorSelectionCriteria: authenticatorSelection attachment is empty string | PASS | PASS | PASS | missing |
| Bad AuthenticatorSelectionCriteria: authenticatorSelection attachment is empty object | PASS | PASS | PASS | missing |
| Bad AuthenticatorSelectionCriteria: authenticatorSelection attachment is null | PASS | PASS | PASS | missing |
| Bad AuthenticatorSelectionCriteria: authenticatorSelection attachment platform | PASS | PASS | PASS | missing |
| Bad AuthenticatorSelectionCriteria: authenticatorSelection residentKey true | PASS | PASS | PASS | missing |
| Bad AuthenticatorSelectionCriteria: authenticatorSelection userVerification empty string | PASS | PASS | PASS | missing |
| Bad AuthenticatorSelectionCriteria: authenticatorSelection userVerification empty object | PASS | PASS | PASS | missing |
| Bad AuthenticatorSelectionCriteria: authenticatorSelection userVerification bad value | PASS | PASS | PASS | missing |
| Bad AuthenticatorSelectionCriteria: authenticatorSelection userVerification null | PASS | PASS | PASS | missing |
| Bad AuthenticatorSelectionCriteria: authenticatorSelection userVerification required | PASS | PASS | PASS | missing |
| Clean up the test environment | PASS | PASS | missing | missing |
| createcredential-badargs-challenge.https.html | ||||
| Overall | 7 / 7 | 7 / 7 | 6 / 6 | 6 / 6 |
| Harness status | OK | OK | OK | OK |
| Bad challenge: challenge missing | PASS | PASS | PASS | PASS |
| Bad challenge: challenge is string | PASS | PASS | PASS | PASS |
| Bad challenge: challenge is null | PASS | PASS | PASS | PASS |
| Bad challenge: challenge is empty object | PASS | PASS | PASS | PASS |
| Bad challenge: challenge is empty Array | PASS | PASS | PASS | PASS |
| Clean up the test environment | PASS | PASS | missing | missing |
| createcredential-badargs-rp.https.html | ||||
| Overall | 14 / 14 | 14 / 14 | 10 / 10 | 0 / 0 |
| Harness status | OK | OK | TIMEOUT | ERROR |
| Bad rp: rp missing | PASS | PASS | PASS | missing |
| Bad rp: rp null | PASS | PASS | FAIL | missing |
| Bad rp: rp is string | PASS | PASS | PASS | missing |
| Bad rp: rp is empty object | PASS | PASS | PASS | missing |
| Bad rp: id is null | PASS | PASS | PASS | missing |
| Bad rp: id is empty String | PASS | PASS | PASS | missing |
| Bad rp: id is invalid domain (has space) | PASS | PASS | PASS | missing |
| Bad rp: id is invalid domain (starts with dash) | PASS | PASS | PASS | missing |
| Bad rp: id is invalid domain (starts with number) | PASS | PASS | PASS | missing |
| Bad rp id: id is host + port | PASS | PASS | PASS | missing |
| rp missing name | PASS | PASS | PASS | missing |
| Bad rp: icon is insecure | PASS | PASS | TIMEOUT | missing |
| Clean up the test environment | PASS | PASS | missing | missing |
| createcredential-badargs-user.https.html | ||||
| Overall | 18 / 18 | 18 / 18 | 17 / 17 | 0 / 0 |
| Harness status | OK | OK | OK | ERROR |
| Bad user: user missing | PASS | PASS | PASS | missing |
| Bad user: user is string | PASS | PASS | PASS | missing |
| Bad user: user is empty object | PASS | PASS | PASS | missing |
| Bad user: id is undefined | PASS | PASS | PASS | missing |
| Bad user: id is object | PASS | PASS | PASS | missing |
| Bad user: id is null | PASS | PASS | PASS | missing |
| Bad user: id is empty String | PASS | PASS | PASS | missing |
| Bad user: id is empty Array | PASS | PASS | PASS | missing |
| Bad user: ArrayBuffer id is too long (65 bytes) | PASS | PASS | PASS | missing |
| Bad user: Int16Array id is too long (66 bytes) | PASS | PASS | PASS | missing |
| Bad user: Int32Array id is too long (68 bytes) | PASS | PASS | PASS | missing |
| Bad user: Float32Array id is too long (68 bytes) | PASS | PASS | PASS | missing |
| Bad user: Float64Array id is too long (72 bytes) | PASS | PASS | PASS | missing |
| Bad user: id is too long (65 bytes) | PASS | PASS | PASS | missing |
| user missing name | PASS | PASS | PASS | missing |
| Bad user: displayName is undefined | PASS | PASS | PASS | missing |
| Clean up the test environment | PASS | PASS | missing | missing |
| createcredential-excludecredentials.https.html | ||||
| Overall | 8 / 8 | 8 / 8 | 2 / 2 | 0 / 0 |
| Harness status | OK | OK | TIMEOUT | ERROR |
| Bad excludeCredentials: string | PASS | PASS | PASS | missing |
| Bad excludeCredentials: empty object | PASS | PASS | PASS | missing |
| excludeCredentials missing | PASS | PASS | TIMEOUT | missing |
| excludeCredentials empty array | PASS | PASS | NOTRUN | missing |
| exclude existing credential | PASS | PASS | NOTRUN | missing |
| exclude random (non-existing) credential | PASS | PASS | NOTRUN | missing |
| Clean up the test environment | PASS | PASS | missing | missing |
| createcredential-extensions.https.html | ||||
| Overall | 7 / 7 | 7 / 7 | 1 / 1 | 0 / 0 |
| Harness status | OK | OK | TIMEOUT | ERROR |
| Bad extensions: extensions is string | PASS | PASS | PASS | missing |
| extensions is a nonsensical JSON string | PASS | PASS | TIMEOUT | missing |
| empty appid in create request | PASS | PASS | NOTRUN | missing |
| null appid in create request | PASS | PASS | NOTRUN | missing |
| appid in create request | PASS | PASS | NOTRUN | missing |
| Clean up the test environment | PASS | PASS | missing | missing |
| createcredential-getpublickey.https.html | ||||
| Overall | 3 / 3 | 3 / 3 | 0 / 0 | 0 / 0 |
| Harness status | OK | OK | TIMEOUT | ERROR |
| WebAuthn getPublicKey | PASS | PASS | TIMEOUT | missing |
| Clean up the test environment | PASS | PASS | missing | missing |
| createcredential-large-blob-not-supported.https.html | ||||
| Overall | 7 / 7 | 7 / 7 | 0 / 0 | 0 / 0 |
| Harness status | OK | OK | TIMEOUT | ERROR |
| navigator.credentials.create() with largeBlob.write set | PASS | PASS | TIMEOUT | missing |
| navigator.credentials.create() with largeBlob.read set | PASS | PASS | NOTRUN | missing |
| navigator.credentials.create() with largeBlob.support set to preferred and not supported by authenticator | PASS | PASS | NOTRUN | missing |
| navigator.credentials.create() with largeBlob.support not set and not supported by authenticator | PASS | PASS | NOTRUN | missing |
| navigator.credentials.create() with largeBlob.support set to required and not supported by authenticator | PASS | PASS | NOTRUN | missing |
| Clean up the test environment | PASS | PASS | missing | missing |
| createcredential-large-blob-supported.https.html | ||||
| Overall | 5 / 5 | 5 / 5 | 0 / 0 | 0 / 0 |
| Harness status | OK | OK | TIMEOUT | ERROR |
| navigator.credentials.create() with largeBlob.support set to preferred and supported by authenticator | PASS | PASS | TIMEOUT | missing |
| navigator.credentials.create() with largeBlob.support not set and supported by authenticator | PASS | PASS | NOTRUN | missing |
| navigator.credentials.create() with largeBlob.support set to required and supported by authenticator | PASS | PASS | NOTRUN | missing |
| Clean up the test environment | PASS | PASS | missing | missing |
| createcredential-passing.https.html | ||||
| Overall | 39 / 39 | 39 / 39 | 0 / 0 | 0 / 0 |
| Harness status | OK | OK | TIMEOUT | ERROR |
| passing credentials.create() with default arguments | PASS | PASS | TIMEOUT | missing |
| passing credentials.create() with rpId (hostname) | PASS | PASS | NOTRUN | missing |
| passing credentials.create() without rp.icon | PASS | PASS | NOTRUN | missing |
| very short user id | PASS | PASS | NOTRUN | missing |
| max length user id | PASS | PASS | NOTRUN | missing |
| Uint8Array user id | PASS | PASS | NOTRUN | missing |
| Int8Array user id | PASS | PASS | NOTRUN | missing |
| Int16Array user id | PASS | PASS | NOTRUN | missing |
| Int32Array user id | PASS | PASS | NOTRUN | missing |
| Float32Array user id | PASS | PASS | NOTRUN | missing |
| DataView user id | PASS | PASS | NOTRUN | missing |
| passing credentials.create() without user.icon | PASS | PASS | NOTRUN | missing |
| Int16Array challenge | PASS | PASS | NOTRUN | missing |
| Int32Array challenge | PASS | PASS | NOTRUN | missing |
| Float32Array challenge | PASS | PASS | NOTRUN | missing |
| Float64Array challenge | PASS | PASS | NOTRUN | missing |
| DataView challenge | PASS | PASS | NOTRUN | missing |
| Absurdly large challenge | PASS | PASS | NOTRUN | missing |
| pubKeyCredParams is empty Array | PASS | PASS | NOTRUN | missing |
| EC256 pubKeyCredParams | PASS | PASS | NOTRUN | missing |
| SelectEC256 pubKeyCredParams from a list | PASS | PASS | NOTRUN | missing |
| passing credentials.create() with no timeout | PASS | PASS | NOTRUN | missing |
| authenticatorSelection is undefined | PASS | PASS | NOTRUN | missing |
| authenticatorSelection is empty object | PASS | PASS | NOTRUN | missing |
| authenticatorSelection default values | PASS | PASS | NOTRUN | missing |
| authenticatorSelection attachment undefined | PASS | PASS | NOTRUN | missing |
| authenticatorSelection residentKey undefined | PASS | PASS | NOTRUN | missing |
| authenticatorSelection residentKey false | PASS | PASS | NOTRUN | missing |
| authenticatorSelection userVerification undefined | PASS | PASS | NOTRUN | missing |
| authenticatorSelection userVerification discouraged | PASS | PASS | NOTRUN | missing |
| attestation parameter: attestation is "none" | PASS | PASS | NOTRUN | missing |
| attestation parameter: attestation is "indirect" | PASS | PASS | NOTRUN | missing |
| attestation parameter: attestation is "direct" | PASS | PASS | NOTRUN | missing |
| attestation parameter: attestation is undefined | PASS | PASS | NOTRUN | missing |
| extensions undefined | PASS | PASS | NOTRUN | missing |
| extensions are empty object | PASS | PASS | NOTRUN | missing |
| extensions are dict of empty strings | PASS | PASS | NOTRUN | missing |
| Clean up the test environment | PASS | PASS | missing | missing |
| createcredential-pubkeycredparams.https.html | ||||
| Overall | 11 / 11 | 11 / 11 | 8 / 8 | 0 / 0 |
| Harness status | OK | OK | OK | ERROR |
| Bad pubKeyCredParams: pubKeyCredParams is undefined | PASS | PASS | PASS | missing |
| Bad pubKeyCredParams: pubKeyCredParams is string | PASS | PASS | PASS | missing |
| Bad pubKeyCredParams: pubKeyCredParams is null | PASS | PASS | PASS | missing |
| Bad pubKeyCredParams: first param has bad type ("something-else") | PASS | PASS | PASS | missing |
| Bad pubKeyCredParams: first param has bad type ("") | PASS | PASS | PASS | missing |
| Bad pubKeyCredParams: first param has bad type (null) | PASS | PASS | PASS | missing |
| Bad pubKeyCredParams: first param has bad type (empty object) | PASS | PASS | PASS | missing |
| Bad pubKeyCredParams: first param has bad alg (42) | PASS | PASS | FAIL | missing |
| Bad pubKeyCredParams: first param has bad alg (0) | PASS | PASS | FAIL | missing |
| Clean up the test environment | PASS | PASS | missing | missing |
| createcredential-resident-key.https.html | ||||
| Overall | 16 / 16 | 16 / 16 | 0 / 0 | 0 / 0 |
| Harness status | OK | OK | TIMEOUT | ERROR |
| U2F: navigator.credentials.create() with credProps extension, rk=discouraged | PASS | PASS | TIMEOUT | missing |
| U2F: navigator.credentials.create() with credProps extension, rk=preferred | PASS | PASS | NOTRUN | missing |
| U2F: navigator.credentials.create() with credProps extension, rk=required | PASS | PASS | NOTRUN | missing |
| CTAP 2.0 without resident key support: navigator.credentials.create() with credProps extension, rk=discouraged | PASS | PASS | NOTRUN | missing |
| CTAP 2.0 without resident key support: navigator.credentials.create() with credProps extension, rk=preferred | PASS | PASS | NOTRUN | missing |
| CTAP 2.0 without resident key support: navigator.credentials.create() with credProps extension, rk=required | PASS | PASS | NOTRUN | missing |
| CTAP 2.0 with resident key support: navigator.credentials.create() with credProps extension, rk=discouraged | PASS | PASS | NOTRUN | missing |
| CTAP 2.0 with resident key support: navigator.credentials.create() with credProps extension, rk=preferred | PASS | PASS | NOTRUN | missing |
| CTAP 2.0 with resident key support: navigator.credentials.create() with credProps extension, rk=required | PASS | PASS | NOTRUN | missing |
| CTAP 2.1 without resident key support: navigator.credentials.create() with credProps extension, rk=discouraged | PASS | PASS | NOTRUN | missing |
| CTAP 2.1 without resident key support: navigator.credentials.create() with credProps extension, rk=preferred | PASS | PASS | NOTRUN | missing |
| CTAP 2.1 without resident key support: navigator.credentials.create() with credProps extension, rk=required | PASS | PASS | NOTRUN | missing |
| CTAP 2.1 with resident key support: navigator.credentials.create() with credProps extension, rk=discouraged | PASS | PASS | NOTRUN | missing |
| CTAP 2.1 with resident key support: navigator.credentials.create() with credProps extension, rk=preferred | PASS | PASS | NOTRUN | missing |
| CTAP 2.1 with resident key support: navigator.credentials.create() with credProps extension, rk=required | PASS | PASS | NOTRUN | missing |
| createcredential-timeout.https.html | ||||
| Overall | 2 / 2 | 2 / 2 | 2 / 2 | 2 / 2 |
| Harness status | OK | OK | OK | OK |
| ensure create credential times out | PASS | PASS | PASS | PASS |
| getcredential-badargs-rpid.https.html | ||||
| Overall | 8 / 8 | 8 / 8 | 0 / 0 | 0 / 0 |
| Harness status | OK | OK | TIMEOUT | ERROR |
| Bad rpId: empty string | PASS | PASS | TIMEOUT | missing |
| Bad rpId: null | PASS | PASS | NOTRUN | missing |
| Bad rpId: invalid domain (has space) | PASS | PASS | NOTRUN | missing |
| Bad rpId: invalid domain (starts with dash) | PASS | PASS | NOTRUN | missing |
| Bad rpId: invalid domain (starts with number) | PASS | PASS | NOTRUN | missing |
| Bad rpId: host + port | PASS | PASS | NOTRUN | missing |
| Clean up the test environment | PASS | PASS | missing | missing |
| getcredential-badargs-userverification.https.html | ||||
| Overall | 7 / 7 | 7 / 7 | 0 / 0 | 0 / 0 |
| Harness status | OK | OK | TIMEOUT | ERROR |
| Bad userVerification: empty string | PASS | PASS | TIMEOUT | missing |
| Bad userVerification: empty object | PASS | PASS | NOTRUN | missing |
| Bad userVerification: bad value | PASS | PASS | NOTRUN | missing |
| Bad userVerification: null | PASS | PASS | NOTRUN | missing |
| Bad userVerification: "required" | PASS | PASS | NOTRUN | missing |
| Clean up the test environment | PASS | PASS | missing | missing |
| getcredential-extensions.https.html | ||||
| Overall | 9 / 9 | 9 / 9 | 0 / 0 | 0 / 0 |
| Harness status | OK | OK | TIMEOUT | ERROR |
| Bad extensions: extensions is string | PASS | PASS | TIMEOUT | missing |
| extensions is null | PASS | PASS | NOTRUN | missing |
| extensions is empty Array | PASS | PASS | NOTRUN | missing |
| extensions is empty ArrayBuffer | PASS | PASS | NOTRUN | missing |
| ignored extension | PASS | PASS | NOTRUN | missing |
| extension ID too long | PASS | PASS | NOTRUN | missing |
| credProps is only supported at registration | PASS | PASS | NOTRUN | missing |
| Clean up the test environment | PASS | PASS | missing | missing |
| getcredential-large-blob-not-supported.https.html | ||||
| Overall | 6 / 6 | 6 / 6 | 0 / 0 | 0 / 0 |
| Harness status | OK | OK | TIMEOUT | ERROR |
| navigator.credentials.get() with largeBlob.support set | PASS | PASS | TIMEOUT | missing |
| navigator.credentials.get() with largeBlob.read and largeBlob.write set | PASS | PASS | NOTRUN | missing |
| navigator.credentials.get() with largeBlob.read set without authenticator support | PASS | PASS | NOTRUN | missing |
| navigator.credentials.get() with largeBlob.write set without authenticator support | PASS | PASS | NOTRUN | missing |
| Clean up the test environment | PASS | PASS | missing | missing |
| getcredential-large-blob-supported.https.html | ||||
| Overall | 4 / 4 | 4 / 4 | 0 / 0 | 0 / 0 |
| Harness status | OK | OK | TIMEOUT | ERROR |
| navigator.credentials.get() with largeBlob.read set with no blob on authenticator | PASS | PASS | TIMEOUT | missing |
| navigator.credentials.get() read and write blob | PASS | PASS | NOTRUN | missing |
| Clean up the test environment | PASS | PASS | missing | missing |
| getcredential-passing.https.html | ||||
| Overall | 12 / 12 | 12 / 12 | 0 / 0 | 0 / 0 |
| Harness status | OK | OK | TIMEOUT | ERROR |
| passing credentials.get() with default args | PASS | PASS | TIMEOUT | missing |
| passing credentials.create() with no timeout | PASS | PASS | NOTRUN | missing |
| rpId undefined | PASS | PASS | NOTRUN | missing |
| passing credentials.get() with rpId (hostname) | PASS | PASS | NOTRUN | missing |
| authenticatorSelection userVerification undefined | PASS | PASS | NOTRUN | missing |
| authenticatorSelection userVerification preferred | PASS | PASS | NOTRUN | missing |
| authenticatorSelection userVerification discouraged | PASS | PASS | NOTRUN | missing |
| extensions undefined | PASS | PASS | NOTRUN | missing |
| extensions are empty object | PASS | PASS | NOTRUN | missing |
| extensions are dict of empty strings | PASS | PASS | NOTRUN | missing |
| Clean up the test environment | PASS | PASS | missing | missing |
| getcredential-rk-passing.https.html | ||||
| Overall | 4 / 4 | 4 / 4 | 0 / 0 | 0 / 0 |
| Harness status | OK | OK | TIMEOUT | ERROR |
| empty allowCredentials | PASS | PASS | TIMEOUT | missing |
| undefined allowCredentials | PASS | PASS | NOTRUN | missing |
| Clean up the test environment | PASS | PASS | missing | missing |
| getcredential-timeout.https.html | ||||
| Overall | 2 / 2 | 2 / 2 | 0 / 0 | 0 / 0 |
| Harness status | OK | OK | TIMEOUT | ERROR |
| WebAuthn navigator.credentials.get() timeout Tests | PASS | PASS | TIMEOUT | missing |
| idlharness.https.window.html | ||||
| Overall | 70 / 70 | 70 / 70 | 66 / 66 | 66 / 66 |
| Harness status | OK | OK | OK | OK |
| idl_test setup | PASS | PASS | PASS | PASS |
| idl_test validation | PASS | PASS | PASS | PASS |
| Partial dictionary CredentialCreationOptions: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary CredentialCreationOptions: member names are unique | PASS | PASS | PASS | PASS |
| Partial dictionary CredentialRequestOptions: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary CredentialRequestOptions: member names are unique | PASS | PASS | PASS | PASS |
| Partial interface PublicKeyCredential: original interface defined | PASS | PASS | PASS | PASS |
| Partial interface PublicKeyCredential: member names are unique | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientInputs: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientInputs: member names are unique | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientOutputs: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientOutputs: member names are unique | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientInputs[2]: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientInputs[2]: member names are unique | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientOutputs[2]: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientOutputs[2]: member names are unique | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientInputs[3]: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientInputs[3]: member names are unique | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientOutputs[3]: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientOutputs[3]: member names are unique | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientInputs[4]: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientInputs[4]: member names are unique | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientOutputs[4]: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientOutputs[4]: member names are unique | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientInputs[5]: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientInputs[5]: member names are unique | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientOutputs[5]: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientOutputs[5]: member names are unique | PASS | PASS | PASS | PASS |
| Partial dictionary CredentialRequestOptions[2]: member names are unique | PASS | PASS | PASS | PASS |
| Partial dictionary CredentialCreationOptions[2]: member names are unique | PASS | PASS | PASS | PASS |
| Partial dictionary CredentialRequestOptions[3]: member names are unique | PASS | PASS | PASS | PASS |
| Partial dictionary CredentialCreationOptions[3]: member names are unique | PASS | PASS | PASS | PASS |
| PublicKeyCredential interface: existence and properties of interface object | PASS | PASS | PASS | PASS |
| PublicKeyCredential interface object length | PASS | PASS | PASS | PASS |
| PublicKeyCredential interface object name | PASS | PASS | PASS | PASS |
| PublicKeyCredential interface: existence and properties of interface prototype object | PASS | PASS | PASS | PASS |
| PublicKeyCredential interface: existence and properties of interface prototype object's "constructor" property | PASS | PASS | PASS | PASS |
| PublicKeyCredential interface: existence and properties of interface prototype object's @@unscopables property | PASS | PASS | PASS | PASS |
| PublicKeyCredential interface: attribute rawId | PASS | PASS | PASS | PASS |
| PublicKeyCredential interface: attribute response | PASS | PASS | PASS | PASS |
| PublicKeyCredential interface: operation getClientExtensionResults() | PASS | PASS | PASS | PASS |
| PublicKeyCredential interface: operation isUserVerifyingPlatformAuthenticatorAvailable() | PASS | PASS | PASS | PASS |
| AuthenticatorResponse interface: existence and properties of interface object | PASS | PASS | PASS | PASS |
| AuthenticatorResponse interface object length | PASS | PASS | PASS | PASS |
| AuthenticatorResponse interface object name | PASS | PASS | PASS | PASS |
| AuthenticatorResponse interface: existence and properties of interface prototype object | PASS | PASS | PASS | PASS |
| AuthenticatorResponse interface: existence and properties of interface prototype object's "constructor" property | PASS | PASS | PASS | PASS |
| AuthenticatorResponse interface: existence and properties of interface prototype object's @@unscopables property | PASS | PASS | PASS | PASS |
| AuthenticatorResponse interface: attribute clientDataJSON | PASS | PASS | PASS | PASS |
| AuthenticatorAttestationResponse interface: existence and properties of interface object | PASS | PASS | PASS | PASS |
| AuthenticatorAttestationResponse interface object length | PASS | PASS | PASS | PASS |
| AuthenticatorAttestationResponse interface object name | PASS | PASS | PASS | PASS |
| AuthenticatorAttestationResponse interface: existence and properties of interface prototype object | PASS | PASS | PASS | PASS |
| AuthenticatorAttestationResponse interface: existence and properties of interface prototype object's "constructor" property | PASS | PASS | PASS | PASS |
| AuthenticatorAttestationResponse interface: existence and properties of interface prototype object's @@unscopables property | PASS | PASS | PASS | PASS |
| AuthenticatorAttestationResponse interface: attribute attestationObject | PASS | PASS | PASS | PASS |
| AuthenticatorAttestationResponse interface: operation getTransports() | PASS | PASS | FAIL | FAIL |
| AuthenticatorAttestationResponse interface: operation getAuthenticatorData() | PASS | PASS | FAIL | FAIL |
| AuthenticatorAttestationResponse interface: operation getPublicKey() | PASS | PASS | FAIL | FAIL |
| AuthenticatorAttestationResponse interface: operation getPublicKeyAlgorithm() | PASS | PASS | FAIL | FAIL |
| AuthenticatorAssertionResponse interface: existence and properties of interface object | PASS | PASS | PASS | PASS |
| AuthenticatorAssertionResponse interface object length | PASS | PASS | PASS | PASS |
| AuthenticatorAssertionResponse interface object name | PASS | PASS | PASS | PASS |
| AuthenticatorAssertionResponse interface: existence and properties of interface prototype object | PASS | PASS | PASS | PASS |
| AuthenticatorAssertionResponse interface: existence and properties of interface prototype object's "constructor" property | PASS | PASS | PASS | PASS |
| AuthenticatorAssertionResponse interface: existence and properties of interface prototype object's @@unscopables property | PASS | PASS | PASS | PASS |
| AuthenticatorAssertionResponse interface: attribute authenticatorData | PASS | PASS | PASS | PASS |
| AuthenticatorAssertionResponse interface: attribute signature | PASS | PASS | PASS | PASS |
| AuthenticatorAssertionResponse interface: attribute userHandle | PASS | PASS | PASS | PASS |
| securecontext.http.html | ||||
| Overall | 2 / 2 | 2 / 2 | 2 / 2 | 2 / 2 |
| Harness status | OK | OK | OK | OK |
| no navigator.credentials.create in non-secure context | PASS | PASS | PASS | PASS |
| securecontext.https.html | ||||
| Overall | 2 / 2 | 2 / 2 | 2 / 2 | 2 / 2 |
| Harness status | OK | OK | OK | OK |
| navigator.credentials.create exists in secure context | PASS | PASS | PASS | PASS |
| webauthn-testdriver-basic.https.html | ||||
| Overall | 5 / 5 | 5 / 5 | 0 / 0 | 0 / 0 |
| Harness status | OK | OK | TIMEOUT | ERROR |
| Set up the test environment | PASS | PASS | FAIL | missing |
| Create a credential | PASS | PASS | TIMEOUT | missing |
| Get an assertion | PASS | PASS | NOTRUN | missing |
| Clean up the test environment | PASS | PASS | NOTRUN | missing |