blob: f096d4e0fc28ec594816b0dd3174b0f7a4a8418b [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="/js-test-resources/js-test.js"></script>
</head>
<body>
<div id="description"></div>
<div id="console"></div>
<script type="text/javascript">
description("WebSocket bufferedAmount after closed in busy");
window.jsTestIsAsync = true;
function createStringWithLength(length)
{
var string = 'x';
while (string.length < length)
string = string + string;
return string.substring(0, length);
}
function createBlobWithLength(length)
{
return new Blob([new Uint8Array(length)]);
}
var ws = new WebSocket("ws://localhost:8880/echo");
var bufferedAmountBeforeClose = 0;
var bufferedAmountAfterClose = 0;
var bufferedAmountAfterClosed = 0;
var closeFrameSize = 6;
ws.onopen = function()
{
debug("Connected.");
var data = createStringWithLength(8193);
for (var i = 0; i < 100; ++i) {
ws.send(data);
if (ws.bufferedAmount > 262144)
break;
}
bufferedAmountBeforeClose = ws.bufferedAmount;
ws.close();
bufferedAmountAfterClose = ws.bufferedAmount;
shouldBeTrue("bufferedAmountBeforeClose + closeFrameSize >= bufferedAmountAfterClose");
};
ws.onclose = function()
{
debug("Closed.");
shouldBe("ws.readyState", "3");
shouldBeTrue("ws.bufferedAmount <= bufferedAmountAfterClose");
debug("Testing send(string)...");
testBufferedAmount('send to closed socket', 21);
testBufferedAmount('', 0);
testBufferedAmount('a', 1);
testBufferedAmount(createStringWithLength(125), 125);
testBufferedAmount(createStringWithLength(126), 126); // With 16-bit extended payload length field.
testBufferedAmount(createStringWithLength(0xFFFF), 0xFFFF);
testBufferedAmount(createStringWithLength(0x10000), 0x10000); // With 64-bit extended payload length field.
debug("Testing send(ArrayBuffer)...");
testBufferedAmount(new ArrayBuffer(0), 0);
testBufferedAmount(new ArrayBuffer(1), 1);
testBufferedAmount(new ArrayBuffer(125), 125);
testBufferedAmount(new ArrayBuffer(126), 126);
testBufferedAmount(new ArrayBuffer(0xFFFF), 0xFFFF);
testBufferedAmount(new ArrayBuffer(0x10000), 0x10000);
debug("Testing send(Blob)...");
testBufferedAmount(createBlobWithLength(0), 0);
testBufferedAmount(createBlobWithLength(1), 1);
testBufferedAmount(createBlobWithLength(125), 125);
testBufferedAmount(createBlobWithLength(126), 126);
testBufferedAmount(createBlobWithLength(0xFFFF), 0xFFFF);
testBufferedAmount(createBlobWithLength(0x10000), 0x10000);
finishJSTest();
};
ws.onerror = function()
{
debug("Error.");
}
var messageToSend;
var bufferedAmountDifference;
function testBufferedAmount(message, expectedBufferedAmountDifference)
{
// If the connection is closed, bufferedAmount attribute's value will only
// increase with each call to the send() method.
// (the number does not reset to zero once the connection closes).
messageToSend = message;
var bufferedAmountBeforeSend = ws.bufferedAmount;
shouldBeUndefined("ws.send(messageToSend)");
var bufferedAmountAfterSend = ws.bufferedAmount;
bufferedAmountDifference = bufferedAmountAfterSend - bufferedAmountBeforeSend;
shouldEvaluateTo("bufferedAmountDifference", expectedBufferedAmountDifference);
}
</script>
</body>
</html>