<html>
<body>
<p>Test that an XMLHttpRequest with Content-Type: gzip is properly uncompressed.</p>
<pre id="console"></pre>
<script>
const max = 2048;

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

const log = text => {
    let console = document.getElementById('console');
    console.appendChild(document.createTextNode(text + '\n'));
};

const xhr = new XMLHttpRequest();
xhr.open('GET', 'resources/gzip-lorem.php');
xhr.responseType = 'arraybuffer';
xhr.onerror = e => log(`FAILED: ${xhr.status} ${xhr.statusText}`);
xhr.onreadystatechange = () => {
    switch (xhr.readyState) {
    case xhr.HEADERS_RECEIVED: 
        log(`Content Type: ${xhr.getResponseHeader('Content-Type')}`);
        log(`Content Encoding: ${xhr.getResponseHeader('Content-Encoding')}`);
        log(`Content Length: ${xhr.getResponseHeader('Content-Length')}`);
        break;
    case xhr.DONE:
        log(`RESPONSE ${xhr.status}: ${xhr.response}`);
        const array = new Uint8Array(xhr.response);
        log(`LENGTH: ${array.length}`);
        let content = '"';
        let i = 0;
        while (i < max && i < array.length) {
            const c = array[i];
            content += (0x20 <= c && c <= 0x7e) ? String.fromCodePoint(c) : `\\x${c.toString(16).padStart(2, '0')}`;
            ++i;
        }
        content += '"';
        log(`CONTENT: ${content}`);
        if (array.length > i)
            log('Output truncated to ${max} characters');
        if (window.testRunner)
            testRunner.notifyDone();
        break;
    }
};
xhr.send(null);
</script>
</body>
</html>
