summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/webauthn/createcredential-excludecredentials.https.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/webauthn/createcredential-excludecredentials.https.html')
-rw-r--r--testing/web-platform/tests/webauthn/createcredential-excludecredentials.https.html82
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>