<!doctype html>
<title>XMLHttpRequest: send() - conditional cross-origin requests</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/cors/support.js?pipe=sub></script>
<div id=log></div>
<script>
function request(withCORS, desc) {
  async_test(t => {
    const client = new XMLHttpRequest,
          identifier = Math.random(),
          cors = withCORS ? "&cors=yes" : "",
          url = CROSSDOMAIN + "resources/conditional.py?tag=" + identifier + cors
    client.onload = t.step_func(() => {
      assert_equals(client.status, 200)
      assert_equals(client.statusText, "OK")
      assert_equals(client.responseText, "MAYBE NOT")

      if(withCORS) {
        client.onload = t.step_func_done(() => {
          assert_equals(client.status, 304)
          assert_equals(client.statusText, "SUPERCOOL")
          assert_equals(client.responseText, "")
        })
      } else {
        client.onload = null
        client.onerror = t.step_func_done(() => {
          assert_equals(client.status, 0)
          assert_equals(client.statusText, "")
        })
      }
      client.open("GET", url)
      client.setRequestHeader("If-None-Match", identifier)
      client.send()
    })
    client.open("GET", url)
    client.send()
  }, desc)
}
request(false, "304 without appropriate CORS header")
request(true, "304 with appropriate CORS header")
</script>
