<!doctype html>
<html>
  <head>
    <title>XMLHttpRequest: send() - Document</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-send()-method" data-tested-assertations="/following::ol/li[4]" />
    <link rel="help" href="https://xhr.spec.whatwg.org/#dom-XMLHttpRequest-send-document" data-tested-assertations="/following::dd" />
  </head>
  <body>
    <div id="log"></div>
    <script>
    var tests = [
      {
        title: 'XML document, windows-1252',
        url: 'resources/win-1252-xml.py',
        contentType: 'application/xml;charset=UTF-8',
        responseText: '<\u00FF\/>'
      },
      // Invalid character code in document turns into U+FFFD.
      {
        title: 'HTML document, invalid UTF-8',
        url: 'resources/invalid-utf8-html.py',
        contentType: 'text/html;charset=UTF-8',
        responseText: '<body>\uFFFD<\/body>'
      },
      // Correctly serialized Shift-JIS.
      {
        title: 'HTML document, shift-jis',
        url: 'resources/shift-jis-html.py',
        contentType: 'text/html;charset=UTF-8',
        responseText: '<body>\u30C6\u30b9\u30c8<\/body>'
      },
      // There's some markup included, but it's not really relevant for this
      // test suite, so we do an indexOf() test.
      {
        title: 'plain text file',
        url: 'folder.txt',
        contentType: 'text/html;charset=UTF-8',
        responseText: 'top'
      },
      // This test does not want to assert anything about what markup a
      // standalone image should be wrapped in. Hence this test lacks a
      // responseText expectation.
      {
        title: 'image file',
        url: 'resources/image.gif',
        contentType: 'text/html;charset=UTF-8'
      },
      {
        title: 'img tag',
        url: 'resources/img-utf8-html.py',
        contentType: 'text/html;charset=UTF-8',
        responseText: '<img>foo'
      },
      {
        title: 'empty div',
        url: 'resources/empty-div-utf8-html.py',
        contentType: 'text/html;charset=UTF-8',
        responseText: '<!DOCTYPE html><html><head></head><body><div></div></body></html>'
      }
    ];

    tests.forEach(function(t) {
      async_test(function() {
        var iframe = document.createElement("iframe");
        iframe.onload = this.step_func_done(function() {
          var client = new XMLHttpRequest()
          client.open("POST", "resources/content.py?response_charset_label=UTF-8", false)
          client.send(iframe.contentDocument)
          assert_equals(client.getResponseHeader('X-Request-Content-Type'),
                        t.contentType,
                        'document should be serialized and sent as ' + t.contentType)
          // The indexOf() assertion will overlook some stuff, e.g. XML
          // prologues that shouldn't be there (looking at you, Presto).
          // However, arguably these things have little to do with the XHR
          // functionality we're testing.
          if (t.responseText) {
            assert_true(client.responseText.indexOf(t.responseText) != -1,
                        JSON.stringify(t.responseText) + " not in " +
                        JSON.stringify(client.responseText));
          }
          assert_equals(client.responseXML, null)
        });
        iframe.src = t.url;
        document.body.appendChild(iframe);
      }, t.title);
    });
    </script>
  </body>
</html>
