<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Tests for Classification Based on Mixed Statistics</title>
    <script src="/js-test-resources/js-test.js"></script>
    <script src="resources/util.js"></script>
</head>
<body>
<script>
    const hostUnderTest = "127.0.0.1:8000";
    const statisticsUrl = "http://" + hostUnderTest + "/temp";
    const topFrameOrigin1 = "http://127.0.0.2:8000/temp";
    const topFrameOrigin2 = "http://127.0.0.3:8000/temp";
    const topFrameOrigin3 = "http://127.0.0.4:8000/temp";

    function completeTest() {
        if (testRunner.isStatisticsPrevalentResource(statisticsUrl))
            testFailed("Host classified as prevalent resource.");
        else
            testPassed("Host did not get classified as prevalent resource.");

        setEnableFeature(false, function() {
            testRunner.notifyDone();
        });
    }

    function runTestRunnerTest() {
        testRunner.setStatisticsPrevalentResource(statisticsUrl, false, function() {
            if (testRunner.isStatisticsPrevalentResource(statisticsUrl))
                testFailed("Host did not get set as non-prevalent resource.");

            testRunner.setStatisticsSubframeUnderTopFrameOrigin(statisticsUrl, topFrameOrigin1);
            testRunner.setStatisticsSubresourceUnderTopFrameOrigin(statisticsUrl, topFrameOrigin2);
            testRunner.setStatisticsSubresourceUniqueRedirectTo(statisticsUrl, topFrameOrigin3);

            testRunner.installStatisticsDidScanDataRecordsCallback(completeTest);

            testRunner.statisticsProcessStatisticsAndDataRecords();
        });
    }

    if (document.location.host === hostUnderTest && window.testRunner && window.internals) {
        testRunner.waitUntilDone();
        setEnableFeature(true, runTestRunnerTest);
    }
</script>
</body>
</html>
