<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<div id=log></div>
<script>
  // Note: images get always sniffed, nosniff doesn't do anything
  // (but note the tentative Cross-Origin Read Blocking (CORB) tests
  // - for example wpt/fetch/corb/img-mime-types-coverage.tentative.sub.html).
  var passes = [
      // Empty or non-sensical MIME types
      null, "", "x", "x/x",

      // Image MIME types
      "image/gif", "image/png", "image/png;blah", "image/svg+xml",

      // CORB-protected MIME types (but note that CORB doesn't apply here,
      // because CORB ignores same-origin requests).
      "text/html", "application/xml", "application/blah+xml"
  ]

  const get_url = (mime) => {
    let url = "resources/image.py"
    if (mime != null) {
        url += "?type=" + encodeURIComponent(mime)
    }
    return url
  }

  passes.forEach(function(mime) {
    async_test(function(t) {
      var img = document.createElement("img")
      img.onerror = t.unreached_func("Unexpected error event")
      img.onload = t.step_func_done(function(){
        assert_equals(img.width, 96)
      })
      img.src = get_url(mime)
      document.body.appendChild(img)
    }, "URL query: " + mime)
  })
</script>
