LayoutTests/ChangeLog

 12011-08-02 Takashi Toyoshima <toyoshim@chromium.org>
 2
 3 WebSocket: Could not handle zero length text frame.
 4 https://bugs.webkit.org/show_bug.cgi?id=65592
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 * http/tests/websocket/tests/hybi/zero-length-text-expected.txt: Added.
 9 * http/tests/websocket/tests/hybi/zero-length-text.html: Added.
 10 * http/tests/websocket/tests/hybi/zero-length-text_wsh.py: Added.
 11
1122011-08-02 Shinichiro Hamaji <hamaji@chromium.org>
213
314 Malformed chromium test expectation fix, again. Sorry for the spam...

LayoutTests/http/tests/websocket/tests/hybi/zero-length-text-expected.txt

 1Test whether WebSocket handles zero length text frame correctly.
 2
 3On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 4
 5onopen() was called.
 6onmessage() was called. (message = "")
 7onmessage() was called. (message = "This first text should be received.")
 8onmessage() was called. (message = "")
 9onmessage() was called. (message = "This second text should be received, too.")
 10onclose() was called.
 11PASS closeEvent.wasClean is true
 12PASS sequence is 4
 13PASS receivedText is expectedText
 14PASS successfullyParsed is true
 15
 16TEST COMPLETE
 17

LayoutTests/http/tests/websocket/tests/hybi/zero-length-text.html

 1<!DOCTYPE HTML>
 2<html>
 3<head>
 4<link rel="stylesheet" href="../../../../js-test-resources/js-test-style.css">
 5<script src="../../../../js-test-resources/js-test-pre.js"></script>
 6</head>
 7<body>
 8<div id="description"></div>
 9<div id="console"></div>
 10<script>
 11description("Test whether WebSocket handles zero length text frame correctly.");
 12
 13window.jsTestIsAsync = true;
 14if (window.layoutTestController)
 15 layoutTestController.overridePreference("WebKitHixie76WebSocketProtocolEnabled", 0);
 16
 17var ws = new WebSocket("ws://127.0.0.1:8880/websocket/tests/hybi/zero-length-text");
 18var closeEvent;
 19var sequence = 0;
 20var receivedText = "";
 21var expectedText = "This first text should be received.This second text should be received, too.";
 22
 23ws.onopen = function()
 24{
 25 debug("onopen() was called.");
 26};
 27
 28ws.onmessage = function(event)
 29{
 30 var message = event.data;
 31 sequence++;
 32 if (sequence > 4) {
 33 testFailed("onmessage() was called. (message = \"" + message + "\")");
 34 } else {
 35 debug("onmessage() was called. (message = \"" + message + "\")");
 36 receivedText += message;
 37 }
 38};
 39
 40ws.onclose = function(event)
 41{
 42 debug("onclose() was called.");
 43 closeEvent = event;
 44 shouldBeTrue("closeEvent.wasClean");
 45 shouldBe("sequence", "4");
 46 shouldBe("receivedText", "expectedText");
 47 finishJSTest();
 48};
 49
 50var successfullyParsed = true;
 51</script>
 52<script src="../../../../js-test-resources/js-test-post.js"></script>
 53</body>
 54</html>

LayoutTests/http/tests/websocket/tests/hybi/zero-length-text_wsh.py

 1from mod_pywebsocket import common
 2from mod_pywebsocket import stream
 3
 4
 5def web_socket_do_extra_handshake(request):
 6 pass
 7
 8
 9def web_socket_transfer_data(request):
 10 payload1 = 'This first text should be received.'
 11 payload2 = 'This second text '
 12 payload3 = 'should be received, too.'
 13
 14 # send ''
 15 request.connection.write(stream.create_header(common.OPCODE_TEXT,
 16 0,
 17 1, 0, 0, 0, 0))
 18
 19 # send payload1
 20 request.connection.write(stream.create_header(common.OPCODE_TEXT,
 21 len(payload1),
 22 1, 0, 0, 0, 0) + payload1)
 23
 24 # send '' + ''
 25 request.connection.write(stream.create_header(common.OPCODE_TEXT,
 26 0,
 27 0, 0, 0, 0, 0))
 28 request.connection.write(stream.create_header(common.OPCODE_CONTINUATION,
 29 0,
 30 1, 0, 0, 0, 0))
 31
 32 # send payload2 + '' + payload3
 33 request.connection.write(stream.create_header(common.OPCODE_TEXT,
 34 len(payload2),
 35 0, 0, 0, 0, 0) + payload2)
 36 request.connection.write(stream.create_header(common.OPCODE_CONTINUATION,
 37 0,
 38 0, 0, 0, 0, 0))
 39 request.connection.write(stream.create_header(common.OPCODE_CONTINUATION,
 40 len(payload3),
 41 1, 0, 0, 0, 0) + payload3)

Source/WebCore/ChangeLog

 12011-08-02 Takashi Toyoshima <toyoshim@chromium.org>
 2
 3 WebSocket: Could not handle zero length text frame.
 4 https://bugs.webkit.org/show_bug.cgi?id=65592
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 Test: http/tests/websocket/tests/hybi/zero-length-text.html
 9
 10 * websockets/WebSocketChannel.cpp:
 11 (WebCore::WebSocketChannel::processFrame):
 12
1132011-08-02 Pavel Feldman <pfeldman@google.com>
214
315 Web Inspector: _normalizeEventTypes (via console's monitorEvents) doesnt handle all events like 'search' and other atypical ones.

Source/WebCore/websockets/WebSocketChannel.cpp

@@bool WebSocketChannel::processFrame()
556556 m_continuousFrameData.swap(continuousFrameData);
557557 m_hasContinuousFrame = false;
558558 if (m_continuousFrameOpCode == OpCodeText) {
559  String message = String::fromUTF8(continuousFrameData.data(), continuousFrameData.size());
 559 String message;
 560 if (continuousFrameData.size())
 561 message = String::fromUTF8(continuousFrameData.data(), continuousFrameData.size());
 562 else
 563 message = "";
560564 if (message.isNull())
561565 fail("Could not decode a text frame as UTF-8.");
562566 else

@@bool WebSocketChannel::processFrame()
570574
571575 case OpCodeText:
572576 if (frame.final) {
573  String message = String::fromUTF8(frame.payload, frame.payloadLength);
 577 String message;
 578 if (frame.payloadLength)
 579 message = String::fromUTF8(frame.payload, frame.payloadLength);
 580 else
 581 message = "";
574582 skipBuffer(frame.frameEnd - m_buffer);
575583 if (message.isNull())
576584 fail("Could not decode a text frame as UTF-8.");