<!doctype html>
<html>
  <head>
    <title>XMLHttpRequest: open() resolving URLs (multi-Window; 4; evil)</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
  </head>
  <body>
    <div id="log"></div>
    <script>
    /*
    It's unclear what the pass condition should be for this test.
    Implementations:
    Firefox, Opera (Presto): terminate request with no further events when IFRAME is removed.
    Chrome: completes request to readyState=4 but responseText is "" so it's pretty much terminated with an extra event for "DONE" state
    Pass condition is now according to my suggested spec text in https://github.com/whatwg/xhr/pull/3 , if that's not accepted we'll have to amend this test
    */
      var test = async_test()
      function init() {
        test.step(function() {
          var hasErrorEvent = false
          var client = new self[0].XMLHttpRequest()
          client.onreadystatechange = function() {
            test.step(function() {
              if(client.readyState == 4) {
                assert_equals(client.responseText, "", "responseText is empty on inactive document error condition")
              }
            })
          }
          client.addEventListener('error', function(){
            test.step(function() {
              hasErrorEvent = true
              assert_equals(client.readyState, 4, "readyState is 4 when error listener fires")
            })
          })
          client.addEventListener('loadend', function(){
            test.step(function() {
              assert_true(hasErrorEvent, "should get an error event")
              test.done()
            })
          })
          client.open("GET", "folder.txt")
          client.send(null)
          document.body.removeChild(document.getElementsByTagName("iframe")[0])
        })
      }
    </script>
    <iframe src="resources/init.htm"></iframe>
 </body>
</html>
