<!DOCTYPE html>
<meta charset="utf-8">
<title>WebAuthn navigator.credentials.get() 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 credPromise = createCredential();
    var dummyExtension = {
        foo: true,
        bar: "yup"
    };
    var badExtId = {};
    badExtId[createRandomString(65)] = dummyExtension;

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

    // empty extensions
    new GetCredentialsTest("options.publicKey.extensions", null)
        .addCredential(credPromise)
        .runTest("extensions is null");
    new GetCredentialsTest("options.publicKey.extensions", [])
        .addCredential(credPromise)
        .runTest("extensions is empty Array");
    new GetCredentialsTest("options.publicKey.extensions", new ArrayBuffer(0))
        .addCredential(credPromise)
        .runTest("extensions is empty ArrayBuffer");

    // unknown extensions should be ignored
    new GetCredentialsTest("options.publicKey.extensions", {foo: dummyExtension})
        .addCredential(credPromise)
        .runTest("ignored extension");
    new GetCredentialsTest("options.publicKey.extensions", {badExtId: dummyExtension})
        .addCredential(credPromise)
        .runTest("extension ID too long");

    new GetCredentialsTest("options.publicKey.extensions", {credProps: true})
        .addCredential(credPromise)
        .runTest("credProps is only supported at registration", "NotSupportedError");

    new GetCredentialsTest("options.publicKey.extensions", {payment: {isPayment:true}})
        .addCredential(credPromise)
        .runTest("Payment extension is only supported at registration", "NotAllowedError");

    promise_test(async t => {
      const id = (await credPromise).rawId;
      const assertion = await navigator.credentials.get({publicKey: {
        challenge: new Uint8Array(),
        allowCredentials: [{
          id: id,
          type: "public-key",
        }],
        extensions: {
          prf: {
            eval: {
              first: new Uint8Array([1,2,3,4]).buffer,
            },
          },
        },
      }});

      assert_not_own_property(assertion.getClientExtensionResults().prf, 'results');
    }, "navigator.credentials.get() with prf requested but no support in authenticator");
});

/* JSHINT */
/* globals standardSetup, GetCredentialsTest, createRandomString, createCredential */
</script>
