<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test counting of third-party script loads</title>
    <script src="/js-test-resources/js-test.js"></script>
    <script src="resources/util.js"></script>
</head>
<body onload="runTest()">
<script>
    const thirdPartyOrigin = "http://localhost:8000";
    const thirdPartyBaseUrl = thirdPartyOrigin + "/resourceLoadStatistics/resources";

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

    function runTest() {
        switch (document.location.hash) {
            case "":
                if (window.testRunner && window.internals) {
                    testRunner.waitUntilDone();
                    setEnableFeature(true, function() {
                        testRunner.installStatisticsDidScanDataRecordsCallback(finishTest);
                        document.location.hash = "step1";
                        runTest();
                    });
                }
                break;
            case "#step1":
                document.location.hash = "step2";
                let scriptElement = document.createElement("script");
                scriptElement.onload = runTest;
                scriptElement.src = thirdPartyBaseUrl + "/dummy.js?dummyParam=" + Math.random();
                document.body.appendChild(scriptElement);
                break;
            case "#step2":
                testRunner.statisticsNotifyObserver();
                break;
        }
    }
</script>
</body>
</html>
