<!DOCTYPE html>
<html>
  <head>
    <title>XMLHttpRequest: open() in document that is not fully active (but may be active) should throw</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">
  </head>
  <body>
    <div id="log"></div>
    <script>
      var test = async_test(),
          client,
          count = 0,
          win = window.open("resources/init.htm");
      test.add_cleanup(function() { win.close(); });
      function init() {
        test.step(function() {
          if(0 == count) {
            var doc = win.document;
            var ifr = document.createElement("iframe");
            ifr.onload = function() {
              // Again, do things async so we're not doing loads from inside
              // load events.
              test.step_timeout(function() {
                client = new ifr.contentWindow.XMLHttpRequest();
                count++;
                // Important to do a normal navigation, not a reload.
                win.location.href = "resources/init.htm?avoid-replace";
              }, 0);
            }
            doc.body.appendChild(ifr);
          } else if(1 == count) {
            assert_throws_dom("InvalidStateError", function() { client.open("GET", "...") })
            test.done()
          }
        })
      }
    </script>
  </body>
</html>
