createcredential-excludecredentials.https.html (3203B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <title>WebAuthn navigator.credentials.create() excludeCredentials Tests</title> 4 <meta name="timeout" content="long"> 5 <link rel="author" title="Adam Powers" href="mailto:adam@fidoalliance.org"> 6 <link rel="help" href="https://w3c.github.io/webauthn/#iface-credential"> 7 <script src="/resources/testharness.js"></script> 8 <script src="/resources/testharnessreport.js"></script> 9 <script src="/resources/testdriver.js"></script> 10 <script src="/resources/testdriver-vendor.js"></script> 11 <script src=helpers.js></script> 12 <body></body> 13 <script> 14 standardSetup(function() { 15 "use strict"; 16 17 // bad excludeCredentials values 18 new CreateCredentialsTest("options.publicKey.excludeCredentials", "hi mom").runTest("Bad excludeCredentials: string", TypeError); 19 new CreateCredentialsTest("options.publicKey.excludeCredentials", {}).runTest("Bad excludeCredentials: empty object", TypeError); 20 // TODO: bad excludeCredentials with [{.type}] or [{.id}] or [{.transports}] wrong 21 22 // good excludeCredentials values 23 new CreateCredentialsTest({path: "options.publicKey.excludeCredentials", value: undefined}).runTest("excludeCredentials missing"); 24 new CreateCredentialsTest("options.publicKey.excludeCredentials", []).runTest("excludeCredentials empty array"); 25 26 // proper excludeCredentials behavior 27 // should error on excluding existing credential 28 promise_test((t) => { 29 var cred1; 30 return Promise.resolve() 31 .then(() => { 32 return createCredential(); 33 }) 34 .then((cred) => { 35 cred1 = cred; 36 var excludeCred = { 37 id: cred.rawId, 38 type: "public-key" 39 }; 40 var args = { 41 options: { 42 publicKey: { 43 excludeCredentials: [excludeCred] 44 } 45 } 46 }; 47 var p = createCredential(args); 48 return promise_rejects_dom(t, "InvalidStateError", p, "expected to fail on excluded credential"); 49 }); 50 }, "exclude existing credential"); 51 52 // should not error on excluding random credential 53 promise_test(() => { 54 return Promise.resolve() 55 .then(() => { 56 return createCredential(); 57 }) 58 .then(() => { 59 var randomCredId = new Uint8Array(162); 60 window.crypto.getRandomValues(randomCredId); 61 62 var excludeCred = { 63 id: randomCredId, 64 type: "public-key" 65 }; 66 var args = { 67 options: { 68 publicKey: { 69 excludeCredentials: [excludeCred] 70 } 71 } 72 }; 73 return createCredential(args); 74 }); 75 }, "exclude random (non-existing) credential"); 76 77 // TODO: exclude including transport type (USB, BLE, NFC) 78 }); 79 80 /* JSHINT */ 81 /* globals standardSetup, CreateCredentialsTest, createCredential, promise_test, promise_rejects_dom */ 82 </script>