<!DOCTYPE html>
<meta charset="utf-8">
<title>navigator.credentials.get() largeBlob extension tests with 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(async function(authenticator) {
  "use strict";

  const credential = createCredential({
    options: {
      publicKey: {
        authenticatorSelection: {
          requireResidentKey: true,
        },
        extensions: {
          largeBlob: {
            support: "required",
          },
        },
      },
    },
  });

  promise_test(async t => {
    const assertion = await navigator.credentials.get({publicKey: {
      challenge: new Uint8Array(),
      allowCredentials: [{
        id: (await credential).rawId,
        type: "public-key",
      }],
      extensions: {
        largeBlob: {
          read: true,
        },
      },
    }});
    assert_not_own_property(assertion.getClientExtensionResults().largeBlob, "supported");
    assert_not_own_property(assertion.getClientExtensionResults().largeBlob, "blob");
    assert_not_own_property(assertion.getClientExtensionResults().largeBlob, "written");
  }, "navigator.credentials.get() with largeBlob.read set with no blob on authenticator");

  promise_test(async t => {
    const blob = new TextEncoder().encode("According to all known laws of aviation, "
                                        + "there is no way a bee should be able to fly");
    let assertion = await navigator.credentials.get({publicKey: {
      challenge: new Uint8Array(),
      allowCredentials: [{
        id: (await credential).rawId,
        type: "public-key",
      }],
      extensions: {
        largeBlob: {
          write: blob,
        },
      },
    }});
    assert_not_own_property(assertion.getClientExtensionResults().largeBlob, "blob");
    assert_not_own_property(assertion.getClientExtensionResults().largeBlob, "supported");
    assert_true(assertion.getClientExtensionResults().largeBlob.written);

    assertion = await navigator.credentials.get({publicKey: {
      challenge: new Uint8Array(),
      allowCredentials: [{
        id: (await credential).rawId,
        type: "public-key",
      }],
      extensions: {
        largeBlob: {
          read: true,
        },
      },
    }});
    assert_array_equals(new Uint8Array(assertion.getClientExtensionResults().largeBlob.blob), blob);
    assert_not_own_property(assertion.getClientExtensionResults().largeBlob, "supported");
    assert_not_own_property(assertion.getClientExtensionResults().largeBlob, "written");
  }, "navigator.credentials.get() read and write blob");
}, {
  protocol: "ctap2_1",
  hasResidentKey: true,
  hasUserVerification: true,
  extensions: ["largeBlob"],
  isUserVerified: true,
});
</script>
