Title: [112826] trunk
Revision
112826
Author
commit-qu...@webkit.org
Date
2012-04-01 19:53:32 -0700 (Sun, 01 Apr 2012)

Log Message

[WebSocket]Reserved bits test case should cover both extension and no-extension scenarios
https://bugs.webkit.org/show_bug.cgi?id=82100

Patch by Li Yin <li....@intel.com> on 2012-04-01
Reviewed by Kent Tamura.

Source/WebCore:

When it had no negotiated deflate-frame extension, if browser received the frame with
setting compressed bit, it should fail the connection, and it should cover both
enabling ZLIB port and disabling ZLIB port.

Test:  http/tests/websocket/tests/hybi/reserved-bits.html

* Modules/websockets/WebSocketDeflateFramer.cpp:
(WebCore::WebSocketDeflateFramer::inflate):

LayoutTests:

Solve the problem that Qt Webkit failed when runing the reserved-bits.html
Support both enabled ZLIB and disabled ZLIB scenarios.

* http/tests/websocket/tests/hybi/reserved-bits-expected.txt:
* http/tests/websocket/tests/hybi/reserved-bits_wsh.py:
(_get_deflate_frame_extension_processor):
(web_socket_do_extra_handshake):

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (112825 => 112826)


--- trunk/LayoutTests/ChangeLog	2012-04-02 02:43:17 UTC (rev 112825)
+++ trunk/LayoutTests/ChangeLog	2012-04-02 02:53:32 UTC (rev 112826)
@@ -1,3 +1,18 @@
+2012-04-01  Li Yin  <li....@intel.com>
+
+        [WebSocket]Reserved bits test case should cover both extension and no-extension scenarios
+        https://bugs.webkit.org/show_bug.cgi?id=82100
+
+        Reviewed by Kent Tamura.
+
+        Solve the problem that Qt Webkit failed when runing the reserved-bits.html
+        Support both enabled ZLIB and disabled ZLIB scenarios.
+
+        * http/tests/websocket/tests/hybi/reserved-bits-expected.txt:
+        * http/tests/websocket/tests/hybi/reserved-bits_wsh.py:
+        (_get_deflate_frame_extension_processor):
+        (web_socket_do_extra_handshake):
+
 2012-04-01  Adam Barth  <aba...@webkit.org>
 
         Clean up Document::canNavigate

Modified: trunk/LayoutTests/http/tests/websocket/tests/hybi/reserved-bits-expected.txt (112825 => 112826)


--- trunk/LayoutTests/http/tests/websocket/tests/hybi/reserved-bits-expected.txt	2012-04-02 02:43:17 UTC (rev 112825)
+++ trunk/LayoutTests/http/tests/websocket/tests/hybi/reserved-bits-expected.txt	2012-04-02 02:53:32 UTC (rev 112826)
@@ -1,4 +1,4 @@
-CONSOLE MESSAGE: Received unexpected compressed frame
+CONSOLE MESSAGE: Compressed bit must be 0 if no negotiated deflate-frame extension
 CONSOLE MESSAGE: One or more reserved bits are on: reserved2 = 1, reserved3 = 0
 CONSOLE MESSAGE: One or more reserved bits are on: reserved2 = 0, reserved3 = 1
 CONSOLE MESSAGE: One or more reserved bits are on: reserved2 = 1, reserved3 = 0

Modified: trunk/LayoutTests/http/tests/websocket/tests/hybi/reserved-bits_wsh.py (112825 => 112826)


--- trunk/LayoutTests/http/tests/websocket/tests/hybi/reserved-bits_wsh.py	2012-04-02 02:43:17 UTC (rev 112825)
+++ trunk/LayoutTests/http/tests/websocket/tests/hybi/reserved-bits_wsh.py	2012-04-02 02:53:32 UTC (rev 112826)
@@ -1,10 +1,17 @@
 import re
 from mod_pywebsocket import common
 from mod_pywebsocket import stream
+from mod_pywebsocket.extensions import DeflateFrameExtensionProcessor
 
-
 bit = 0
 
+def _get_deflate_frame_extension_processor(request):
+    for extension_processor in request.ws_extension_processors:
+        if isinstance(extension_processor, DeflateFrameExtensionProcessor):
+            return extension_processor
+    return None
+
+
 def web_socket_do_extra_handshake(request):
     match = re.search(r'\?compressed=(true|false)&bitNumber=(\d)$', request.ws_resource)
     if match is None:
@@ -16,6 +23,10 @@
     bit = int(match.group(2))
     if compressed == "false":
         request.ws_extension_processors = [] # using no extension response
+    else:
+        processor = _get_deflate_frame_extension_processor(request)
+        if not processor:
+            request.ws_extension_processors = [] # using no extension response
 
 
 def web_socket_transfer_data(request):

Modified: trunk/Source/WebCore/ChangeLog (112825 => 112826)


--- trunk/Source/WebCore/ChangeLog	2012-04-02 02:43:17 UTC (rev 112825)
+++ trunk/Source/WebCore/ChangeLog	2012-04-02 02:53:32 UTC (rev 112826)
@@ -1,3 +1,19 @@
+2012-04-01  Li Yin  <li....@intel.com>
+
+        [WebSocket]Reserved bits test case should cover both extension and no-extension scenarios
+        https://bugs.webkit.org/show_bug.cgi?id=82100
+
+        Reviewed by Kent Tamura.
+
+        When it had no negotiated deflate-frame extension, if browser received the frame with
+        setting compressed bit, it should fail the connection, and it should cover both
+        enabling ZLIB port and disabling ZLIB port.
+
+        Test:  http/tests/websocket/tests/hybi/reserved-bits.html 
+
+        * Modules/websockets/WebSocketDeflateFramer.cpp:
+        (WebCore::WebSocketDeflateFramer::inflate):
+
 2012-04-01  Adam Barth  <aba...@webkit.org>
 
         Clean up Document::canNavigate

Modified: trunk/Source/WebCore/Modules/websockets/WebSocketDeflateFramer.cpp (112825 => 112826)


--- trunk/Source/WebCore/Modules/websockets/WebSocketDeflateFramer.cpp	2012-04-02 02:43:17 UTC (rev 112825)
+++ trunk/Source/WebCore/Modules/websockets/WebSocketDeflateFramer.cpp	2012-04-02 02:53:32 UTC (rev 112826)
@@ -217,11 +217,15 @@
 
 PassOwnPtr<InflateResultHolder> WebSocketDeflateFramer::inflate(WebSocketFrame& frame)
 {
+    OwnPtr<InflateResultHolder> result = InflateResultHolder::create(this);
+    if (!enabled() && frame.compress) {
+        result->fail("Compressed bit must be 0 if no negotiated deflate-frame extension");
+        return result.release();
+    }
 #if USE(ZLIB)
-    OwnPtr<InflateResultHolder> result = InflateResultHolder::create(this);
     if (!frame.compress)
         return result.release();
-    if (!enabled() || !WebSocketFrame::isNonControlOpCode(frame.opCode)) {
+    if (!WebSocketFrame::isNonControlOpCode(frame.opCode)) {
         result->fail("Received unexpected compressed frame");
         return result.release();
     }
@@ -234,7 +238,7 @@
     frame.payloadLength = m_inflater->size();
     return result.release();
 #else
-    return InflateResultHolder::create(this);
+    return result.release();
 #endif
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to