<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="/js-test-resources/js-test.js"></script>
</head>
<body>
<script>
    description("Tests for classification based on top frame unique redirects to.");
    jsTestIsAsync = true;

    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";
    const topFrameOrigin4 = "http://127.0.0.5:8000/temp";

    function setEnableFeature(enable) {
        if (!enable)
            testRunner.statisticsResetToConsistentState();
        internals.setResourceLoadStatisticsEnabled(enable);
        testRunner.setCookieStoragePartitioningEnabled(enable);
    }

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

        setEnableFeature(false);
        finishJSTest();
    }

    function runTest() {
        testRunner.setStatisticsTopFrameUniqueRedirectTo(statisticsUrl, topFrameOrigin1);
        testRunner.setStatisticsTopFrameUniqueRedirectTo(statisticsUrl, topFrameOrigin2);
        testRunner.setStatisticsTopFrameUniqueRedirectTo(statisticsUrl, topFrameOrigin3);
        testRunner.setStatisticsTopFrameUniqueRedirectTo(statisticsUrl, topFrameOrigin4);

        testRunner.installStatisticsDidScanDataRecordsCallback(completeTest);

        testRunner.statisticsProcessStatisticsAndDataRecords();
    }

    if (document.location.host === hostUnderTest && window.testRunner && window.internals) {
        setEnableFeature(true);
        testRunner.setStatisticsNotifyPagesWhenDataRecordsWereScanned(true);

        testRunner.setStatisticsPrevalentResource(statisticsUrl, false);
        if (testRunner.isStatisticsPrevalentResource(statisticsUrl))
            testFailed("Host did not get set as non-prevalent resource.");
        runTest();
    }
</script>
</body>
</html>
