diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-12 14:27:29 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:35:20 +0000 |
commit | c30a6232df03e1efbd9f3b226777b07e087a1122 (patch) | |
tree | e992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/net/websockets/websocket_stream_test.cc | |
parent | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff) | |
download | qtwebengine-chromium-85-based.tar.gz |
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/net/websockets/websocket_stream_test.cc')
-rw-r--r-- | chromium/net/websockets/websocket_stream_test.cc | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/chromium/net/websockets/websocket_stream_test.cc b/chromium/net/websockets/websocket_stream_test.cc index d4dfb6f582b..7784392afa2 100644 --- a/chromium/net/websockets/websocket_stream_test.cc +++ b/chromium/net/websockets/websocket_stream_test.cc @@ -1749,5 +1749,45 @@ TEST_P(WebSocketStreamCreateTest, ContinueSSLRequestAfterDelete) { ssl_error_callbacks_->ContinueSSLRequest(); } +TEST_P(WebSocketStreamCreateTest, HandleConnectionCloseInFirstSegment) { + std::string request = + WebSocketStandardRequest("/", "www.example.org", Origin(), "", ""); + + // The response headers are immediately followed by a close frame, length 11, + // code 1013, reason "Try Again". + std::string close_body = "\x03\xf5Try Again"; + std::string response = WebSocketStandardResponse(std::string()) + "\x88" + + static_cast<char>(close_body.size()) + close_body; + MockRead reads[] = { + MockRead(SYNCHRONOUS, response.data(), response.size(), 1), + MockRead(SYNCHRONOUS, ERR_CONNECTION_CLOSED, 2), + }; + MockWrite writes[] = {MockWrite(SYNCHRONOUS, 0, request.c_str())}; + std::unique_ptr<SequencedSocketData> socket_data( + BuildSocketData(reads, writes)); + socket_data->set_connect_data(MockConnect(SYNCHRONOUS, OK)); + CreateAndConnectRawExpectations("ws://www.example.org/", NoSubProtocols(), + HttpRequestHeaders(), std::move(socket_data)); + WaitUntilConnectDone(); + ASSERT_TRUE(stream_); + + std::vector<std::unique_ptr<WebSocketFrame>> frames; + TestCompletionCallback callback1; + int rv1 = stream_->ReadFrames(&frames, callback1.callback()); + rv1 = callback1.GetResult(rv1); + ASSERT_THAT(rv1, IsOk()); + ASSERT_EQ(1U, frames.size()); + EXPECT_EQ(frames[0]->header.opcode, WebSocketFrameHeader::kOpCodeClose); + EXPECT_TRUE(frames[0]->header.final); + EXPECT_EQ(close_body, + std::string(frames[0]->payload, frames[0]->header.payload_length)); + + std::vector<std::unique_ptr<WebSocketFrame>> empty_frames; + TestCompletionCallback callback2; + int rv2 = stream_->ReadFrames(&empty_frames, callback2.callback()); + rv2 = callback2.GetResult(rv2); + ASSERT_THAT(rv2, IsError(ERR_CONNECTION_CLOSED)); +} + } // namespace } // namespace net |