<!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>
