| <!DOCTYPE html> |
| <body> |
| <script> |
| |
| function fail() { |
| document.title = 'FAIL'; |
| } |
| |
| function pass() { |
| if (!document.title) |
| document.title = 'PASS'; |
| } |
| |
| function should_throw(test) { |
| try { |
| test(); |
| fail(); |
| } catch (e) { |
| if (e.name != 'SecurityError') |
| fail(); |
| } |
| } |
| |
| const runNoCorsTest = function () { |
| const image = new Image(); |
| image.src = './empty16x16.png'; |
| image.onerror = fail; |
| image.onload = () => { |
| const canvas = document.createElement('canvas'); |
| document.body.appendChild(canvas); |
| const ctx = canvas.getContext('2d'); |
| ctx.drawImage(image, 0, 0, image.width, image.height); |
| should_throw(() => { ctx.getImageData(0, 0, canvas.width, canvas.height); }); |
| should_throw(() => { canvas.toBlob(fail); }); |
| should_throw(() => { canvas.toDataURL(); }); |
| pass(); |
| } |
| } |
| |
| const runCorsTest = function () { |
| const image = new Image(); |
| image.setAttribute('crossorigin', ''); |
| image.src = './empty16x16.png'; |
| image.onload = fail; |
| image.onerror = pass; |
| } |
| |
| const runNoCorsTestWithoutSecurity = function () { |
| const image = new Image(); |
| image.src = './empty16x16.png'; |
| image.onerror = fail; |
| image.onload = () => { |
| const canvas = document.createElement('canvas'); |
| document.body.appendChild(canvas); |
| const ctx = canvas.getContext('2d'); |
| ctx.drawImage(image, 0, 0, image.width, image.height); |
| try { |
| ctx.getImageData(0, 0, canvas.width, canvas.height); |
| canvas.toBlob(() => {}); |
| canvas.toDataURL(); |
| pass(); |
| } catch (e) { |
| fail(); |
| } |
| } |
| } |
| |
| const runCorsTestWithoutSecurity = function () { |
| const image = new Image(); |
| image.setAttribute('crossorigin', ''); |
| image.src = './empty16x16.png'; |
| image.onerror = fail; |
| image.onload = () => { |
| const canvas = document.createElement('canvas'); |
| document.body.appendChild(canvas); |
| const ctx = canvas.getContext('2d'); |
| ctx.drawImage(image, 0, 0, image.width, image.height); |
| try { |
| ctx.getImageData(0, 0, canvas.width, canvas.height); |
| canvas.toBlob(() => {}); |
| canvas.toDataURL(); |
| pass(); |
| } catch (e) { |
| fail(); |
| } |
| } |
| } |
| |
| const tests = { |
| 'no_cors': runNoCorsTest, |
| 'cors': runCorsTest, |
| 'no_cors_with_file_access': runNoCorsTestWithoutSecurity, |
| 'cors_with_file_access': runCorsTestWithoutSecurity, |
| 'no_cors_with_disable_web_security': runNoCorsTestWithoutSecurity, |
| 'cors_with_disable_web_security': runCorsTestWithoutSecurity, |
| }[(new URL(location.href)).searchParams.get('test')](); |
| |
| </script> |
| </body> |