<!DOCTYPE html>
<html>
<body>
<script src="/js-test-resources/js-test.js"></script>
<script>
description("Tests that we grant User Interaction credit for handled keypresses.");
jsTestIsAsync = true;

const statisticsUrl = "http://127.0.0.1:8000/temp";

onload = function() {
    const testFrame = document.getElementById("testFrame");

    if (window.testRunner && window.internals) {
        internals.setResourceLoadStatisticsEnabled(true);
        testRunner.setStatisticsNotifyPagesWhenDataRecordsWereScanned(true);
    }

    testRunner.setStatisticsPrevalentResource(statisticsUrl, true);
    if (!testRunner.isStatisticsPrevalentResource(statisticsUrl))
        testFailed("Host did not get set as prevalent resource.");

    testRunner.setStatisticsHasHadUserInteraction(statisticsUrl, false);
    if (testRunner.isStatisticsHasHadUserInteraction(statisticsUrl))
        testFailed("Host did not get cleared of user interaction.");

    testInput = document.getElementById("testInput");

    testRunner.installStatisticsDidModifyDataRecordsCallback(function() {
        shouldBeEqualToString("testInput.value", "a");

        if (!testRunner.isStatisticsHasHadUserInteraction(statisticsUrl))
            testFailed("Origin did not get user interaction credit.");
        else
            testPassed("Origin was granted user interaction.");

        setTimeout(function() {
            testFrame.src = "about:blank";
            setTimeout(finishJSTest, 0);
        }, 0);
    });
    testRunner.setStatisticsShouldClassifyResourcesBeforeDataRecordsRemoval(false);
    testRunner.setStatisticsMinimumTimeBetweenDataRecordsRemoval(0);
    testRunner.statisticsProcessStatisticsAndDataRecords();

    debug("Simulate user typing letter 'a' into the field.");
    testInput.focus();
    if (window.eventSender)
        eventSender.keyDown("a");    
}
</script>
<iframe id="testFrame" src="resources/onclick.html"></iframe>
<input id="testInput" type="text"></input>
</body>
</html>
