<!DOCTYPE html>
<html>
<head>
<!-- This is a test for https://bugs.webkit.org/show_bug.cgi?id=197650 -->
<title>Certificate validation and basic authentication</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<script>
function with_iframe(url) {
    return new Promise(function(resolve) {
        var frame = document.createElement('iframe');
        frame.className = 'test-iframe';
        frame.src = url;
        frame.onload = function() { resolve(frame); };
        document.body.appendChild(frame);
    });
}

async function doTest()
{
    assert_true(!!window.testRunner, "Test requires testRunner");

    window.testRunner.setAllowsAnySSLCertificate(true);
    window.testRunner.setHandlesAuthenticationChallenges(true);
    window.testRunner.setAuthenticationUsername("user");
    window.testRunner.setAuthenticationPassword("");

    const currentCallbackCounts = window.testRunner.serverTrustEvaluationCallbackCallsCount;

    const iframe = await with_iframe("https://localhost:8443/resources/basic-auth.php?uid=user");
    iframe.remove();

    assert_equals(window.testRunner.serverTrustEvaluationCallbackCallsCount - currentCallbackCounts, 1);
}

doTest().then(done, (e) => { assert_unreached("test failed: " + e); done(); });

</script>
</body>
</html>
