<!DOCTYPE html><!-- webkit-test-runner [ WebAuthenticationModernEnabled=true ] -->
<title>Web Authentication API: CTAP HID success cases with a mock hid authenticator.</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="./resources/util.js"></script>
<script>
    const defaultOptions = {
        publicKey: {
            rp: {
                name: "example.com"
            },
            user: {
                name: "John Appleseed",
                id: asciiToUint8Array("123456"),
                displayName: "John",
            },
            challenge: asciiToUint8Array("123456"),
            pubKeyCredParams: [{ type: "public-key", alg: -7 }],
        }
    };

    promise_test(function(t) {
        if (window.internals)
            internals.setMockWebAuthenticationConfiguration({ hid: { stage: "request", subStage: "msg", error: "success", payloadBase64: [testCreationMessageBase64], keepAlive: true } });
        return navigator.credentials.create(defaultOptions).then(credential => {
            assert_not_equals(credential, undefined);
            assert_not_equals(credential, null);
        });
    }, "CTAP HID with keep alive message in a mock hid authenticator.");

    promise_test(function(t) {
        if (window.internals)
            internals.setMockWebAuthenticationConfiguration({ hid: { stage: "request", subStage: "msg", error: "success", payloadBase64: [testCreationMessageBase64], fastDataArrival: true } });
        return navigator.credentials.create(defaultOptions).then(credential => {
            assert_not_equals(credential, undefined);
            assert_not_equals(credential, null);
        });
    }, "CTAP HID with fast data arrival in a mock hid authenticator.");

    promise_test(function(t) {
        if (window.internals)
            internals.setMockWebAuthenticationConfiguration({ hid: { stage: "info", subStage: "init", error: "empty-report", payloadBase64: [testCreationMessageBase64], continueAfterErrorData: true } });
        return navigator.credentials.create(defaultOptions).then(credential => {
            assert_not_equals(credential, undefined);
            assert_not_equals(credential, null);
        });
    }, "CTAP HID with continue after empty report in a mock hid authenticator.");

    promise_test(function(t) {
        if (window.internals)
            internals.setMockWebAuthenticationConfiguration({ hid: { stage: "info", subStage: "init", error: "wrong-channel-id", payloadBase64: [testCreationMessageBase64], continueAfterErrorData: true } });
        return navigator.credentials.create(defaultOptions).then(credential => {
            assert_not_equals(credential, undefined);
            assert_not_equals(credential, null);
        });
    }, "CTAP HID with continue after wrong channel id in a mock hid authenticator.");

    promise_test(function(t) {
        if (window.internals)
            internals.setMockWebAuthenticationConfiguration({ hid: { stage: "info", subStage: "init", error: "wrong-nonce", payloadBase64: [testCreationMessageBase64], continueAfterErrorData: true } });
        return navigator.credentials.create(defaultOptions).then(credential => {
            assert_not_equals(credential, undefined);
            assert_not_equals(credential, null);
        });
    }, "CTAP HID with continue after wrong nonce error in a mock hid authenticator.");
</script>
