Changeset 148019 in webkit


Ignore:
Timestamp:
Apr 9, 2013 6:45:14 AM (11 years ago)
Author:
commit-queue@webkit.org
Message:

[WebSocket] Ignore incoming message in CLOSING state
https://bugs.webkit.org/show_bug.cgi?id=85934

Patch by Lamarque V. Souza <Lamarque.Souza@basyskom.com> on 2013-04-09
Reviewed by Kent Tamura.

Source/WebCore:

Change WebSocket implementation to suit the new WebSocket API, which
states that we should ignore messages in CLOSING state.

No new tests, updating existing tests.

  • Modules/websockets/WebSocket.cpp:

(WebCore::WebSocket::didReceiveMessage):

LayoutTests:

  • http/tests/websocket/tests/hybi/client-close-expected.txt: Rebaseline.
  • http/tests/websocket/tests/hybi/client-close.html: Change expected results.
  • http/tests/websocket/tests/hybi/client-close_wsh.py: Embed message in close frame

instead of using regular message sending call.

  • http/tests/websocket/tests/hybi/fragmented-frames.html: Call WebSocket.close()

only after receiving all messages from server.

  • http/tests/websocket/tests/hybi/unmasked-frames.html: Remove extra

WebSocket.close() call that caused regression.

Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r148015 r148019  
     12013-04-09  Lamarque V. Souza  <Lamarque.Souza@basyskom.com>
     2
     3        [WebSocket] Ignore incoming message in CLOSING state
     4        https://bugs.webkit.org/show_bug.cgi?id=85934
     5
     6        Reviewed by Kent Tamura.
     7
     8        * http/tests/websocket/tests/hybi/client-close-expected.txt: Rebaseline.
     9        * http/tests/websocket/tests/hybi/client-close.html: Change expected results.
     10        * http/tests/websocket/tests/hybi/client-close_wsh.py: Embed message in close frame
     11        instead of using regular message sending call.
     12        * http/tests/websocket/tests/hybi/fragmented-frames.html: Call WebSocket.close()
     13        only after receiving all messages from server.
     14        * http/tests/websocket/tests/hybi/unmasked-frames.html: Remove extra
     15        WebSocket.close() call that caused regression.
     16
    1172013-04-09  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>
    218
  • trunk/LayoutTests/http/tests/websocket/tests/hybi/client-close-expected.txt

    r91243 r148019  
    1 WebSocket: Test client-initiated close.
     1WebSocket: Test client-initiated close. After WebSocket.close() any message from server must be discarded by WebSocket stack according to the new WebSocket API. See http://webkit.org/b/85934.
    22
    33On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
    44
    55Connected
    6 Received: close_frame[:2]='\x88\x80'
    76Closed
    8 PASS receivedMessage is "close_frame[:2]='\\x88\\x80'"
     7PASS receivedMessage is undefined.
     8PASS closeEvent.reason is "close_frame[:2]='\\x88\\x80'"
    99PASS closeEvent.wasClean is true
    1010PASS successfullyParsed is true
  • trunk/LayoutTests/http/tests/websocket/tests/hybi/client-close.html

    r122256 r148019  
    1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
     1<!DOCTYPE HTML>
    22<html>
    33<head>
    4 <script src="../../../../js-test-resources/js-test-pre.js"></script>
     4<script src="/js-test-resources/js-test-pre.js"></script>
    55</head>
    66<body>
     
    88<div id="console"></div>
    99<script type="text/javascript">
    10 description("WebSocket: Test client-initiated close.");
     10description("WebSocket: Test client-initiated close. After WebSocket.close() any message from server must be discarded by WebSocket stack according to the new WebSocket API. See http://webkit.org/b/85934.");
    1111
    1212window.jsTestIsAsync = true;
     
    2424ws.onmessage = function(messageEvent)
    2525{
    26     debug("Received: " + messageEvent.data);
     26    debug("Message should have been ignored: " + messageEvent.data);
    2727    receivedMessage = messageEvent.data;
    2828};
     
    3232    debug("Closed");
    3333    closeEvent = event;
    34     shouldBeEqualToString("receivedMessage", "close_frame[:2]='\\x88\\x80'");
     34    shouldBeUndefined("receivedMessage");
     35    shouldBeEqualToString("closeEvent.reason", "close_frame[:2]='\\x88\\x80'");
    3536    shouldBeTrue("closeEvent.wasClean");
    3637    finishJSTest();
  • trunk/LayoutTests/http/tests/websocket/tests/hybi/client-close_wsh.py

    r91243 r148019  
     1import struct
     2
    13from mod_pywebsocket import msgutil
    2 
     4from mod_pywebsocket import stream
    35
    46def web_socket_do_extra_handshake(request):
     
    1012    close_frame = request.ws_stream.receive_bytes(6)
    1113
     14    msgutil.send_message(request, 'Client should ignore this message')
     15
    1216    # Send only first two bytes of the received frame. The remaining four bytes are
    1317    # "masking key", which changes every time the test runs.
    14     msgutil.send_message(request, 'close_frame[:2]=%r' % close_frame[:2])
     18    data = struct.pack('!H', 1000) + 'close_frame[:2]=%r' % close_frame[:2]
     19    request.connection.write(stream.create_close_frame(data))
    1520
    1621    # If the following assertion fails, AssertionError will be raised,
  • trunk/LayoutTests/http/tests/websocket/tests/hybi/fragmented-frames.html

    r122256 r148019  
    22<html>
    33<head>
    4 <script src="../../../../js-test-resources/js-test-pre.js"></script>
     4<script src="/js-test-resources/js-test-pre.js"></script>
    55</head>
    66<body>
     
    2121{
    2222    debug("onopen() was called.");
    23     ws.close();
    2423};
    2524
     
    2928    debug("onmessage() was called. (message = \"" + message + "\")");
    3029    actualMessages.push(message);
     30
     31    if (actualMessages.length == 3)
     32        ws.close();
    3133};
    3234
  • trunk/LayoutTests/http/tests/websocket/tests/hybi/unmasked-frames.html

    r122256 r148019  
    22<html>
    33<head>
    4 <script src="../../../../js-test-resources/js-test-pre.js"></script>
     4<script src="/js-test-resources/js-test-pre.js"></script>
    55</head>
    66<body>
     
    2121{
    2222    debug("onopen() was called.");
    23     ws.close();
    2423};
    2524
  • trunk/Source/WebCore/ChangeLog

    r148017 r148019  
     12013-04-09  Lamarque V. Souza  <Lamarque.Souza@basyskom.com>
     2
     3        [WebSocket] Ignore incoming message in CLOSING state
     4        https://bugs.webkit.org/show_bug.cgi?id=85934
     5
     6        Reviewed by Kent Tamura.
     7
     8        Change WebSocket implementation to suit the new WebSocket API, which
     9        states that we should ignore messages in CLOSING state.
     10
     11        No new tests, updating existing tests.
     12
     13        * Modules/websockets/WebSocket.cpp:
     14        (WebCore::WebSocket::didReceiveMessage):
     15
    1162013-04-09  Seokju Kwon  <seokju.kwon@gmail.com>
    217
  • trunk/Source/WebCore/Modules/websockets/WebSocket.cpp

    r147556 r148019  
    514514{
    515515    LOG(Network, "WebSocket %p didReceiveMessage() Text message '%s'", this, msg.utf8().data());
    516     if (m_state != OPEN && m_state != CLOSING)
     516    if (m_state != OPEN)
    517517        return;
    518518    ASSERT(scriptExecutionContext());
Note: See TracChangeset for help on using the changeset viewer.