| <!-- |
| Copyright 2014 Google Inc. All rights reserved. |
| |
| Use of this source code is governed by a BSD-style |
| license that can be found in the COPYING file or at |
| https://developers.google.com/open-source/licenses/bsd |
| --> |
| |
| <html> |
| <head> |
| <title>XHR event logger</title> |
| <script src="util_main.js"></script> |
| <script> |
| var events = []; |
| |
| function run() { |
| events = []; |
| |
| function pushToLog(type) { |
| if (events.length != 0 && type === events[events.length - 1].type) { |
| events[events.length - 1].count += 1; |
| } else { |
| events.push({type: type, count: 1}); |
| } |
| } |
| |
| var xhr = new XMLHttpRequest(); |
| |
| function getProgressEventDump(e) { |
| return '(' + e.lengthComputable + ', ' + e.loaded + ', ' + e.total + ')'; |
| } |
| |
| var dumpProgressEvent = getBoolFromCheckBox('dumpprogressevent'); |
| |
| function log(e) { |
| var type = e.type; |
| if (type === 'readystatechange') { |
| type += e.target.readyState; |
| } |
| if (dumpProgressEvent && (e instanceof ProgressEvent)) { |
| type += getProgressEventDump(e); |
| } |
| pushToLog(type); |
| }; |
| |
| function logUpload(e) { |
| var type = e.type; |
| if (dumpProgressEvent && (e instanceof ProgressEvent)) { |
| type += getProgressEventDump(e); |
| } |
| pushToLog('upload' + type); |
| } |
| |
| if (getBoolFromCheckBox('upload')) { |
| var upload = xhr.upload; |
| upload.onloadstart = logUpload; |
| upload.onprogress = logUpload; |
| upload.onabort = logUpload; |
| upload.onerror = logUpload; |
| upload.onload = logUpload; |
| upload.ontimeout = logUpload; |
| upload.onloadend = logUpload; |
| } |
| |
| xhr.onreadystatechange = log; |
| xhr.onloadstart = log; |
| xhr.onprogress = log; |
| xhr.onabort = log; |
| xhr.onerror = log; |
| xhr.onload = log; |
| xhr.ontimeout = log; |
| xhr.onloadend = log; |
| |
| xhr.open('POST', '/073be001e10950692ccbf3a2ad21c245_receive', |
| getBoolFromCheckBox('async')); |
| var size = getIntFromInput('size'); |
| var chunkedMode = 'none'; |
| if (getBoolFromCheckBox('chunkedresponse')) { |
| chunkedMode = 'chunked'; |
| } |
| xhr.send(size + ' ' + chunkedMode); |
| } |
| |
| function print() { |
| var result = ''; |
| for (var i = 0; i < events.length; ++i) { |
| var event = events[i]; |
| result += event.type + ' * ' + event.count + '\n'; |
| } |
| document.getElementById('log').value = result; |
| } |
| </script> |
| |
| <body> |
| <textarea id="log" rows="10" cols="40" readonly></textarea> |
| <br/> |
| Size: <input type="text" id="size" value="65536"><br/> |
| <input type="checkbox" id="chunkedresponse"> |
| <label for="chunkedresponse">Use Chunked T-E for response</label><br/> |
| <input type="checkbox" id="upload"> |
| <label for="upload">Upload progress</label><br/> |
| <input type="checkbox" id="dumpprogressevent"> |
| <label for="dumpprogressevent"> |
| Dump lengthComputable/loaded/total</label><br/> |
| <input type="checkbox" id="async" checked> |
| <label for="async">Async</label><br/> |
| <input type="button" onclick="run()" value="Run XHR"> |
| <input type="button" onclick="print()" value="Print log"> |
| </body> |
| </html> |