<!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("InvalidStateError", function() { client.open("GET", "...") })
            test.done()
          }
        })
      }
    </script>
  </body>
</html>
