blob: a7714ca99f5e086329910bcf81ca184043898ec8 [file] [log] [blame]
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<canvas id='canvas' height='800'></canvas>
<script>
/*
Both these tests are refactored versions of fuzzer code that managed to
lose the context and then create an invalid state stack by saving and drawing
in a particular order. See:
crbug.com/1035224
crbug.com/982321
*/
async_test(t => {
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
// The height is too big, so context will be lost
canvas.setAttribute('height', 16777217);
// Perform any operation with the lost context
ctx.fillRect(0, 0, 10, 10);
// Changing size resets the canvas
canvas.setAttribute('height', 800);
// Encode the canvas to an image, causing it to save
ctx.createPattern(canvas, 'no-repeat');
ctx.save();
// Any context operation here. State stacks will be out of sync unless the
// context loss was handled gracefully.
ctx.fillRect(0, 0, 10, 10);
setTimeout(function() {
t.done();
});
}, "Verify that creating a pattern on a lost context does not cause an invalid state stack. See crbug.com/982321");
async_test(t => {
var canvas = document.createElement('canvas');
document.body.appendChild(canvas);
var ctx = canvas.getContext('2d');
// The height is too big, so context will be lost
canvas.setAttribute('height', 16777215);
// Perform any operation with the lost context
ctx.fillRect(0,0,10,10);
// Changing size resets the canvas
canvas.setAttribute('height', 800);
// Draw to it again
ctx.fillRect(0,0,10,10);
ctx.save();
// Text baseline code involves setting a modifiable state
ctx.textBaseline = 'top';
setTimeout(function() {
// Reset the canvas again on the next frame. This can cause an invalid stack
// unless the context loss was handled gracefully
canvas.setAttribute('width', 800);
t.done();
});
}, "Verify that resetting and drawing to a canvas with a lost context does not cause an invalid state stack. See crbug.com/1035224");
</script>