<!doctype html>
<html>
  <head>
    <title>XMLHttpRequest: setRequestHeader() name argument checks</title>
    <meta charset="utf-8">
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method" data-tested-assertations="/following::ol/li[3]" />
  </head>
  <body>
    <div id="log"></div>
<!--
       CHAR           = <any US-ASCII character (octets 0 - 127)>
       CTL            = <any US-ASCII control character
                        (octets 0 - 31) and DEL (127)>
       SP             = <US-ASCII SP, space (32)>
       HT             = <US-ASCII HT, horizontal-tab (9)>
       token          = 1*<any CHAR except CTLs or separators>
       separators     = "(" | ")" | "<" | ">" | "@"
                      | "," | ";" | ":" | "\" | <">
                      | "/" | "[" | "]" | "?" | "="
                      | "{" | "}" | SP | HT
       field-name     = token
-->
    <script>
      function try_name(name) {
        test(function() {
          var client = new XMLHttpRequest()
          client.open("GET", "...")
          assert_throws("SyntaxError", function() { client.setRequestHeader(name, 'x-value') })
        }, "setRequestHeader should throw with header name " + format_value(invalid_headers[i]) + ".")
      }
      function try_byte_string(name) {
        test(function() {
          var client = new XMLHttpRequest()
          client.open("GET", "...")
          assert_throws(new TypeError(), function() { client.setRequestHeader(name, 'x-value') })
        }, "setRequestHeader should throw with header name " + format_value(invalid_byte_strings[i]) + ".")
      }
      var invalid_headers = ["(", ")", "<", ">", "@", ",", ";", ":", "\\",
                             "\"", "/", "[", "]", "?", "=", "{", "}", " ",
                             /* HT already tested in the loop below */
                             "\u007f", "", "t\rt", "t\nt", "t: t", "t:t",
                             "t<t", "t t", " tt", ":tt", "\ttt", "\vtt", "t\0t",
                             "t\"t", "t,t", "t;t", "()[]{}", "a?B", "a=B"]
      var invalid_byte_strings = ["ﾃｽﾄ", "X-ﾃｽﾄ"]
      for (var i = 0; i < 32; ++i) {
        invalid_headers.push(String.fromCharCode(i))
      }
      for (var i = 0; i < invalid_headers.length; ++i) {
        try_name(invalid_headers[i])
      }
      for (var i = 0; i < invalid_byte_strings.length; ++i) {
        try_byte_string(invalid_byte_strings[i])
      }

    </script>
  </body>
</html>
