<!doctype html>
<html>
  <head>
    <title>XMLHttpRequest: send() with document.domain set</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[2]/ol[1]/li[3]" />
  </head>
  <body>
    <div id="log"></div>
    <script>
      var test_base_url = location.protocol+'//www2.'+location.host+"/xhr/resources/",
          test_windows = [
            window.open(test_base_url + "send-after-setting-document-domain-window-1.htm"),
            window.open(test_base_url + "send-after-setting-document-domain-window-2.htm"),
          ],
          num_tests_left = test_windows.length;

      async_test(function(wrapper_test) {
        window.addEventListener("message", function(evt) {
          // run a shadow test that just forwards the results
          async_test(function(test) {
            assert_true(evt.data.passed, evt.data.message);
            test.done();
          }, evt.data.name);

          // after last result comes in, close all test
          // windows and complete the wrapper test.
          if (--num_tests_left == 0) {
            for (var i=0; i<test_windows.length; ++i) {
              test_windows[i].close();
            }
            wrapper_test.done();
          }
        }, false);
      }, "All tests ran");
    </script>
  </body>
</html>
