<!doctype html>
<title>Canvas loss and restoration when size is extremely large and then restored to a reasonable value</title>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script>
async_test(t => {
var canvas = document.createElement('canvas')
canvas.addEventListener('contextlost', t.step_func(contextLost));
canvas.addEventListener('contextrestored', t.step_func(contextRestored));
var ctx = canvas.getContext('2d');
var lostEventHasFired = false;
verifyContextLost(false);
var bigsize = 1000000000;
canvas.width = bigsize;
canvas.height = bigsize;
verifyContextLost(true);
canvas.width = bigsize;
verifyContextLost(true);
// Restore a reasonable dimension
canvas.width = 100;
canvas.height = 100;
verifyContextLost(true); // Restoration is async.
function verifyContextLost(shouldBeLost) {
// Verify context loss experimentally as well as isContextLost()
ctx.fillStyle = '#0f0';
ctx.fillRect(0, 0, 1, 1);
var contextLostTest = ctx.getImageData(0, 0, 1, 1).data[1] == 0;
assert_equals(contextLostTest, shouldBeLost, 'image data is blank');
assert_equals(ctx.isContextLost(), shouldBeLost, 'context is lost');
}
function contextLost() {
assert_false(lostEventHasFired, 'contextlost event has fired');
lostEventHasFired = true;
verifyContextLost(true);
}
function contextRestored() {
assert_true(lostEventHasFired, 'contextlost event has fired');
verifyContextLost(false);
t.done();
}
});
</script>