1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
4 <script src="../../../../js-test-resources/js-test-pre.js"></script>
7 <div id="description"></div>
8 <div id="console"></div>
9 <script type="text/javascript">
10 description("Web Socket bufferedAmount after closed");
12 window.jsTestIsAsync = true;
13 if (window.layoutTestController)
14 layoutTestController.overridePreference("WebKitHixie76WebSocketProtocolEnabled", 0);
16 function createStringWithLength(length)
19 while (string.length < length)
20 string = string + string;
21 return string.substring(0, length);
24 function createBlobWithLength(length)
26 var builder = new WebKitBlobBuilder();
27 builder.append(new ArrayBuffer(length));
28 return builder.getBlob();
31 var ws = new WebSocket("ws://localhost:8880/websocket/tests/hybi/simple");
33 ws.onopen = function()
39 ws.onclose = function()
42 shouldBe("ws.readyState", "3");
43 shouldBe("ws.bufferedAmount", "0");
45 var baseOverhead = 2 + 4; // Base header size and masking key size.
46 debug("Testing send(string)...");
47 testBufferedAmount('send to closed socket', 21 + baseOverhead);
48 testBufferedAmount('', baseOverhead);
49 testBufferedAmount('a', 1 + baseOverhead);
50 testBufferedAmount(createStringWithLength(125), 125 + baseOverhead);
51 testBufferedAmount(createStringWithLength(126), 126 + baseOverhead + 2); // With 16-bit extended payload length field.
52 testBufferedAmount(createStringWithLength(0xFFFF), 0xFFFF + baseOverhead + 2);
53 testBufferedAmount(createStringWithLength(0x10000), 0x10000 + baseOverhead + 8); // With 64-bit extended payload length field.
55 debug("Testing send(ArrayBuffer)...");
56 testBufferedAmount(new ArrayBuffer(0), baseOverhead);
57 testBufferedAmount(new ArrayBuffer(1), 1 + baseOverhead);
58 testBufferedAmount(new ArrayBuffer(125), 125 + baseOverhead);
59 testBufferedAmount(new ArrayBuffer(126), 126 + baseOverhead + 2);
60 testBufferedAmount(new ArrayBuffer(0xFFFF), 0xFFFF + baseOverhead + 2);
61 testBufferedAmount(new ArrayBuffer(0x10000), 0x10000 + baseOverhead + 8);
63 debug("Testing send(Blob)...");
64 testBufferedAmount(createBlobWithLength(0), baseOverhead);
65 testBufferedAmount(createBlobWithLength(1), 1 + baseOverhead);
66 testBufferedAmount(createBlobWithLength(125), 125 + baseOverhead);
67 testBufferedAmount(createBlobWithLength(126), 126 + baseOverhead + 2);
68 testBufferedAmount(createBlobWithLength(0xFFFF), 0xFFFF + baseOverhead + 2);
69 testBufferedAmount(createBlobWithLength(0x10000), 0x10000 + baseOverhead + 8);
75 var bufferedAmountDifference;
77 function testBufferedAmount(message, expectedBufferedAmountDifference)
79 // If the connection is closed, bufferedAmount attribute's value will only
80 // increase with each call to the send() method.
81 // (the number does not reset to zero once the connection closes).
82 messageToSend = message;
83 var bufferedAmountBeforeSend = ws.bufferedAmount;
84 shouldBeFalse("ws.send(messageToSend)");
85 var bufferedAmountAfterSend = ws.bufferedAmount;
86 bufferedAmountDifference = bufferedAmountAfterSend - bufferedAmountBeforeSend;
87 shouldEvaluateTo("bufferedAmountDifference", expectedBufferedAmountDifference);
91 <script src="../../../../js-test-resources/js-test-post.js"></script>