| // The following functions depend on functions in js-test-pre.js. |
| var canvas, context; |
| |
| function testDataRetrievalAllowed() { |
| // Control tests. |
| debug("Testing data retrieval on an untainted canvas:"); |
| canvas = document.createElement("canvas"); |
| canvas.width = 100; |
| canvas.height = 100; |
| |
| shouldNotThrow("canvas.getContext('2d').getImageData(0, 0, 100, 100)"); |
| shouldNotThrow("canvas.toDataURL()"); |
| |
| // CORS tests. |
| debug("<br />Testing data retrieval on a canvas tainted by a remote video pattern:"); |
| canvas = document.createElement("canvas"); |
| canvas.width = 100; |
| canvas.height = 100; |
| context = canvas.getContext("2d"); |
| context.fillStyle = context.createPattern(video, "repeat"); |
| context.fillRect(0, 0, 100, 100); |
| |
| shouldThrowErrorName("context.getImageData(0, 0, 100, 100)", "SecurityError"); |
| shouldThrowErrorName("canvas.toDataURL()", "SecurityError"); |
| } |
| |
| function testDataRetrievalForbidden(description) { |
| // Control tests. |
| debug("Testing data retrieval on an untainted canvas:"); |
| canvas = document.createElement("canvas"); |
| canvas.width = 100; |
| canvas.height = 100; |
| |
| shouldNotThrow("canvas.getContext('2d').getImageData(0, 0, 100, 100)"); |
| shouldNotThrow("canvas.toDataURL()"); |
| |
| // CORS tests. |
| debug("<br />Testing data retrieval on a canvas tainted by a pattern generated by a " + description + ":"); |
| canvas = document.createElement("canvas"); |
| canvas.width = 100; |
| canvas.height = 100; |
| context = canvas.getContext("2d"); |
| context.fillStyle = context.createPattern(video, "repeat"); |
| context.fillRect(0, 0, 100, 100); |
| |
| shouldThrowErrorName("context.getImageData(0, 0, 100, 100)", "SecurityError"); |
| shouldThrowErrorName("canvas.toDataURL()", "SecurityError"); |
| } |