Skip to content
  • bashi@chromium.org's avatar
    Adding WebSocket per-frame DEFLATE extension · fc1d3cd0
    bashi@chromium.org authored
    https://bugs.webkit.org/show_bug.cgi?id=77522
    
    Source/JavaScriptCore:
    
    Added USE(ZLIB) flag.
    
    Reviewed by Kent Tamura.
    
    * wtf/Platform.h:
    
    Source/WebCore:
    
    Add WebSocketDeflateFramer class which handles deflate-frame extension.
    This class encapsulates WebSocketDeflater and WebSocketInflater classes,
    which depend on zlib, so that WebSocketChannel is not necessary to aware
    zlib dependency.
    
    Reviewed by Kent Tamura.
    
    Tests: http/tests/websocket/tests/hybi/compressed-control-frame.html
           http/tests/websocket/tests/hybi/deflate-frame-comp-bit-onoff.html
           http/tests/websocket/tests/hybi/deflate-frame-invalid-parameter.html
           http/tests/websocket/tests/hybi/deflate-frame-parameter.html
    
    * CMakeLists.txt: Added WebSocketDeflateFramer.(cpp|h)
    * GNUmakefile.list.am: Ditto.
    * Target.pri: Ditto.
    * WebCore.gypi: Ditto.
    * WebCore.vcproj/WebCore.vcproj: Ditto.
    * WebCore.xcodeproj/project.pbxproj: Ditto.
    * websockets/WebSocket.cpp:
    (WebCore::WebSocket::didConnect): Set m_extensions.
    * websockets/WebSocketChannel.cpp:
    (WebCore::WebSocketChannel::connect): Add deflate-frame extension processor to WebSocketHanshake if deflate can use.
    (WebCore::WebSocketChannel::fail): Call m_deflateFramer.didFail().
    (WebCore::WebSocketChannel::processFrame): Decompress frames if needed.
    (WebCore::WebSocketChannel::sendFrame): Compress frames if possible.
    * websockets/WebSocketChannel.h:
    * websockets/WebSocketDeflateFramer.cpp: Added.
    (WebCore):
    (WebSocketExtensionDeflateFrame):
    (WebCore::WebSocketExtensionDeflateFrame::create):
    (WebCore::WebSocketExtensionDeflateFrame::~WebSocketExtensionDeflateFrame):
    (WebCore::WebSocketExtensionDeflateFrame::WebSocketExtensionDeflateFrame):
    (WebCore::WebSocketExtensionDeflateFrame::handshakeString):
    (WebCore::WebSocketExtensionDeflateFrame::processResponse):
    (WebCore::DeflateResultHolder::DeflateResultHolder):
    (WebCore::DeflateResultHolder::~DeflateResultHolder):
    (WebCore::DeflateResultHolder::fail):
    (WebCore::InflateResultHolder::InflateResultHolder):
    (WebCore::InflateResultHolder::~InflateResultHolder):
    (WebCore::InflateResultHolder::fail):
    (WebCore::WebSocketDeflateFramer::WebSocketDeflateFramer):
    (WebCore::WebSocketDeflateFramer::createExtensionProcessor):
    (WebCore::WebSocketDeflateFramer::canDeflate):
    (WebCore::WebSocketDeflateFramer::enableDeflate):
    (WebCore::WebSocketDeflateFramer::deflate):
    (WebCore::WebSocketDeflateFramer::resetDeflateContext):
    (WebCore::WebSocketDeflateFramer::inflate):
    (WebCore::WebSocketDeflateFramer::resetInflateContext):
    (WebCore::WebSocketDeflateFramer::didFail):
    * websockets/WebSocketDeflateFramer.h: Added.
    (WebCore):
    (DeflateResultHolder):
    (WebCore::DeflateResultHolder::succeeded):
    (WebCore::DeflateResultHolder::failureReason):
    (InflateResultHolder):
    (WebCore::InflateResultHolder::succeeded):
    (WebCore::InflateResultHolder::failureReason):
    (WebSocketDeflateFramer):
    (WebCore::WebSocketDeflateFramer::enabled):
    
    LayoutTests:
    
    Added tests for WebSocket deflate-frame extension. Also updated some
    tests to follow the change.
    
    Reviewed by Kent Tamura.
    
    * http/tests/websocket/tests/hybi/compressed-control-frame-expected.txt: Added.
    * http/tests/websocket/tests/hybi/compressed-control-frame.html: Added.
    * http/tests/websocket/tests/hybi/compressed-control-frame_wsh.py: Added.
    (web_socket_do_extra_handshake):
    (web_socket_transfer_data):
    * http/tests/websocket/tests/hybi/deflate-frame-comp-bit-onoff-expected.txt: Added.
    * http/tests/websocket/tests/hybi/deflate-frame-comp-bit-onoff.html: Added.
    * http/tests/websocket/tests/hybi/deflate-frame-invalid-parameter-expected.txt: Added.
    * http/tests/websocket/tests/hybi/deflate-frame-invalid-parameter.html: Added.
    * http/tests/websocket/tests/hybi/deflate-frame-invalid-parameter_wsh.py: Added.
    (web_socket_do_extra_handshake):
    (web_socket_transfer_data):
    * http/tests/websocket/tests/hybi/deflate-frame-parameter-expected.txt: Added.
    * http/tests/websocket/tests/hybi/deflate-frame-parameter.html: Added.
    * http/tests/websocket/tests/hybi/deflate-frame_wsh.py: Added.
    (_get_deflate_frame_extension_processor):
    (web_socket_do_extra_handshake):
    (web_socket_transfer_data):
    * http/tests/websocket/tests/hybi/handshake-fail-by-extensions-header-expected.txt:
    * http/tests/websocket/tests/hybi/send-file-blob_wsh.py:
    (_retrieve_frame):
    (web_socket_transfer_data):
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@108468 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    fc1d3cd0