<!doctype html>
<title>XMLHttpRequest: open() during abort processing - abort() called from 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(),
      test_state = 1,
      log = [],
      expected = [
        "onloadstart readyState before abort() 1",
        "onreadystatechange readyState before open() 4",
        "onreadystatechange readyState after open() 1",
        "onloadstart readyState 1",
        "upload.onabort 1",
        "upload.onloadend 1",
        "client.onabort 1",
        "readyState after abort() 1",
        "client.onload 4"
      ]

  client.onreadystatechange = t.step_func(() => {
    if(test_state === 2){
      test_state = 3
      log.push('onreadystatechange readyState before open() ' + client.readyState)
      client.open("GET", "resources/content.py")
      log.push('onreadystatechange readyState after open() ' + client.readyState)
      client.send(null)
    }
  })

  client.onloadstart = t.step_func(() => {
    if(test_state === 1){
      test_state = 2
      log.push('onloadstart readyState before abort() ' + client.readyState)
      client.abort()
      log.push('readyState after abort() ' + client.readyState)
    }else{
      log.push('onloadstart readyState ' + client.readyState)
    }
  })

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

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

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

  client.onload = t.step_func_done(() => {
    log.push('client.onload ' + client.readyState)
    assert_array_equals(log, expected)
  })

  client.open("POST", "resources/content.py")
  client.send('abcd')
})
</script>
