<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>XMLHttpRequest: progress events grow response body size</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::a[contains(@href,'#make-progress-notifications')]/.. following::a[contains(@href,'#make-progress-notifications')]/../following:p[1]" />
    <link rel="help" href="https://xhr.spec.whatwg.org/#make-progress-notifications" data-tested-assertations=".." />
    <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onprogress" data-tested-assertations="/../.." />
    <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-progress" data-tested-assertations="/../.." />
</head>

<div id="log"></div>

<script>

var test = async_test();

test.step(function() {
    var client = new XMLHttpRequest();
    var lastSize = 0;

    client.onprogress = test.step_func(function() {
        var currentSize = client.responseText.length;

        if (lastSize > 0 && currentSize > lastSize) {
            // growth from a positive size to bigger!

            test.done();
        }

        lastSize = currentSize;
    });

    client.onreadystatechange = test.step_func(function() {
        if (client.readyState === 4) {
            assert_unreached("onprogress not called multiple times, or response body did not grow.");
        }
    });

    client.open("GET", "resources/trickle.py?count=1000");
    client.send(null);
});
</script>
