<!DOCTYPE html>
<meta charset="utf-8">
<title>WebAuthn navigator.credentials.create() extensions 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";

    var dummyExtension = {
        foo: true,
        bar: "yup"
    };

    // bad extension values
    new CreateCredentialsTest("options.publicKey.extensions", "hi mom").runTest("Bad extensions: extensions is string", TypeError);

    // phony extensions
    var randomExtId = {};
    randomExtId[createRandomString(64)] = dummyExtension;
    new CreateCredentialsTest("options.publicKey.extensions", {foo: JSON.stringify(randomExtId)}).runTest("extensions is a nonsensical JSON string");

    // appid
    new CreateCredentialsTest("options.publicKey.extensions", {appid: ""}).runTest("empty appid in create request", "NotSupportedError");
    new CreateCredentialsTest("options.publicKey.extensions", {appid: null}).runTest("null appid in create request", "NotSupportedError");
    new CreateCredentialsTest("options.publicKey.extensions", {appid: "anything"}).runTest("appid in create request", "NotSupportedError");

    promise_test(async t => {
      const credential = await createCredential({
        options: {
          publicKey: {
            extensions: {
              prf: {},
            },
          },
        },
      });
      assert_false(credential.getClientExtensionResults().prf.enabled);
    }, "navigator.credentials.create() with prf requested but no support in authenticator");
});

/* JSHINT */
/* globals standardSetup, CreateCredentialsTest, createRandomString */
</script>
