<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
  function draw_and_read_image(img, should_throw) {
      let c = document.createElement('canvas');
      document.body.appendChild(c);
      let ctx = c.getContext('2d');
      ctx.drawImage(img, 0, 0);

      function get_image_data() {
          ctx.getImageData(0, 0, 4, 4);
      }

      if (should_throw) {
          assert_throws_dom('SecurityError', get_image_data);
      } else {
          get_image_data();
      }

      document.body.removeChild(c);
  }

  async_test(t => {
      let img = new Image();
      img.src = "/images/green.png";
      img.crossOrigin = "anonymous";
      img.onload = t.step_func_done(() => {
          draw_and_read_image(img, false);
      });
      img.onerror = t.unreached_func();
  }, "Can get pixels of canvas with same origin image drawn");

  async_test(t => {
      let img = new Image();
      img.src = "http://{{hosts[][www]}}:{{ports[http][0]}}/images/green.png?pipe=header(Access-Control-Allow-Origin,*)";
      img.crossOrigin = "anonymous";
      img.onload = t.step_func_done(() => {
          draw_and_read_image(img, false);
      });
      img.onerror = t.unreached_func();
  }, "Can get pixels of canvas with CORS enabled cross origin image drawn");

  async_test(t => {
      let img = new Image();
      img.src = "http://{{hosts[][www]}}:{{ports[http][0]}}/images/green.png?pipe=header(Access-Control-Allow-Origin,*)";
      img.onload = t.step_func_done(() => {
          draw_and_read_image(img, true);
      });
      img.onerror = t.unreached_func();
  }, "Can't get pixels of canvas with CORS enabled cross origin image drawn from non-CORS element");

  async_test(t => {
      let img = new Image();
      img.src = "http://{{hosts[][www]}}:{{ports[http][0]}}/images/green.png";

      img.onload = t.step_func_done(() => {
          draw_and_read_image(img, true);
      });
      img.onerror = t.unreached_func();
  }, "Can't get pixels of canvas with non-CORS enabled cross origin image drawn");
</script>
