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