<!DOCTYPE html>
<html>
<body>
<script src="/js-test-resources/js-test.js"></script>
<script src="/js-test-resources/ui-helper.js"></script>
<script>
    description("Tests that user interaction is not reported repeatedly within a short period of time.");
    jsTestIsAsync = true;

    const topFrameOrigin = "http://127.0.0.1:8000";
    const subFrameOrigin = "http://localhost:8000";

    function activateElement(elementId, callback) {
        var element = document.getElementById(elementId);
        var centerX = element.offsetLeft + element.offsetWidth / 2;
        var centerY = element.offsetTop + element.offsetHeight / 2;
        UIHelper.activateAt(centerX, centerY).then(
            function() {
                callback();
            },
            function() {
                testFailed("Promise rejected.");
                finishJSTest();
            }
        );
    }

    function firstInteraction() {
        shouldBeFalse("testRunner.isStatisticsHasHadUserInteraction(topFrameOrigin)");
        shouldBeFalse("testRunner.isStatisticsHasHadUserInteraction(subFrameOrigin)");
        activateElement("testElement", secondInteraction);
    }

    function secondInteraction() {
        shouldBeTrue("testRunner.isStatisticsHasHadUserInteraction(topFrameOrigin)");
        shouldBeFalse("testRunner.isStatisticsHasHadUserInteraction(subFrameOrigin)");

        if (testRunner)
            testRunner.setStatisticsHasHadUserInteraction(topFrameOrigin, false);

        shouldBeFalse("testRunner.isStatisticsHasHadUserInteraction(topFrameOrigin)");

        activateElement("testElement", finishTest);
    }

    function finishTest() {
        shouldBeFalse("testRunner.isStatisticsHasHadUserInteraction(topFrameOrigin)");
        shouldBeFalse("testRunner.isStatisticsHasHadUserInteraction(subFrameOrigin)");

        finishJSTest();
    }

    onload = function() {
        if (internals)
            internals.setResourceLoadStatisticsEnabled(true);

        shouldBe("document.location.origin", "topFrameOrigin");

        firstInteraction();
    };
</script>
<div id="testElement">This is the test element</div>
</body>
</html>