 <!doctype html>
<html>
  <head>
    <title>XMLHttpRequest: send() - Redirects (no Location header)</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dl[1]/dt[2]" />
    <!--
      NOTE: the XHR spec does not really handle this scenario. It's handled in the Fetch spec:
      "If response's headers do not contain a header whose name is Location, return response."
     -->
  </head>
  <body>
    <div id="log"></div>
    <script>
      function redirect(code) {
        var test = async_test(document.title + " (" + code + ")")
        test.step(function() {
          var client = new XMLHttpRequest()
          client.onreadystatechange = function() {
            test.step(function() {
              if(client.readyState == 4) {
                assert_equals(client.status + "", code)
                assert_equals(client.statusText, "ABE ODDYSSEE")
                assert_equals(client.responseXML.documentElement.localName, "x")
                test.done()
              }
            })
          }
          client.open("GET", "resources/status.py?content=<x>x<\/x>&type=text/xml&text=ABE ODDYSSEE&code=" + code)
          client.send(null)
        })
      }
      redirect("301")
      redirect("302")
      redirect("303")
      redirect("307")
    </script>
  </body>
</html>
