blob: 60df90422524cc6e47bcfe8900f224eccc097d60 [file] [log] [blame]
<!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>