diff options
Diffstat (limited to 'testing/web-platform/tests/tools/pywebsocket/src/example/console.html')
-rw-r--r-- | testing/web-platform/tests/tools/pywebsocket/src/example/console.html | 317 |
1 files changed, 317 insertions, 0 deletions
diff --git a/testing/web-platform/tests/tools/pywebsocket/src/example/console.html b/testing/web-platform/tests/tools/pywebsocket/src/example/console.html new file mode 100644 index 000000000..ccd6d8f80 --- /dev/null +++ b/testing/web-platform/tests/tools/pywebsocket/src/example/console.html @@ -0,0 +1,317 @@ +<!-- +Copyright 2011, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--> + +<!-- +A simple console for testing WebSocket server. + +Type an address into the top text input and click connect to establish +WebSocket. Then, type some message into the bottom text input and click send +to send the message. Received/sent messages and connection state will be shown +on the middle textarea. +--> + +<html> +<head> +<title>WebSocket console</title> +<script> +var socket = null; + +var showTimeStamp = false; + +var addressBox = null; +var protocolsBox = null; +var logBox = null; +var messageBox = null; +var fileBox = null; +var codeBox = null; +var reasonBox = null; + +function getTimeStamp() { + return new Date().getTime(); +} + +function addToLog(log) { + if (showTimeStamp) { + logBox.value += '[' + getTimeStamp() + '] '; + } + logBox.value += log + '\n' + // Large enough to keep showing the latest message. + logBox.scrollTop = 1000000; +} + +function setbinarytype(binaryType) { + if (!socket) { + addToLog('Not connected'); + return; + } + + socket.binaryType = binaryType; + addToLog('Set binaryType to ' + binaryType); +} + +function send() { + if (!socket) { + addToLog('Not connected'); + return; + } + + socket.send(messageBox.value); + addToLog('> ' + messageBox.value); + messageBox.value = ''; +} + +function sendfile() { + if (!socket) { + addToLog('Not connected'); + return; + } + + var files = fileBox.files; + + if (files.length == 0) { + addToLog('File not selected'); + return; + } + + socket.send(files[0]); + addToLog('> Send ' + files[0].name); +} + +function parseProtocols(protocolsText) { + var protocols = protocolsText.split(','); + for (var i = 0; i < protocols.length; ++i) { + protocols[i] = protocols[i].trim(); + } + + if (protocols.length == 0) { + // Don't pass. + protocols = null; + } else if (protocols.length == 1) { + if (protocols[0].length == 0) { + // Don't pass. + protocols = null; + } else { + // Pass as a string. + protocols = protocols[0]; + } + } + + return protocols; +} + +function connect() { + var url = addressBox.value; + var protocols = parseProtocols(protocolsBox.value); + + if ('WebSocket' in window) { + if (protocols) { + socket = new WebSocket(url, protocols); + } else { + socket = new WebSocket(url); + } + } else { + return; + } + + socket.onopen = function () { + var extraInfo = []; + if (('protocol' in socket) && socket.protocol) { + extraInfo.push('protocol = ' + socket.protocol); + } + if (('extensions' in socket) && socket.extensions) { + extraInfo.push('extensions = ' + socket.extensions); + } + + var logMessage = 'Opened'; + if (extraInfo.length > 0) { + logMessage += ' (' + extraInfo.join(', ') + ')'; + } + addToLog(logMessage); + }; + socket.onmessage = function (event) { + if (('ArrayBuffer' in window) && (event.data instanceof ArrayBuffer)) { + addToLog('< Received an ArrayBuffer of ' + event.data.byteLength + + ' bytes') + } else if (('Blob' in window) && (event.data instanceof Blob)) { + addToLog('< Received a Blob of ' + event.data.size + ' bytes') + } else { + addToLog('< ' + event.data); + } + }; + socket.onerror = function () { + addToLog('Error'); + }; + socket.onclose = function (event) { + var logMessage = 'Closed ('; + if ((arguments.length == 1) && ('CloseEvent' in window) && + (event instanceof CloseEvent)) { + logMessage += 'wasClean = ' + event.wasClean; + // code and reason are present only for + // draft-ietf-hybi-thewebsocketprotocol-06 and later + if ('code' in event) { + logMessage += ', code = ' + event.code; + } + if ('reason' in event) { + logMessage += ', reason = ' + event.reason; + } + } else { + logMessage += 'CloseEvent is not available'; + } + addToLog(logMessage + ')'); + }; + + if (protocols) { + addToLog('Connect ' + url + ' (protocols = ' + protocols + ')'); + } else { + addToLog('Connect ' + url); + } +} + +function closeSocket() { + if (!socket) { + addToLog('Not connected'); + return; + } + + if (codeBox.value || reasonBox.value) { + socket.close(codeBox.value, reasonBox.value); + } else { + socket.close(); + } +} + +function printState() { + if (!socket) { + addToLog('Not connected'); + return; + } + + addToLog( + 'url = ' + socket.url + + ', readyState = ' + socket.readyState + + ', bufferedAmount = ' + socket.bufferedAmount); +} + +function init() { + var scheme = window.location.protocol == 'https:' ? 'wss://' : 'ws://'; + var defaultAddress = scheme + window.location.host + '/echo'; + + addressBox = document.getElementById('address'); + protocolsBox = document.getElementById('protocols'); + logBox = document.getElementById('log'); + messageBox = document.getElementById('message'); + fileBox = document.getElementById('file'); + codeBox = document.getElementById('code'); + reasonBox = document.getElementById('reason'); + + addressBox.value = defaultAddress; + + if (!('WebSocket' in window)) { + addToLog('WebSocket is not available'); + } +} +</script> +<style type="text/css"> +form { + margin: 0px; +} + +#connect_div, #log_div, #send_div, #sendfile_div, #close_div, #printstate_div { + padding: 5px; + margin: 5px; + border-width: 0px 0px 0px 10px; + border-style: solid; + border-color: silver; +} +</style> +</head> +<body onload="init()"> + +<div> + +<div id="connect_div"> + <form action="#" onsubmit="connect(); return false;"> + url <input type="text" id="address" size="40"> + <input type="submit" value="connect"> + <br/> + protocols <input type="text" id="protocols" size="20"> + </form> +</div> + +<div id="log_div"> + <textarea id="log" rows="10" cols="40" readonly></textarea> + <br/> + <input type="checkbox" + name="showtimestamp" + value="showtimestamp" + onclick="showTimeStamp = this.checked">Show time stamp +</div> + +<div id="send_div"> + <form action="#" onsubmit="send(); return false;"> + data <input type="text" id="message" size="40"> + <input type="submit" value="send"> + </form> +</div> + +<div id="sendfile_div"> + <form action="#" onsubmit="sendfile(); return false;"> + <input type="file" id="file" size="40"> + <input type="submit" value="send file"> + </form> + + Set binaryType + <input type="radio" + name="binarytype" + value="blob" + onclick="setbinarytype('blob')" checked>blob + <input type="radio" + name="binarytype" + value="arraybuffer" + onclick="setbinarytype('arraybuffer')">arraybuffer +</div> + +<div id="close_div"> + <form action="#" onsubmit="closeSocket(); return false;"> + code <input type="text" id="code" size="10"> + reason <input type="text" id="reason" size="20"> + <input type="submit" value="close"> + </form> +</div> + +<div id="printstate_div"> + <input type="button" value="print state" onclick="printState();"> +</div> + +</div> + +</body> +</html> |