<!doctype html>
<title>XMLHttpRequest: loadstart event corner cases</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<div id=log></div>
<script>
async_test(t => {
  const client = new XMLHttpRequest
  client.onloadstart = t.step_func(() => {
    assert_throws("InvalidStateError", () => client.setRequestHeader("General", "Organa"))
    assert_throws("InvalidStateError", () => client.withCredentials = true)
    assert_throws("InvalidStateError", () => client.send())
    client.onloadstart = null
    client.open("GET", "data:,BB-8")
    client.send()
  })
  client.onload = t.step_func_done(() => {
    assert_equals(client.responseText, "BB-8")
  })
  client.open("GET", "data:,R2-D2")
  client.send()
}, "open() during loadstart")

async_test(t => {
  const client = new XMLHttpRequest
  let abortFired = false
  client.onloadstart = t.step_func_done(() => {
    assert_equals(client.readyState, 1)
    client.abort()
    assert_true(abortFired)
    assert_equals(client.readyState, 0)
  })
  client.onabort = t.step_func(() => {
    abortFired = true
    assert_equals(client.readyState, 4)
  })
  client.open("GET", "data:,K-2SO")
  client.send()
}, "abort() during loadstart")
</script>
