<!DOCTYPE>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script id="myWorker" type="text/worker">
self.onmessage = function(e) {
    var offscreenCanvas = new OffscreenCanvas(50, 50);
    var offscreen2d = offscreenCanvas.getContext("2d");
    offscreen2d.commit().then(function() {
        self.postMessage("NoError");    
    }, ex => {
        self.postMessage(ex.name);
    });
};
</script>
<script>
function makeWorker(script) {
   var blob = new Blob([script]);
   return new Worker(URL.createObjectURL(blob));
}

promise_test(t => {
    var offscreenCanvas = new OffscreenCanvas(50, 50);
    var offscreen2d = offscreenCanvas.getContext("2d");
    return promise_rejects(t, new DOMException("", "InvalidStateError"), offscreen2d.commit());
}, "Calling OffscreenCanvas.commit() on main without transferControlToOffscreen rejects promise with an exception.");

promise_test(t => {
    var offscreenCanvas = new OffscreenCanvas(50, 50);
    var gl = offscreenCanvas.getContext("webgl");
    gl.clearColor(1.0, 0.0, 0.0, 1.0);
    gl.clear(gl.COLOR_BUFFER_BIT);
    return promise_rejects(t, new DOMException("", "InvalidStateError"), gl.commit());
}, "Calling WebGL's commit() on main without transferControlToOffscreen rejects promise with an exception.");

promise_test(t => {
    var canvas = document.createElement('canvas');
    canvas.width = 50;
    canvas.height = 50;
    var gl = canvas.getContext("webgl");
    gl.clearColor(1.0, 0.0, 0.0, 1.0);
    gl.clear(gl.COLOR_BUFFER_BIT);
    return promise_rejects(t, new DOMException("", "InvalidStateError"), gl.commit());
}, "Calling WebGL's commit() on main without an OffscreenCanvas rejects promise with an exception.");

async_test(function() {
    var worker = makeWorker(document.getElementById("myWorker").textContent);
    worker.onmessage = this.step_func(function (e) {
        assert_equals(e.data, "InvalidStateError", "Expected exception on worker but receives " + e.data);
        this.done();
    });
    worker.postMessage("");
}, "Calling OffscreenCanvas.commit() on worker without transferControlToOffscreen rejects promise with an exception.");



</script>
