<!DOCTYPE html>
<html>
<head>
    <script src="../../../resources/js-test-pre.js"></script>
    <script src="../../media-resources/media-file.js"></script>
</head>
<body>
<pre id="console"></pre>
<script>
    description("Ensure that audio is rendered when tainted by a remote audio resource when CORS is enabled.");
    window.jsTestIsAsync = true;

    function go() {
        let audio = new Audio();
        audio.crossOrigin = "anonymous";
        let mediaFile = findMediaFile("audio", "../../media/resources/1000Hz-sin");
        let type = mimeTypeForExtension(mediaFile.split('.').pop());
        audio.src = "http://localhost:8080/security/resources/video-cross-origin-allow.py?name=" + mediaFile + "&type=" + type;

        context = new AudioContext();
        let mediaSource = context.createMediaElementSource(audio);
        let analyser = context.createAnalyser();
        analyser.fftSize = 32;

        mediaSource.connect(analyser);

        context.resume().then(() => {
            audio.play();
        });

        window.outputArray = new Float32Array(analyser.frequencyBinCount);
        window.silentArray = new Float32Array(analyser.frequencyBinCount);
        silentArray.fill(-Infinity);

        var intervalToken = setInterval(() => {
            analyser.getFloatFrequencyData(outputArray);
        }, 30);

        audio.addEventListener("ended", event => {
            setTimeout(function() {
                clearInterval(intervalToken);
                context.suspend().then(() => {
                    shouldNotBe("outputArray", "silentArray");
                    finishJSTest();
                })
            }, 100);
        });
    }
    window.addEventListener('load', go);
</script>
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>
