tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>