<!DOCTYPE html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script>
function load() {
    window.context = document.body.appendChild(document.createElement("canvas")).getContext("webgl");

    runTest();
}

function enableExtension(name) {
    window.context.getExtension(name);
}

function test() {
    let suite = InspectorTest.createAsyncSuite("Canvas.extensions");

    suite.addTestCase({
        name: "Canvas.extensions.enable",
        description: "Check that enabling an extension notifies the frontend.",
        test(resolve, reject) {
            let canvases = Array.from(WI.canvasManager.canvasCollection).filter((canvas) => canvas.contextType === WI.Canvas.ContextType.WebGL);
            if (!canvases.length) {
                reject("Missing WebGL canvas.");
                return;
            }

            InspectorTest.assert(canvases.length === 1, "There should only be one WebGL canvas.");
            InspectorTest.assert(canvases[0].extensions.size === 0, "The canvas should have no extensions enabled after being created");

            const extensionName = "WEBGL_lose_context";
            canvases[0].awaitEvent(WI.Canvas.Event.ExtensionEnabled).then((event) => {
                InspectorTest.expectEqual(event.data.extension, extensionName, `The newly enabled extension should be "${extensionName}".`);
                InspectorTest.assert(canvases[0].extensions.size === 1, "The canvas should now have one extension.");
                InspectorTest.assert(canvases[0].extensions.has(event.data.extension), `The one extension should be "${extensionName}".`);
            }).then(resolve, reject);

            InspectorTest.evaluateInPage(`enableExtension("${extensionName}")`);
        }
    });

    suite.runTestCasesAndFinish();
}
</script>
</head>
<body onload="load()">
    <p>Test that CanvasManager is notified whenever a WebGL extension is enabled for a given canvas context.</p>
</body>
</html>
