<!doctype html>
<title>XMLHttpRequest: open() during abort event - abort() called from upload.onloadstart</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
async_test(t => {
  let client = new XMLHttpRequest(),
      log = [],
      lastTest = false,
      expected = [
        'readyState before abort() 1',
        "upload.onabort - before open() 4",
        "readyState after open() 1",
        "client.onabort 1",
        "client.onloadend 1",
        "readyState after abort() 1",
        "client.onload 4",
        "client.onloadend 4"
      ]

  client.upload.onloadstart = t.step_func(() => {
    log.push('readyState before abort() '+client.readyState)
    client.abort()
    log.push('readyState after abort() '+client.readyState)
  })

  client.upload.onabort = t.step_func(() => {
    log.push('upload.onabort - before open() ' + client.readyState)
    client.open("GET", "resources/content.py")
    log.push('readyState after open() ' + client.readyState)
    client.send(null)
  })

  client.onabort = t.step_func(() => {
    // happens immediately after all of upload.onabort, so readyState is 1
    log.push('client.onabort ' + client.readyState)
  })

  client.onloadend = t.step_func(() => {
    log.push('client.onloadend ' + client.readyState)
    if(lastTest) {
      assert_array_equals(log, expected)
      t.done()
    }
    lastTest = true
  })

  client.onload = t.step_func(() => {
    log.push('client.onload ' + client.readyState)
  })

  client.open("POST", "resources/content.py")
  client.send("non-empty")
})
</script>
