Adding WebSocket per-frame DEFLATE extension
https://bugs.webkit.org/show_bug.cgi?id=77522
Source/JavaScriptCore:
Added USE(ZLIB) flag.
Reviewed by Kent Tamura.
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):