Branch data Line data Source code
1 [ + ]: 2 : import assert from 'node:assert/strict'; 2 : 2 : import { XMLHttpRequest } from '../../../lib/whatwg-xhr.js'; 3 : 2 : 4 : 2 : let debugSeq = 0; 5 : 2 : 6 [ + ]: 2 : export default (activeURL) => { 7 : 1 : 8 [ + ]: 1 : (async () => { 9 : 1 : 10 [ + ]: 1 : let p1 = new Promise((resolve) => { 11 : 1 : var xhr = doTest(false, 0, `${activeURL}/trickle.py?count=6&delay=150`); 12 [ + ]: 1 : xhr.onloadend = () => { 13 : 1 : resolve('test#1 done'); 14 : 1 : }; 15 : 1 : }); 16 : 1 : 17 [ + ]: 1 : let p2 = new Promise((resolve) => { 18 : 1 : var xhr = doTest(true, 78, `${activeURL}/trickle.py?count=6&delay=150&specifylength=1`); 19 [ + ]: 1 : xhr.onloadend = () => { 20 : 1 : resolve('test#2 done'); 21 : 1 : }; 22 : 1 : }); 23 : 1 : 24 : 1 : await Promise.all([p1, p2]); 25 : 1 : })(); 26 : 1 : 27 [ + ]: 1 : function doTest(expectedLengthComputable, expectedTotal, url){ 28 : 2 : 29 : 2 : let xhr = new XMLHttpRequest(); 30 : 2 : let lastSize = 0; 31 : 2 : 32 [ + ]: 2 : xhr.onprogress = (e) => { 33 : 4 : 34 : 4 : assert.strictEqual(e.total, expectedTotal); 35 : 4 : assert.strictEqual(e.lengthComputable, expectedLengthComputable); 36 : 4 : 37 : 4 : let currentSize = xhr.responseText.length; 38 : 4 : 39 [ + ][ + ]: 4 : if (lastSize > 0 && currentSize > lastSize) { 40 : 2 : // growth from a positive size to bigger! 41 : 2 : xhr.onprogress = xhr.onreadystatechange = null; 42 : 2 : } 43 : 4 : 44 : 4 : lastSize = currentSize; 45 : 2 : }; 46 : 2 : 47 [ + ]: 2 : xhr.onreadystatechange = () => { 48 : 8 : 49 [ - ]: 8 : if(xhr.readyState === 4){ 50 : 0 : assert(false, 'onprogress not called multiple times, or response body did not grow.'); 51 : 0 : } 52 : 2 : }; 53 : 2 : 54 : 2 : xhr.open('GET', url); 55 : 2 : xhr.send(); 56 : 2 : 57 : 2 : return xhr; 58 : 2 : } 59 : 1 : } 60 : 2 : 61 : 2 : /* 62 : 2 : * response-data-progress.htm 63 : 2 : * 64 : 2 : 65 : 2 : <!doctype html> 66 : 2 : <html lang="en"> 67 : 2 : <head> 68 : 2 : <meta charset="utf-8"> 69 : 2 : <title>XMLHttpRequest: progress events grow response body size</title> 70 : 2 : <meta name="timeout" content="long"> 71 : 2 : <script src="/resources/testharness.js"></script> 72 : 2 : <script src="/resources/testharnessreport.js"></script> 73 : 2 : <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]" /> 74 : 2 : <link rel="help" href="https://xhr.spec.whatwg.org/#make-progress-notifications" data-tested-assertations=".." /> 75 : 2 : <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onprogress" data-tested-assertations="/../.." /> 76 : 2 : <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-progress" data-tested-assertations="/../.." /> 77 : 2 : </head> 78 : 2 : 79 : 2 : <div id="log"></div> 80 : 2 : 81 : 2 : <script> 82 : 2 : 83 : 2 : function doTest(test, expectedLengthComputable, expectedTotal, url) { 84 : 2 : var client = new XMLHttpRequest(); 85 : 2 : var lastSize = 0; 86 : 2 : 87 : 2 : client.onprogress = test.step_func(function(e) { 88 : 2 : assert_equals(e.total, expectedTotal); 89 : 2 : assert_equals(e.lengthComputable, expectedLengthComputable); 90 : 2 : 91 : 2 : var currentSize = client.responseText.length; 92 : 2 : 93 : 2 : if (lastSize > 0 && currentSize > lastSize) { 94 : 2 : // growth from a positive size to bigger! 95 : 2 : test.done(); 96 : 2 : } 97 : 2 : 98 : 2 : lastSize = currentSize; 99 : 2 : }); 100 : 2 : 101 : 2 : client.onreadystatechange = test.step_func(function() { 102 : 2 : if (client.readyState === 4) { 103 : 2 : assert_unreached("onprogress not called multiple times, or response body did not grow."); 104 : 2 : } 105 : 2 : }); 106 : 2 : 107 : 2 : client.open("GET", url); 108 : 2 : client.send(null); 109 : 2 : return client; 110 : 2 : } 111 : 2 : 112 : 2 : async_test(function () { doTest(this, false, 0, "resources/trickle.py?count=6&delay=150"); }, 113 : 2 : document.title + ', unknown content-length'); 114 : 2 : async_test(function () { doTest(this, true, 78, "resources/trickle.py?count=6&delay=150&specifylength=1"); }, 115 : 2 : document.title + ', known content-length'); 116 : 2 : </script> 117 : 2 : 118 : 2 : * 119 : 2 : * response-data-progress.htm 120 : 2 : */