Test files: 18; Total subtests: 203
| Test | ch73 | ed18 | ff65 | sa71 |
|---|---|---|---|---|
| /webauthn/createcredential-badargs-attestation.https.html | OK | OK | OK | OK |
| Bad attestation parameter: attestation is "noneofyourbusiness" | PASS | FAIL | PASS | FAIL |
| Bad attestation parameter: attestation is empty array | PASS | FAIL | PASS | FAIL |
| Bad attestation parameter: attestation is empty object | PASS | FAIL | PASS | FAIL |
| Bad attestation parameter: attestation is empty string | PASS | FAIL | PASS | FAIL |
| Bad attestation parameter: attestation is null | PASS | FAIL | PASS | FAIL |
| /webauthn/createcredential-badargs-authnrselection.https.html | OK | OK | OK | TIMEOUT |
| Bad AuthenticatorSelectionCriteria: authenticatorSelection attachment is empty object | PASS | FAIL | PASS | PASS |
| Bad AuthenticatorSelectionCriteria: authenticatorSelection attachment is empty string | PASS | FAIL | PASS | PASS |
| Bad AuthenticatorSelectionCriteria: authenticatorSelection attachment is null | PASS | FAIL | PASS | PASS |
| Bad AuthenticatorSelectionCriteria: authenticatorSelection attachment platform | PASS | FAIL | FAIL | TIMEOUT |
| Bad AuthenticatorSelectionCriteria: authenticatorSelection is empty string | PASS | FAIL | PASS | PASS |
| Bad AuthenticatorSelectionCriteria: authenticatorSelection is string | PASS | FAIL | PASS | PASS |
| Bad AuthenticatorSelectionCriteria: authenticatorSelection residentKey true | FAIL | FAIL | PASS | NOTRUN |
| Bad AuthenticatorSelectionCriteria: authenticatorSelection userVerification bad value | PASS | FAIL | PASS | NOTRUN |
| Bad AuthenticatorSelectionCriteria: authenticatorSelection userVerification empty object | PASS | FAIL | PASS | NOTRUN |
| Bad AuthenticatorSelectionCriteria: authenticatorSelection userVerification empty string | PASS | FAIL | PASS | NOTRUN |
| Bad AuthenticatorSelectionCriteria: authenticatorSelection userVerification null | PASS | FAIL | PASS | NOTRUN |
| Bad AuthenticatorSelectionCriteria: authenticatorSelection userVerification required | PASS | FAIL | PASS | NOTRUN |
| /webauthn/createcredential-badargs-challenge.https.html | OK | OK | OK | OK |
| Bad challenge: challenge is empty Array | PASS | PASS | PASS | PASS |
| Bad challenge: challenge is empty object | PASS | PASS | PASS | PASS |
| Bad challenge: challenge is null | PASS | PASS | PASS | PASS |
| Bad challenge: challenge is string | PASS | PASS | PASS | PASS |
| Bad challenge: challenge missing | PASS | PASS | PASS | PASS |
| /webauthn/createcredential-badargs-rp.https.html | OK | OK | OK | OK |
| Bad rp: icon is empty String | FAIL | FAIL | FAIL | FAIL |
| Bad rp: icon is null | FAIL | FAIL | FAIL | FAIL |
| Bad rp: icon is object | FAIL | FAIL | FAIL | FAIL |
| Bad rp: id is empty String | PASS | PASS | PASS | FAIL |
| Bad rp: id is invalid domain (has space) | PASS | PASS | PASS | PASS |
| Bad rp: id is invalid domain (starts with dash) | PASS | PASS | PASS | PASS |
| Bad rp: id is invalid domain (starts with number) | PASS | PASS | PASS | PASS |
| Bad rp: id is null | PASS | PASS | PASS | PASS |
| Bad rp: rp is empty object | PASS | PASS | PASS | PASS |
| Bad rp: rp is string | PASS | PASS | PASS | PASS |
| Bad rp: rp missing | PASS | PASS | PASS | PASS |
| rp missing name | PASS | PASS | PASS | PASS |
| /webauthn/createcredential-badargs-user.https.html | OK | OK | OK | TIMEOUT |
| Bad user: ArrayBuffer id is too long (65 bytes) | FAIL | PASS | PASS | NOTRUN |
| Bad user: Float32Array id is too long (68 bytes) | FAIL | PASS | PASS | NOTRUN |
| Bad user: Float64Array id is too long (72 bytes) | FAIL | PASS | PASS | NOTRUN |
| Bad user: Int16Array id is too long (66 bytes) | FAIL | PASS | PASS | NOTRUN |
| Bad user: Int32Array id is too long (68 bytes) | FAIL | PASS | PASS | NOTRUN |
| Bad user: displayName is empty String | FAIL | PASS | FAIL | NOTRUN |
| Bad user: displayName is undefined | PASS | PASS | PASS | NOTRUN |
| Bad user: icon is empty String | FAIL | FAIL | FAIL | NOTRUN |
| Bad user: icon is null | FAIL | FAIL | FAIL | NOTRUN |
| Bad user: icon is object | FAIL | FAIL | FAIL | NOTRUN |
| Bad user: id is empty Array | PASS | PASS | PASS | PASS |
| Bad user: id is empty String | PASS | PASS | PASS | PASS |
| Bad user: id is null | PASS | PASS | PASS | PASS |
| Bad user: id is object | PASS | PASS | PASS | PASS |
| Bad user: id is too long (65 bytes) | FAIL | PASS | PASS | NOTRUN |
| Bad user: id is undefined | PASS | PASS | PASS | PASS |
| Bad user: user is empty object | PASS | PASS | PASS | PASS |
| Bad user: user is string | PASS | PASS | PASS | PASS |
| Bad user: user missing | PASS | PASS | PASS | PASS |
| user missing name | PASS | PASS | PASS | NOTRUN |
| /webauthn/createcredential-excludecredentials.https.html | OK | OK | OK | TIMEOUT |
| Bad excludeCredentials: empty object | PASS | PASS | PASS | PASS |
| Bad excludeCredentials: string | PASS | PASS | PASS | PASS |
| exclude existing credential | PASS | PASS | PASS | NOTRUN |
| exclude random (non-existing) credential | PASS | PASS | PASS | NOTRUN |
| excludeCredentials empty array | PASS | PASS | PASS | PASS |
| excludeCredentials missing | PASS | PASS | PASS | PASS |
| /webauthn/createcredential-extensions.https.html | OK | OK | OK | OK |
| Bad extensions: extension ID too long | FAIL | FAIL | FAIL | FAIL |
| Bad extensions: extensions is string | PASS | FAIL | PASS | FAIL |
| appid in create request | PASS | PASS | PASS | FAIL |
| empty appid in create request | PASS | FAIL | PASS | FAIL |
| extensions is a nonsensical JSON string | PASS | PASS | PASS | PASS |
| null appid in create request | PASS | PASS | PASS | FAIL |
| /webauthn/createcredential-passing.https.html | OK | OK | OK | OK |
| Absurdly large challenge | PASS | PASS | PASS | PASS |
| Bad pubKeyCredParams: pubKeyCredParams is empty Array | FAIL | FAIL | PASS | FAIL |
| DataView challenge | PASS | PASS | PASS | PASS |
| DataView user id | PASS | PASS | PASS | PASS |
| EC256 pubKeyCredParams | PASS | PASS | PASS | PASS |
| Float32Array challenge | PASS | PASS | PASS | PASS |
| Float32Array user id | PASS | PASS | PASS | PASS |
| Float64Array challenge | PASS | PASS | PASS | PASS |
| Int16Array challenge | PASS | PASS | PASS | PASS |
| Int16Array user id | PASS | PASS | PASS | PASS |
| Int32Array challenge | PASS | PASS | PASS | PASS |
| Int32Array user id | PASS | PASS | PASS | PASS |
| Int8Array user id | PASS | PASS | PASS | PASS |
| SelectEC256 pubKeyCredParams from a list | PASS | PASS | PASS | PASS |
| Uint8Array user id | PASS | PASS | PASS | PASS |
| attestation parameter: attestation is "direct" | PASS | PASS | PASS | PASS |
| attestation parameter: attestation is "indirect" | PASS | PASS | PASS | PASS |
| attestation parameter: attestation is "none" | PASS | PASS | PASS | PASS |
| attestation parameter: attestation is undefined | PASS | PASS | PASS | PASS |
| authenticatorSelection attachment undefined | PASS | PASS | PASS | PASS |
| authenticatorSelection default values | PASS | PASS | PASS | PASS |
| authenticatorSelection is empty object | PASS | PASS | PASS | PASS |
| authenticatorSelection is undefined | PASS | PASS | PASS | PASS |
| authenticatorSelection residentKey false | PASS | PASS | PASS | PASS |
| authenticatorSelection residentKey undefined | PASS | PASS | PASS | PASS |
| authenticatorSelection userVerification discouraged | PASS | PASS | PASS | PASS |
| authenticatorSelection userVerification undefined | PASS | PASS | PASS | PASS |
| extensions are dict of empty strings | PASS | PASS | PASS | PASS |
| extensions are empty object | PASS | PASS | PASS | PASS |
| extensions undefined | PASS | PASS | PASS | PASS |
| max length user id | PASS | PASS | PASS | PASS |
| passing credentials.create() with default arguments | PASS | PASS | PASS | PASS |
| passing credentials.create() with no timeout | PASS | PASS | PASS | PASS |
| passing credentials.create() with rpId (hostname) | PASS | PASS | PASS | PASS |
| passing credentials.create() without rp.icon | PASS | PASS | PASS | PASS |
| passing credentials.create() without user.icon | PASS | PASS | PASS | PASS |
| very short user id | PASS | PASS | PASS | PASS |
| /webauthn/createcredential-pubkeycredparams.https.html | OK | OK | OK | OK |
| Bad pubKeyCredParams: first param has bad type ("") | PASS | FAIL | PASS | PASS |
| Bad pubKeyCredParams: first param has bad type ("something-else") | PASS | FAIL | PASS | PASS |
| Bad pubKeyCredParams: first param has bad type (empty object) | PASS | FAIL | PASS | PASS |
| Bad pubKeyCredParams: first param has bad type (null) | PASS | FAIL | PASS | PASS |
| Bad pubKeyCredParams: pubKeyCredParams is null | PASS | PASS | PASS | PASS |
| Bad pubKeyCredParams: pubKeyCredParams is string | PASS | PASS | PASS | PASS |
| Bad pubKeyCredParams: pubKeyCredParams is undefined | PASS | PASS | PASS | PASS |
| /webauthn/createcredential-timeout.https.html | OK | OK | OK | OK |
| ensure create credential times out | PASS | FAIL | PASS | FAIL |
| /webauthn/getcredential-badargs-rpid.https.html | OK | OK | OK | OK |
| Bad rpId: empty string | PASS | PASS | PASS | FAIL |
| Bad rpId: invalid domain (has space) | PASS | PASS | PASS | PASS |
| Bad rpId: invalid domain (starts with dash) | PASS | PASS | PASS | PASS |
| Bad rpId: invalid domain (starts with number) | PASS | PASS | PASS | PASS |
| Bad rpId: null | PASS | PASS | PASS | PASS |
| /webauthn/getcredential-badargs-userverification.https.html | OK | OK | OK | OK |
| Bad userVerification: "required" | PASS | FAIL | FAIL | FAIL |
| Bad userVerification: bad value | PASS | FAIL | PASS | PASS |
| Bad userVerification: empty object | PASS | FAIL | PASS | PASS |
| Bad userVerification: empty string | PASS | FAIL | PASS | PASS |
| Bad userVerification: null | PASS | FAIL | PASS | PASS |
| /webauthn/getcredential-extensions.https.html | OK | OK | OK | OK |
| Bad extensions: extension ID too long | FAIL | FAIL | FAIL | FAIL |
| Bad extensions: extensions is string | PASS | FAIL | PASS | FAIL |
| extensions is a nonsensical JSON string | PASS | PASS | PASS | PASS |
| /webauthn/getcredential-passing.https.html | OK | OK | OK | OK |
| authenticatorSelection userVerification discouraged | PASS | PASS | PASS | PASS |
| authenticatorSelection userVerification preferred | PASS | PASS | PASS | PASS |
| authenticatorSelection userVerification undefined | PASS | PASS | PASS | PASS |
| extensions are dict of empty strings | PASS | PASS | PASS | PASS |
| extensions are empty object | PASS | PASS | PASS | PASS |
| extensions undefined | PASS | PASS | PASS | PASS |
| passing credentials.create() with no timeout | PASS | PASS | PASS | PASS |
| passing credentials.get() with default args | PASS | PASS | PASS | PASS |
| passing credentials.get() with rpId (hostname) | PASS | PASS | PASS | PASS |
| rpId undefined | PASS | PASS | PASS | PASS |
| /webauthn/getcredential-timeout.https.html | OK | OK | OK | TIMEOUT |
| ensure create credential times out | PASS | PASS | PASS | TIMEOUT |
| /webauthn/idlharness.https.window.html | OK | OK | OK | OK |
| AuthenticatorAssertionResponse interface object length | PASS | PASS | PASS | PASS |
| AuthenticatorAssertionResponse interface object name | PASS | PASS | PASS | PASS |
| AuthenticatorAssertionResponse interface: assertionResponse must inherit property "authenticatorData" with the proper type | PASS | PASS | PASS | PASS |
| AuthenticatorAssertionResponse interface: assertionResponse must inherit property "signature" with the proper type | PASS | PASS | PASS | PASS |
| AuthenticatorAssertionResponse interface: assertionResponse must inherit property "userHandle" with the proper type | PASS | PASS | PASS | PASS |
| AuthenticatorAssertionResponse interface: attribute authenticatorData | PASS | FAIL | PASS | PASS |
| AuthenticatorAssertionResponse interface: attribute signature | PASS | FAIL | PASS | PASS |
| AuthenticatorAssertionResponse interface: attribute userHandle | PASS | FAIL | PASS | PASS |
| AuthenticatorAssertionResponse interface: existence and properties of interface object | PASS | FAIL | 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 must be primary interface of assertionResponse | PASS | PASS | PASS | PASS |
| AuthenticatorAttestationResponse interface object length | PASS | PASS | PASS | PASS |
| AuthenticatorAttestationResponse interface object name | PASS | PASS | PASS | PASS |
| AuthenticatorAttestationResponse interface: attribute attestationObject | PASS | FAIL | PASS | PASS |
| AuthenticatorAttestationResponse interface: existence and properties of interface object | PASS | FAIL | 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 |
| AuthenticatorResponse interface object length | PASS | PASS | PASS | PASS |
| AuthenticatorResponse interface object name | PASS | PASS | PASS | PASS |
| AuthenticatorResponse interface: assertionResponse must inherit property "clientDataJSON" with the proper type | PASS | PASS | PASS | PASS |
| AuthenticatorResponse interface: attribute clientDataJSON | PASS | FAIL | PASS | PASS |
| AuthenticatorResponse interface: existence and properties of interface object | 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 |
| Partial dictionary AuthenticationExtensionsClientInputs: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientInputs[2]: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientInputs[3]: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientInputs[4]: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientInputs[5]: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientInputs[6]: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientInputs[7]: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientInputs[8]: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientOutputs: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientOutputs[2]: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientOutputs[3]: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientOutputs[4]: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientOutputs[5]: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientOutputs[6]: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientOutputs[7]: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary AuthenticationExtensionsClientOutputs[8]: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary CredentialCreationOptions: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial dictionary CredentialRequestOptions: original dictionary defined | PASS | PASS | PASS | PASS |
| Partial interface PublicKeyCredential: original interface defined | PASS | PASS | PASS | PASS |
| PublicKeyCredential interface object length | PASS | PASS | PASS | PASS |
| PublicKeyCredential interface object name | PASS | PASS | PASS | PASS |
| PublicKeyCredential interface: attribute rawId | PASS | FAIL | PASS | PASS |
| PublicKeyCredential interface: attribute response | PASS | FAIL | PASS | PASS |
| PublicKeyCredential interface: cred must inherit property "getClientExtensionResults()" with the proper type | PASS | PASS | PASS | PASS |
| PublicKeyCredential interface: cred must inherit property "isUserVerifyingPlatformAuthenticatorAvailable()" with the proper type | PASS | PASS | PASS | PASS |
| PublicKeyCredential interface: cred must inherit property "rawId" with the proper type | PASS | PASS | PASS | PASS |
| PublicKeyCredential interface: cred must inherit property "response" with the proper type | PASS | PASS | PASS | PASS |
| PublicKeyCredential interface: existence and properties of interface object | PASS | FAIL | 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: operation getClientExtensionResults() | PASS | PASS | PASS | PASS |
| PublicKeyCredential interface: operation isUserVerifyingPlatformAuthenticatorAvailable() | PASS | PASS | PASS | PASS |
| PublicKeyCredential must be primary interface of cred | PASS | PASS | PASS | PASS |
| Stringification of assertionResponse | PASS | PASS | PASS | PASS |
| Stringification of cred | PASS | PASS | PASS | PASS |
| idl_test setup | PASS | PASS | PASS | PASS |
| idlharness | PASS | PASS | PASS | PASS |
| /webauthn/securecontext.http.html | OK | OK | OK | OK |
| no navigator.credentials.create in non-secure context | PASS | PASS | PASS | PASS |
| /webauthn/securecontext.https.html | OK | OK | OK | OK |
| navigator.credentials.create exists in secure context | PASS | PASS | PASS | PASS |