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