| <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| <html> |
| <head> |
| <script src="../../resources/js-test.js"></script> |
| </head> |
| <body> |
| <script> |
| description("Tests to ensure correct behaviour of canvas loss and restoration when size is extremely large then, restored to a reasonable value."); |
| |
| if (window.testRunner) { |
| testRunner.dumpAsText(); |
| testRunner.waitUntilDone(); |
| } |
| |
| var canvas = document.createElement('canvas') |
| canvas.addEventListener('contextlost', contextLost); |
| canvas.addEventListener('contextrestored', contextRestored); |
| var ctx = canvas.getContext('2d'); |
| var lostEventHasFired = false; |
| verifyContextLost(false); |
| |
| // WebIDL defines width and height as int. 2147483647 is int max. |
| var extremelyLargeNumber = 2147483647; |
| canvas.width = extremelyLargeNumber; |
| canvas.height = extremelyLargeNumber; |
| verifyContextLost(true); |
| canvas.width = extremelyLargeNumber; |
| verifyContextLost(true); |
| canvas.width = 100; |
| canvas.height = 100; |
| verifyContextLost(true); // Restoration is async. |
| // Restore a sane dimension |
| |
| function verifyContextLost(shouldBeLost) { |
| // Verify context loss experimentally as well as isContextLost() |
| ctx.fillStyle = '#0f0'; |
| ctx.fillRect(0, 0, 1, 1); |
| contextLostTest = ctx.getImageData(0, 0, 1, 1).data[1] == 0; |
| if (shouldBeLost) { |
| shouldBeTrue('contextLostTest'); |
| shouldBeTrue('ctx.isContextLost()'); |
| } else { |
| shouldBeFalse('contextLostTest'); |
| shouldBeFalse('ctx.isContextLost()'); |
| } |
| } |
| |
| function contextLost() { |
| if (lostEventHasFired) { |
| testFailed('Context lost event was dispatched more than once.'); |
| } else { |
| testPassed('Graphics context lost event dispatched.'); |
| } |
| lostEventHasFired = true; |
| verifyContextLost(true); |
| } |
| |
| function contextRestored() { |
| if (lostEventHasFired) { |
| testPassed('Context restored event dispatched after context lost.'); |
| } else { |
| testFailed('Context restored event was dispatched before a context lost event.'); |
| } |
| verifyContextLost(false); |
| if (window.testRunner) { |
| testRunner.notifyDone(); |
| } |
| } |
| </script> |
| </body> |
| </html> |