<!DOCTYPE html>
<meta charset="utf-8">
<title>WebAuthn navigator.credentials.get() timeout 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=helpers.js></script>
<body></body>
<script>
standardSetup(function() {
    "use strict";

    var credPromise = createCredential();

    // bad timeout values
    // TODO: there is some debate as to whether MAX_UNSIGNED_LONG + 1 and / or -1 should be disallowed since they get converted to valid values internally
    // new GetCredentialsTest({path: "options.publicKey.timeout", value: -1})
    //     .addCredential(credPromise)
    //     .runTest("Bad timeout: negative", new TypeError());
    // new GetCredentialsTest({path: "options.publicKey.timeout", value: 4294967295 + 1})
    //     .addCredential(credPromise)
    //     .runTest("Bad timeout: too big", new TypeError());

    // timeout test
    // XXX: this probably always passes with most mock authenticators unless
    // some setup happens right here to make sure they don't return a credential
    // right away. So... uhh... I guess test this with a real authenticator if you
    // want to see if it really works.
    var timer;
    function startTimer() {
        timer = setTimeout(() => {
            throw new Error("Timer went off before timeout");
        }, 1000);
    }
    function stopTimer() {
        clearTimeout(timer);
    }
    new GetCredentialsTest({path: "options.publicKey.timeout", value: 1})
        .addCredential(credPromise)
        .beforeTest(startTimer)
        .afterTest(stopTimer)
        .runTest("ensure create credential times out");
    // TODO: createCredential.timeout > 1s && setTimeout < 1s
    // TODO: createCredential.timeout < 5s && setTimeout > 5s
});

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