<!doctype html>
<html>
  <head>
    <title>XMLHttpRequest: send() - "Basic" authenticated request using setRequestHeader()</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src="/common/utils.js"></script>
    <!-- These spec references do not make much sense simply because the spec doesn't say very much about this.. -->
    <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method" data-tested-assertations="following::ol[1]/li[6]" />
    <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::code[contains(@title,'http-authorization')]/.." />
  </head>
  <body>
    <div id="log"></div>
    <script>
      var test = async_test()
      test.step(function() {
        var client = new XMLHttpRequest(),
          urlstart = location.host + location.pathname.replace(/\/[^\/]*$/, '/'),
          user = token()
        client.open("GET", location.protocol+'//'+urlstart + "resources/auth2/auth.py", false)
        client.setRequestHeader("x-user", user)
        client.setRequestHeader('Authorization', 'Basic ' + btoa(user + ":pass"))
        client.onreadystatechange = function () {
          if (client.readyState < 4) {return}
          test.step( function () {
            assert_equals(client.responseText, user + '\npass')
            assert_equals(client.status, 200)
            assert_equals(client.getResponseHeader('x-challenge'), 'DID-NOT')
            test.done()
          } )
        }
        client.send(null)
      })
    </script>
  </body>
</html>
