<!DOCTYPE html>
<title>Block reading canvas via StrictCanvasTainting setting</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
if (window.testRunner)
    testRunner.overridePreference("WebKitDisableReadingFromCanvas", true);

var image = new Image();
var canvas = document.createElement('canvas');
canvas.width = 100;
canvas.height = 100;
var context = canvas.getContext('2d');

test(function () {
    assert_throws(
        "SecurityError",
        function() {
            var imageData = context.getImageData(0, 0, 100, 100);
            assert_unreached('getImageData should throw');
        });
}, 'getImageData');

test(function () {
    assert_throws(
        "SecurityError",
        function() {
            var data_url = canvas.toDataURL();
            assert_unreached('toDataURL should throw');
        });
}, 'toDataURL');

test(function () {
    assert_throws(
        "SecurityError",
        function() {
            context.drawImage(image, 0, 0, 100, 100);
            var imageData = context.getImageData(0, 0, 100, 100);
            assert_unreached('getImageData should throw');
        });
}, 'getImageData');

test(function () {
    assert_throws(
        "SecurityError",
        function() {
            context.drawImage(image, 0, 0, 100, 100);
            var data_url = canvas.toDataURL();
            assert_unreached('toDataURL should throw');
        });
}, 'toDataURL');

test(function () {
    assert_throws(
        "SecurityError",
        function() {
            context.drawImage(image, 0, 0, 100, 100);
            canvas.toBlob(function(blob){});
            assert_unreached('toBlob should throw');
        });
}, 'toBlob');
</script>
