Changeset 52234 in webkit


Ignore:
Timestamp:
Dec 16, 2009 10:19:05 PM (14 years ago)
Author:
ukai@chromium.org
Message:

2009-12-16 Fumitoshi Ukai <ukai@chromium.org>

Reviewed by Alexey Proskuryakov.

Fix flakiness in WebSocket handshake console message.
https://bugs.webkit.org/show_bug.cgi?id=32598

In chromium, LayoutTests/websocket/tests/handshake-error.html is
flaky, because it outputs the following console message several times:

CONSOLE MESSAGE: line 0: Unexpected response code:101

Update m_mode in WebSocketHandshake correctly: Once it finds
error in handshake message, set m_mode to Failed and don't try
reading handshake message again. If handshake message is not yet
fully received, set m_mode to Incomplete, so next didReceiveData()
will try to check handshake message again.

  • websockets/WebSocketChannel.cpp: (WebCore::WebSocketChannel::didReceiveData):
  • websockets/WebSocketHandshake.cpp: (WebCore::WebSocketHandshake::readServerHandshake):
Location:
trunk/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r52233 r52234  
     12009-12-16  Fumitoshi Ukai  <ukai@chromium.org>
     2
     3        Reviewed by Alexey Proskuryakov.
     4
     5        Fix flakiness in WebSocket handshake console message.
     6        https://bugs.webkit.org/show_bug.cgi?id=32598
     7
     8        In chromium, LayoutTests/websocket/tests/handshake-error.html is
     9        flaky, because it outputs the following console message several times:
     10          CONSOLE MESSAGE: line 0: Unexpected response code:101
     11        Update m_mode in WebSocketHandshake correctly: Once it finds
     12        error in handshake message, set m_mode to Failed and don't try
     13        reading handshake message again.  If handshake message is not yet
     14        fully received, set m_mode to Incomplete, so next didReceiveData()
     15        will try to check handshake message again.
     16
     17        * websockets/WebSocketChannel.cpp:
     18        (WebCore::WebSocketChannel::didReceiveData):
     19        * websockets/WebSocketHandshake.cpp:
     20        (WebCore::WebSocketHandshake::readServerHandshake):
     21
    1222009-12-16  Jon Honeycutt  <jhoneycutt@apple.com>
    223
  • trunk/WebCore/websockets/WebSocketChannel.cpp

    r51979 r52234  
    151151        return;
    152152    }
    153     if (m_handshake.mode() != WebSocketHandshake::Connected) {
     153    if (m_handshake.mode() == WebSocketHandshake::Incomplete) {
    154154        int headerLength = m_handshake.readServerHandshake(m_buffer, m_bufferSize);
    155155        if (headerLength <= 0)
     
    180180        LOG(Network, "remaining in read buf %ul", m_bufferSize);
    181181    }
     182    if (m_handshake.mode() != WebSocketHandshake::Connected)
     183        return;
    182184
    183185    const char* nextFrame = m_buffer;
  • trunk/WebCore/websockets/WebSocketHandshake.cpp

    r51979 r52234  
    221221        }
    222222        if (code.isEmpty()) {
     223            m_mode = Failed;
    223224            m_context->addMessage(ConsoleDestination, JSMessageSource, LogMessageType, ErrorMessageLevel, "No response code found: " + String(header, len), 0, clientOrigin());
    224225            return len;
     
    226227        LOG(Network, "response code: %s", code.utf8().data());
    227228        if (code == "401") {
     229            m_mode = Failed;
    228230            m_context->addMessage(ConsoleDestination, JSMessageSource, LogMessageType, ErrorMessageLevel, "Authentication required, but not implemented yet.", 0, clientOrigin());
    229231            return len;
    230232        } else {
     233            m_mode = Failed;
    231234            m_context->addMessage(ConsoleDestination, JSMessageSource, LogMessageType, ErrorMessageLevel, "Unexpected response code:" + code, 0, clientOrigin());
    232235            return len;
     
    238241    if (m_mode == Normal) {
    239242        size_t headerSize = end - p;
    240         if (headerSize < sizeof(webSocketUpgradeHeader) - 1)
     243        if (headerSize < sizeof(webSocketUpgradeHeader) - 1) {
     244            m_mode = Incomplete;
    241245            return 0;
     246        }
    242247        if (memcmp(p, webSocketUpgradeHeader, sizeof(webSocketUpgradeHeader) - 1)) {
     248            m_mode = Failed;
    243249            m_context->addMessage(ConsoleDestination, JSMessageSource, LogMessageType, ErrorMessageLevel, "Bad Upgrade header: " + String(p, end - p), 0, clientOrigin());
    244250            return p - header + sizeof(webSocketUpgradeHeader) - 1;
     
    247253
    248254        headerSize = end - p;
    249         if (headerSize < sizeof(webSocketConnectionHeader) - 1)
     255        if (headerSize < sizeof(webSocketConnectionHeader) - 1) {
     256            m_mode = Incomplete;
    250257            return -1;
     258        }
    251259        if (memcmp(p, webSocketConnectionHeader, sizeof(webSocketConnectionHeader) - 1)) {
     260            m_mode = Failed;
    252261            m_context->addMessage(ConsoleDestination, JSMessageSource, LogMessageType, ErrorMessageLevel, "Bad Connection header: " + String(p, end - p), 0, clientOrigin());
    253262            return p - header + sizeof(webSocketConnectionHeader) - 1;
     
    258267    if (!strnstr(p, "\r\n\r\n", end - p)) {
    259268        // Just hasn't been received fully yet.
     269        m_mode = Incomplete;
    260270        return -1;
    261271    }
Note: See TracChangeset for help on using the changeset viewer.