<!DOCTYPE html>
<meta charset="utf-8">
<title>navigator.credentials.create() largeBlob extension tests with no authenticator support</title>
<meta name="timeout" content="long">
<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";

  new CreateCredentialsTest("options.publicKey.extensions", {
    largeBlob: {
      write: new ArrayBuffer(),
    },
  }).runTest("navigator.credentials.create() with largeBlob.write set", "NotSupportedError");

  new CreateCredentialsTest("options.publicKey.extensions", {
    largeBlob: {
      read: true,
    },
  }).runTest("navigator.credentials.create() with largeBlob.read set", "NotSupportedError");

  promise_test(async t => {
    const credential = await createCredential({
      options: {
        publicKey: {
          authenticatorSelection: {
            requireResidentKey: true,
          },
          extensions: {
            largeBlob: {
              support: "preferred",
            },
          },
        },
      },
    });
    assert_own_property(credential.getClientExtensionResults(), "largeBlob");
    assert_false(credential.getClientExtensionResults().largeBlob.supported);
    assert_not_own_property(credential.getClientExtensionResults().largeBlob, "blob");
    assert_not_own_property(credential.getClientExtensionResults().largeBlob, "written");
  }, "navigator.credentials.create() with largeBlob.support set to preferred and not supported by authenticator");

  promise_test(async t => {
    const credential = await createCredential({
      options: {
        publicKey: {
          authenticatorSelection: {
            requireResidentKey: true,
          },
          extensions: {
            largeBlob: {},
          },
        },
      },
    });
    assert_own_property(credential.getClientExtensionResults(), "largeBlob");
    assert_false(credential.getClientExtensionResults().largeBlob.supported);
    assert_not_own_property(credential.getClientExtensionResults().largeBlob, "blob");
    assert_not_own_property(credential.getClientExtensionResults().largeBlob, "written");
  }, "navigator.credentials.create() with largeBlob.support not set and not supported by authenticator");

  new CreateCredentialsTest("options.publicKey.extensions", {
    largeBlob: {
      support: "required"
    },
  }).runTest("navigator.credentials.create() with largeBlob.support set to required and not supported by authenticator", "NotAllowedError");
}, {
  protocol: "ctap2_1",
  hasResidentKey: true,
  hasUserVerification: true,
  isUserVerified: true,
});
</script>
