1 <!DOCTYPE HTML PUBLIC
"-//IETF//DTD HTML//EN">
4 <script src=
"/js-test-resources/js-test.js"></script>
7 <div id=
"description"></div>
8 <div id=
"console"></div>
9 <script type=
"text/javascript">
10 description("WebSocket bufferedAmount after closed in busy");
12 window
.jsTestIsAsync
= true;
14 function createStringWithLength(length
)
17 while (string
.length
< length
)
18 string
= string
+ string
;
19 return string
.substring(0, length
);
22 function createBlobWithLength(length
)
24 return new Blob([new Uint8Array(length
)]);
27 var ws
= new WebSocket("ws://localhost:8880/echo");
29 var bufferedAmountBeforeClose
= 0;
30 var bufferedAmountAfterClose
= 0;
31 var bufferedAmountAfterClosed
= 0;
32 var closeFrameSize
= 6;
34 ws
.onopen = function()
38 var data
= createStringWithLength(8193);
39 for (var i
= 0; i
< 100; ++i
) {
41 if (ws
.bufferedAmount
> 262144)
44 bufferedAmountBeforeClose
= ws
.bufferedAmount
;
46 bufferedAmountAfterClose
= ws
.bufferedAmount
;
47 shouldBeTrue("bufferedAmountBeforeClose + closeFrameSize >= bufferedAmountAfterClose");
50 ws
.onclose = function()
53 shouldBe("ws.readyState", "3");
54 shouldBeTrue("ws.bufferedAmount <= bufferedAmountAfterClose");
56 debug("Testing send(string)...");
57 testBufferedAmount('send to closed socket', 21);
58 testBufferedAmount('', 0);
59 testBufferedAmount('a', 1);
60 testBufferedAmount(createStringWithLength(125), 125);
61 testBufferedAmount(createStringWithLength(126), 126); // With 16-bit extended payload length field.
62 testBufferedAmount(createStringWithLength(0xFFFF), 0xFFFF);
63 testBufferedAmount(createStringWithLength(0x10000), 0x10000); // With 64-bit extended payload length field.
65 debug("Testing send(ArrayBuffer)...");
66 testBufferedAmount(new ArrayBuffer(0), 0);
67 testBufferedAmount(new ArrayBuffer(1), 1);
68 testBufferedAmount(new ArrayBuffer(125), 125);
69 testBufferedAmount(new ArrayBuffer(126), 126);
70 testBufferedAmount(new ArrayBuffer(0xFFFF), 0xFFFF);
71 testBufferedAmount(new ArrayBuffer(0x10000), 0x10000);
73 debug("Testing send(Blob)...");
74 testBufferedAmount(createBlobWithLength(0), 0);
75 testBufferedAmount(createBlobWithLength(1), 1);
76 testBufferedAmount(createBlobWithLength(125), 125);
77 testBufferedAmount(createBlobWithLength(126), 126);
78 testBufferedAmount(createBlobWithLength(0xFFFF), 0xFFFF);
79 testBufferedAmount(createBlobWithLength(0x10000), 0x10000);
83 ws
.onerror = function()
89 var bufferedAmountDifference
;
91 function testBufferedAmount(message
, expectedBufferedAmountDifference
)
93 // If the connection is closed, bufferedAmount attribute's value will only
94 // increase with each call to the send() method.
95 // (the number does not reset to zero once the connection closes).
96 messageToSend
= message
;
97 var bufferedAmountBeforeSend
= ws
.bufferedAmount
;
98 shouldBeUndefined("ws.send(messageToSend)");
99 var bufferedAmountAfterSend
= ws
.bufferedAmount
;
100 bufferedAmountDifference
= bufferedAmountAfterSend
- bufferedAmountBeforeSend
;
101 shouldEvaluateTo("bufferedAmountDifference", expectedBufferedAmountDifference
);