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

    const options = {
        rp: {name: "Acme"},
        user: {id: new Uint8Array(1), name: "name", displayName: ""},
        pubKeyCredParams: [{type: "public-key", alg: -7}],
        attestation: "none",
        challenge: new Uint8Array([0xff]),
    };

    promise_test(async t => {
        const cred = await navigator.credentials.create({publicKey: options});
        // WebAuthn specifies a precise, JSON-compatible serialization for the
        // clientDataJSON. See
        // https://www.w3.org/TR/webauthn-2/#clientdatajson-serialization
        const expectedPrefix =
            `{"type":"webauthn.create","challenge":"_w","origin":"`;
        const clientData = new TextDecoder().decode(cred.response.clientDataJSON);
        assert_true(clientData.startsWith(expectedPrefix),
                    "The clientData (" + clientData +
                    ") should have the prefix: " + expectedPrefix);


        // Skip over the origin value by finding the closing quote.
        const originEnd = clientData.indexOf('"', expectedPrefix.length);
        assert_not_equals(originEnd, -1, "Should find the closing quote for origin");

        const expectedRemainder = `","crossOrigin":false`;
        assert_true(clientData.substring(originEnd).startsWith(expectedRemainder),
                    "The clientData (" + clientData +
                    ") should have the following after the origin: " +
                    expectedRemainder);
    }, "navigator.credentials.create() has valid clientData");
});
</script>
