<!doctype html>
<html>
  <head>
    <title>ProgressEvent: firing events for HTTP with Content-Length</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <link rel="help" href="http://dvcs.w3.org/hg/progress/raw-file/tip/Overview.html#firing-events-using-the-progressevent-interface-for-http" data-tested-assertations="/following-sibling::ol/li[1] /following-sibling::ol/li[2]" />
  </head>
  <body>
    <div id="log"></div>
    <script>
      var test = async_test();

      test.step(function() {
        var xhr = new XMLHttpRequest();

        xhr.onprogress = function(pe) {
          test.step(function() {
            if(pe.type == "progress") {
              assert_true(pe.loaded >= 0, "loaded is initialize to the number of HTTP entity body bytes transferred.");
              assert_true(pe.lengthComputable, "lengthComputable is true.");
              assert_not_equals(pe.total, 0, "total is not zero.");
            }
          }, "Check lengthComputed, loaded, total when Content-Length is given.");
        }

        // "loadstart", "error", "abort", "load" tests are out of scope.
        // They SHOULD be tested in each spec that implement ProgressEvent.
        
        xhr.onloadend = function(pe) {
          test.done();
        }
        xhr.open("GET", "resources/img.jpg", true);
        xhr.send(null);
      })
    </script>
  </body>
</html>
