<script>
if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

function log(msg)
{
    let p = document.createElement("p");
    p.textContent = msg;
    document.body.appendChild(p);
}

function runTest()
{
    if (!window.internals) {
        log("This test must run inside DRT/WKTR.");
        return;
    }

    log("We should see three changed events.");

    let changedEventsSeen = 0;

    let handleChangedEvent = (event) => {
        log("Saw webglcontextchanged event.");
        changedEventsSeen++;
        if (changedEventsSeen == 3)
            testRunner.notifyDone();
    }

    document.querySelectorAll("canvas").forEach((c) =>
    {
        c.addEventListener("webglcontextchanged", handleChangedEvent, false);
        let gl = c.getContext("webgl");
        gl.clearColor(1, 0, 0, 1);
        gl.clear(gl.COLOR_BUFFER_BIT);
    });

    let gl = document.querySelector("canvas").getContext("webgl");
    window.internals.simulateWebGLContextChanged(gl);
}


window.addEventListener("load", runTest, false);
</script>

<canvas></canvas>
<canvas></canvas>
<canvas></canvas>
