<!doctype html>
<meta charset=utf-8>
<title>XMLHttpRequest: The send() method: Fire an event named load (synchronous flag is unset)</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
    <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onload" data-tested-assertations="../.." />
    <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-load" data-tested-assertations="../.." />
    <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::a[contains(@href,'#switch-done')]/.." />
    <link rel="help" href="https://xhr.spec.whatwg.org/#switch-done" data-tested-assertations="following::ol/li[6]" />
<div id="log"></div>

<script>
  var test = async_test();
  test.step(function() {
    var client = new XMLHttpRequest();
    client.onload = test.step_func(function(e) {
      assert_true(e instanceof ProgressEvent);
      assert_equals(e.type, "load");
      assert_equals(client.readyState, 4);
      test.done();
    });
    client.onreadystatechange = test.step_func(function() {
      if (client.readyState !== 4) return;

      setTimeout(test.step_func(function() {
          assert_unreached("Didn't get load event within 4ms of readystatechange==4");
      }), 4);
    });
    client.open("GET", "resources/well-formed.xml");
    client.send(null);
  });
</script>