diff options
Diffstat (limited to 'testing/web-platform/tests/webauthn/createcredential-excludecredentials.https.html')
-rw-r--r-- | testing/web-platform/tests/webauthn/createcredential-excludecredentials.https.html | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/testing/web-platform/tests/webauthn/createcredential-excludecredentials.https.html b/testing/web-platform/tests/webauthn/createcredential-excludecredentials.https.html new file mode 100644 index 0000000000..2b1eec19b7 --- /dev/null +++ b/testing/web-platform/tests/webauthn/createcredential-excludecredentials.https.html @@ -0,0 +1,82 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>WebAuthn navigator.credentials.create() excludeCredentials Tests</title> +<meta name="timeout" content="long"> +<link rel="author" title="Adam Powers" href="mailto:adam@fidoalliance.org"> +<link rel="help" href="https://w3c.github.io/webauthn/#iface-credential"> +<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> +standardSetup(function() { + "use strict"; + + // bad excludeCredentials values + new CreateCredentialsTest("options.publicKey.excludeCredentials", "hi mom").runTest("Bad excludeCredentials: string", TypeError); + new CreateCredentialsTest("options.publicKey.excludeCredentials", {}).runTest("Bad excludeCredentials: empty object", TypeError); + // TODO: bad excludeCredentials with [{.type}] or [{.id}] or [{.transports}] wrong + + // good excludeCredentials values + new CreateCredentialsTest({path: "options.publicKey.excludeCredentials", value: undefined}).runTest("excludeCredentials missing"); + new CreateCredentialsTest("options.publicKey.excludeCredentials", []).runTest("excludeCredentials empty array"); + + // proper excludeCredentials behavior + // should error on excluding existing credential + promise_test((t) => { + var cred1; + return Promise.resolve() + .then(() => { + return createCredential(); + }) + .then((cred) => { + cred1 = cred; + var excludeCred = { + id: cred.rawId, + type: "public-key" + }; + var args = { + options: { + publicKey: { + excludeCredentials: [excludeCred] + } + } + }; + var p = createCredential(args); + return promise_rejects_dom(t, "InvalidStateError", p, "expected to fail on excluded credential"); + }); + }, "exclude existing credential"); + + // should not error on excluding random credential + promise_test(() => { + return Promise.resolve() + .then(() => { + return createCredential(); + }) + .then(() => { + var randomCredId = new Uint8Array(162); + window.crypto.getRandomValues(randomCredId); + + var excludeCred = { + id: randomCredId, + type: "public-key" + }; + var args = { + options: { + publicKey: { + excludeCredentials: [excludeCred] + } + } + }; + return createCredential(args); + }); + }, "exclude random (non-existing) credential"); + + // TODO: exclude including transport type (USB, BLE, NFC) +}); + +/* JSHINT */ +/* globals standardSetup, CreateCredentialsTest, createCredential, promise_test, promise_rejects_dom */ +</script> |