chromium/third_party/blink/web_tests/http/tests/xmlhttprequest/interactive-state.html

<html>
<head>
<title>Test XmlHttpRequest onreadystatechange being called at the same frequency as dispatching of the "progress" ProgressEvent</title>
<body>
<p>Test for <a href="https://bugs.webkit.org/show_bug.cgi?id=7392">bug 7392</a>:
GMAIL: XMLHttpRequest does not correctly report "Interactive" state on receipt of load data.</p>
<script>

    if (window.testRunner) {
        testRunner.dumpAsText();
        testRunner.waitUntilDone();
    }

    var console_messages = document.createElement("ol");
    document.body.appendChild(console_messages);
    
    var count = 0;
    
    function log(message)
    {
        var item = document.createElement("li");
        item.appendChild(document.createTextNode(message));
        console_messages.appendChild(item);
    }
    
    function get(url, async)
    {
        if (window.XMLHttpRequest) {
            req = new XMLHttpRequest();
        } else {
            try {
                req = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (ex) {
                req = new ActiveXObject("Microsoft.XMLHTTP");
            }
        }
        
        req.onreadystatechange = processStateChange;
        
        req.open('GET', url, async);
        req.send(null);

        if (!async && req.status != 200)
            throw ("HTTP request failed, status: " + req.status);
        
        return req;
    }
    
    function processStateChange(){
        if (req.readyState == 3)
            ++count;
        else if (req.readyState == 4) {
            log((count > 1) ? "SUCCESS" : "FAILURE (count = " + count + ")");
            if (window.testRunner)
                testRunner.notifyDone();
        }
    }
    
    // start async steps
    get('interactive-state.cgi', true);
    
</script>
</body>
</html>