Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(357)

Unified Diff: net/websockets/websocket_channel_test.cc

Issue 2267233002: Change WebSocketChannel to pass data via IOBuffer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update per review feedback Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/websockets/websocket_channel.cc ('k') | net/websockets/websocket_end_to_end_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/websockets/websocket_channel_test.cc
diff --git a/net/websockets/websocket_channel_test.cc b/net/websockets/websocket_channel_test.cc
index 32dae8a0acd9083d92592884c72150c328f6a94b..1ef0291253d79746ed4a201a67bafec5f439d56a 100644
--- a/net/websockets/websocket_channel_test.cc
+++ b/net/websockets/websocket_channel_test.cc
@@ -157,13 +157,22 @@ class MockWebSocketEventInterface : public WebSocketEventInterface {
public:
MockWebSocketEventInterface() {}
+ ChannelState OnDataFrame(bool fin,
+ WebSocketMessageType type,
+ scoped_refptr<IOBuffer> buffer,
+ size_t buffer_size) override {
+ char* data = buffer ? buffer->data() : nullptr;
yhirano 2016/10/04 01:35:09 |const char*| might be preferable.
darin (slow to review) 2016/10/04 16:17:48 Done.
+ return OnDataFrameVector(fin, type,
+ std::vector<char>(data, data + buffer_size));
+ }
+
MOCK_METHOD2(OnAddChannelResponse,
ChannelState(const std::string&,
const std::string&)); // NOLINT
- MOCK_METHOD3(OnDataFrame,
+ MOCK_METHOD3(OnDataFrameVector,
ChannelState(bool,
WebSocketMessageType,
- const std::vector<char>&)); // NOLINT
+ const std::vector<char>&)); // NOLINT
MOCK_METHOD1(OnFlowControl, ChannelState(int64_t)); // NOLINT
MOCK_METHOD0(OnClosingHandshake, ChannelState(void)); // NOLINT
MOCK_METHOD1(OnFailChannel, ChannelState(const std::string&)); // NOLINT
@@ -207,7 +216,8 @@ class FakeWebSocketEventInterface : public WebSocketEventInterface {
}
ChannelState OnDataFrame(bool fin,
WebSocketMessageType type,
- const std::vector<char>& data) override {
+ scoped_refptr<IOBuffer> data,
+ size_t data_size) override {
return CHANNEL_ALIVE;
}
ChannelState OnFlowControl(int64_t quota) override { return CHANNEL_ALIVE; }
@@ -732,13 +742,19 @@ struct WebSocketStreamCreationCallbackArgumentSaver {
std::unique_ptr<WebSocketStream::ConnectDelegate> connect_delegate;
};
-// Converts a std::string to a std::vector<char>. For test purposes, it is
-// convenient to be able to specify data as a string, but the
-// WebSocketEventInterface requires the vector<char> type.
-std::vector<char> AsVector(const std::string& s) {
+std::vector<char> AsVector(const base::StringPiece& s) {
return std::vector<char>(s.begin(), s.end());
}
+// Converts a base::StringPiece to a IOBuffer. For test purposes, it is
+// convenient to be able to specify data as a string, but the
+// WebSocketEventInterface requires the IOBuffer type.
+scoped_refptr<IOBuffer> AsIOBuffer(const base::StringPiece& s) {
+ scoped_refptr<IOBuffer> buffer(new IOBuffer(s.size()));
+ std::copy(s.begin(), s.end(), buffer->data());
+ return buffer;
+}
+
class FakeSSLErrorCallbacks
: public WebSocketEventInterface::SSLErrorCallbacks {
public:
@@ -881,7 +897,8 @@ class ChannelDeletingFakeWebSocketEventInterface
ChannelState OnDataFrame(bool fin,
WebSocketMessageType type,
- const std::vector<char>& data) override {
+ scoped_refptr<IOBuffer> data,
+ size_t data_size) override {
return fixture_->DeleteIfDeleting(EVENT_ON_DATA_FRAME);
}
@@ -1106,9 +1123,9 @@ TEST_F(WebSocketChannelDeletingTest, OnFlowControlAfterSend) {
CreateChannelAndConnectSuccessfully();
ASSERT_TRUE(channel_);
deleting_ = EVENT_ON_FLOW_CONTROL;
- channel_->SendFrame(true,
- WebSocketFrameHeader::kOpCodeText,
- std::vector<char>(kDefaultInitialQuota, 'B'));
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText,
+ AsIOBuffer(std::string(kDefaultInitialQuota, 'B')),
+ kDefaultInitialQuota);
EXPECT_EQ(nullptr, channel_.get());
}
@@ -1145,8 +1162,8 @@ TEST_F(WebSocketChannelDeletingTest, OnDropChannelWriteError) {
deleting_ = EVENT_ON_DROP_CHANNEL;
CreateChannelAndConnectSuccessfully();
ASSERT_TRUE(channel_);
- channel_->SendFrame(
- true, WebSocketFrameHeader::kOpCodeText, AsVector("this will fail"));
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText,
+ AsIOBuffer("this will fail"), 14U);
EXPECT_EQ(nullptr, channel_.get());
}
@@ -1208,9 +1225,9 @@ TEST_F(WebSocketChannelDeletingTest, FailChannelInSendFrame) {
deleting_ = EVENT_ON_FAIL_CHANNEL;
CreateChannelAndConnectSuccessfully();
ASSERT_TRUE(channel_);
- channel_->SendFrame(true,
- WebSocketFrameHeader::kOpCodeText,
- std::vector<char>(kDefaultInitialQuota * 2, 'T'));
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText,
+ AsIOBuffer(std::string(kDefaultInitialQuota * 2, 'T')),
+ kDefaultInitialQuota * 2);
EXPECT_EQ(nullptr, channel_.get());
}
@@ -1395,10 +1412,9 @@ TEST_F(WebSocketChannelEventInterfaceTest, DataLeftFromHandshake) {
InSequence s;
EXPECT_CALL(*event_interface_, OnAddChannelResponse(_, _));
EXPECT_CALL(*event_interface_, OnFlowControl(_));
- EXPECT_CALL(
- *event_interface_,
- OnDataFrame(
- true, WebSocketFrameHeader::kOpCodeText, AsVector("HELLO")));
+ EXPECT_CALL(*event_interface_,
+ OnDataFrameVector(true, WebSocketFrameHeader::kOpCodeText,
+ AsVector("HELLO")));
}
CreateChannelAndConnectSuccessfully();
@@ -1464,10 +1480,9 @@ TEST_F(WebSocketChannelEventInterfaceTest, NormalAsyncRead) {
EXPECT_CALL(*event_interface_, OnAddChannelResponse(_, _));
EXPECT_CALL(*event_interface_, OnFlowControl(_));
EXPECT_CALL(checkpoint, Call(1));
- EXPECT_CALL(
- *event_interface_,
- OnDataFrame(
- true, WebSocketFrameHeader::kOpCodeText, AsVector("HELLO")));
+ EXPECT_CALL(*event_interface_,
+ OnDataFrameVector(true, WebSocketFrameHeader::kOpCodeText,
+ AsVector("HELLO")));
EXPECT_CALL(checkpoint, Call(2));
}
@@ -1493,14 +1508,12 @@ TEST_F(WebSocketChannelEventInterfaceTest, AsyncThenSyncRead) {
InSequence s;
EXPECT_CALL(*event_interface_, OnAddChannelResponse(_, _));
EXPECT_CALL(*event_interface_, OnFlowControl(_));
- EXPECT_CALL(
- *event_interface_,
- OnDataFrame(
- true, WebSocketFrameHeader::kOpCodeText, AsVector("HELLO")));
- EXPECT_CALL(
- *event_interface_,
- OnDataFrame(
- true, WebSocketFrameHeader::kOpCodeText, AsVector("WORLD")));
+ EXPECT_CALL(*event_interface_,
+ OnDataFrameVector(true, WebSocketFrameHeader::kOpCodeText,
+ AsVector("HELLO")));
+ EXPECT_CALL(*event_interface_,
+ OnDataFrameVector(true, WebSocketFrameHeader::kOpCodeText,
+ AsVector("WORLD")));
}
CreateChannelAndConnectSuccessfully();
@@ -1535,26 +1548,25 @@ TEST_F(WebSocketChannelEventInterfaceTest, FragmentedMessage) {
InSequence s;
EXPECT_CALL(*event_interface_, OnAddChannelResponse(_, _));
EXPECT_CALL(*event_interface_, OnFlowControl(_));
+ EXPECT_CALL(*event_interface_,
+ OnDataFrameVector(false, WebSocketFrameHeader::kOpCodeText,
+ AsVector("THREE")));
EXPECT_CALL(
*event_interface_,
- OnDataFrame(
- false, WebSocketFrameHeader::kOpCodeText, AsVector("THREE")));
+ OnDataFrameVector(false, WebSocketFrameHeader::kOpCodeContinuation,
+ AsVector(" ")));
EXPECT_CALL(
*event_interface_,
- OnDataFrame(
- false, WebSocketFrameHeader::kOpCodeContinuation, AsVector(" ")));
- EXPECT_CALL(*event_interface_,
- OnDataFrame(false,
- WebSocketFrameHeader::kOpCodeContinuation,
- AsVector("SMALL")));
+ OnDataFrameVector(false, WebSocketFrameHeader::kOpCodeContinuation,
+ AsVector("SMALL")));
EXPECT_CALL(
*event_interface_,
- OnDataFrame(
- false, WebSocketFrameHeader::kOpCodeContinuation, AsVector(" ")));
- EXPECT_CALL(*event_interface_,
- OnDataFrame(true,
- WebSocketFrameHeader::kOpCodeContinuation,
- AsVector("FRAMES")));
+ OnDataFrameVector(false, WebSocketFrameHeader::kOpCodeContinuation,
+ AsVector(" ")));
+ EXPECT_CALL(
+ *event_interface_,
+ OnDataFrameVector(true, WebSocketFrameHeader::kOpCodeContinuation,
+ AsVector("FRAMES")));
}
CreateChannelAndConnectSuccessfully();
@@ -1573,7 +1585,7 @@ TEST_F(WebSocketChannelEventInterfaceTest, NullMessage) {
EXPECT_CALL(*event_interface_, OnFlowControl(_));
EXPECT_CALL(
*event_interface_,
- OnDataFrame(true, WebSocketFrameHeader::kOpCodeText, AsVector("")));
+ OnDataFrameVector(true, WebSocketFrameHeader::kOpCodeText, AsVector("")));
CreateChannelAndConnectSuccessfully();
}
@@ -1682,14 +1694,13 @@ TEST_F(WebSocketChannelEventInterfaceTest, ControlFrameInDataMessage) {
InSequence s;
EXPECT_CALL(*event_interface_, OnAddChannelResponse(_, _));
EXPECT_CALL(*event_interface_, OnFlowControl(_));
+ EXPECT_CALL(*event_interface_,
+ OnDataFrameVector(false, WebSocketFrameHeader::kOpCodeText,
+ AsVector("SPLIT ")));
EXPECT_CALL(
*event_interface_,
- OnDataFrame(
- false, WebSocketFrameHeader::kOpCodeText, AsVector("SPLIT ")));
- EXPECT_CALL(*event_interface_,
- OnDataFrame(true,
- WebSocketFrameHeader::kOpCodeContinuation,
- AsVector("MESSAGE")));
+ OnDataFrameVector(true, WebSocketFrameHeader::kOpCodeContinuation,
+ AsVector("MESSAGE")));
}
CreateChannelAndConnectSuccessfully();
@@ -1748,7 +1759,8 @@ TEST_F(WebSocketChannelEventInterfaceTest, SmallWriteDoesntUpdateQuota) {
}
CreateChannelAndConnectSuccessfully();
- channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText, AsVector("B"));
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText, AsIOBuffer("B"),
+ 1U);
}
// If we send enough to go below |send_quota_low_water_mark_| we should get our
@@ -1769,9 +1781,9 @@ TEST_F(WebSocketChannelEventInterfaceTest, LargeWriteUpdatesQuota) {
CreateChannelAndConnectSuccessfully();
checkpoint.Call(1);
- channel_->SendFrame(true,
- WebSocketFrameHeader::kOpCodeText,
- std::vector<char>(kDefaultInitialQuota, 'B'));
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText,
+ AsIOBuffer(std::string(kDefaultInitialQuota, 'B')),
+ kDefaultInitialQuota);
checkpoint.Call(2);
}
@@ -1794,14 +1806,14 @@ TEST_F(WebSocketChannelEventInterfaceTest, QuotaReallyIsRefreshed) {
CreateChannelAndConnectSuccessfully();
checkpoint.Call(1);
- channel_->SendFrame(true,
- WebSocketFrameHeader::kOpCodeText,
- std::vector<char>(kDefaultQuotaRefreshTrigger, 'D'));
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText,
+ AsIOBuffer(std::string(kDefaultQuotaRefreshTrigger, 'D')),
+ kDefaultQuotaRefreshTrigger);
checkpoint.Call(2);
// We should have received more quota at this point.
- channel_->SendFrame(true,
- WebSocketFrameHeader::kOpCodeText,
- std::vector<char>(kDefaultQuotaRefreshTrigger, 'E'));
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText,
+ AsIOBuffer(std::string(kDefaultQuotaRefreshTrigger, 'E')),
+ kDefaultQuotaRefreshTrigger);
checkpoint.Call(3);
}
@@ -1817,9 +1829,9 @@ TEST_F(WebSocketChannelEventInterfaceTest, WriteOverQuotaIsRejected) {
}
CreateChannelAndConnectSuccessfully();
- channel_->SendFrame(true,
- WebSocketFrameHeader::kOpCodeText,
- std::vector<char>(kDefaultInitialQuota + 1, 'C'));
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText,
+ AsIOBuffer(std::string(kDefaultInitialQuota + 1, 'C')),
+ kDefaultInitialQuota + 1);
}
// If a write fails, the channel is dropped.
@@ -1839,7 +1851,8 @@ TEST_F(WebSocketChannelEventInterfaceTest, FailedWrite) {
CreateChannelAndConnectSuccessfully();
checkpoint.Call(1);
- channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText, AsVector("H"));
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText, AsIOBuffer("H"),
+ 1U);
checkpoint.Call(2);
}
@@ -1885,7 +1898,8 @@ TEST_F(WebSocketChannelEventInterfaceTest, OnDropChannelCalledOnce) {
CreateChannelAndConnectSuccessfully();
- channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText, AsVector("yt?"));
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText,
+ AsIOBuffer("yt?"), 3U);
base::RunLoop().RunUntilIdle();
}
@@ -2334,17 +2348,17 @@ TEST_F(WebSocketChannelFlowControlTest, SingleFrameMessageSplitSync) {
InSequence s;
EXPECT_CALL(*event_interface_, OnAddChannelResponse(_, _));
EXPECT_CALL(*event_interface_, OnFlowControl(_));
+ EXPECT_CALL(*event_interface_,
+ OnDataFrameVector(false, WebSocketFrameHeader::kOpCodeText,
+ AsVector("FO")));
EXPECT_CALL(
*event_interface_,
- OnDataFrame(false, WebSocketFrameHeader::kOpCodeText, AsVector("FO")));
- EXPECT_CALL(
- *event_interface_,
- OnDataFrame(
- false, WebSocketFrameHeader::kOpCodeContinuation, AsVector("U")));
+ OnDataFrameVector(false, WebSocketFrameHeader::kOpCodeContinuation,
+ AsVector("U")));
EXPECT_CALL(
*event_interface_,
- OnDataFrame(
- true, WebSocketFrameHeader::kOpCodeContinuation, AsVector("R")));
+ OnDataFrameVector(true, WebSocketFrameHeader::kOpCodeContinuation,
+ AsVector("R")));
}
CreateChannelAndConnectWithQuota(2);
@@ -2367,19 +2381,19 @@ TEST_F(WebSocketChannelFlowControlTest, SingleFrameMessageSplitAsync) {
EXPECT_CALL(*event_interface_, OnAddChannelResponse(_, _));
EXPECT_CALL(*event_interface_, OnFlowControl(_));
EXPECT_CALL(checkpoint, Call(1));
- EXPECT_CALL(
- *event_interface_,
- OnDataFrame(false, WebSocketFrameHeader::kOpCodeText, AsVector("FO")));
+ EXPECT_CALL(*event_interface_,
+ OnDataFrameVector(false, WebSocketFrameHeader::kOpCodeText,
+ AsVector("FO")));
EXPECT_CALL(checkpoint, Call(2));
EXPECT_CALL(
*event_interface_,
- OnDataFrame(
- false, WebSocketFrameHeader::kOpCodeContinuation, AsVector("U")));
+ OnDataFrameVector(false, WebSocketFrameHeader::kOpCodeContinuation,
+ AsVector("U")));
EXPECT_CALL(checkpoint, Call(3));
EXPECT_CALL(
*event_interface_,
- OnDataFrame(
- true, WebSocketFrameHeader::kOpCodeContinuation, AsVector("R")));
+ OnDataFrameVector(true, WebSocketFrameHeader::kOpCodeContinuation,
+ AsVector("R")));
}
CreateChannelAndConnectWithQuota(2);
@@ -2413,25 +2427,24 @@ TEST_F(WebSocketChannelFlowControlTest, MultipleFrameSplit) {
EXPECT_CALL(*event_interface_, OnAddChannelResponse(_, _));
EXPECT_CALL(*event_interface_, OnFlowControl(_));
EXPECT_CALL(*event_interface_,
- OnDataFrame(false,
- WebSocketFrameHeader::kOpCodeText,
- AsVector("FIRST FRAME IS")));
- EXPECT_CALL(*event_interface_,
- OnDataFrame(false,
- WebSocketFrameHeader::kOpCodeContinuation,
- AsVector(" 25 BYTES. ")));
- EXPECT_CALL(*event_interface_,
- OnDataFrame(false,
- WebSocketFrameHeader::kOpCodeContinuation,
- AsVector("SECOND FRAME IS 26 BYTES. ")));
- EXPECT_CALL(*event_interface_,
- OnDataFrame(false,
- WebSocketFrameHeader::kOpCodeContinuation,
- AsVector("FINAL ")));
- EXPECT_CALL(*event_interface_,
- OnDataFrame(true,
- WebSocketFrameHeader::kOpCodeContinuation,
- AsVector("FRAME IS 24 BYTES.")));
+ OnDataFrameVector(false, WebSocketFrameHeader::kOpCodeText,
+ AsVector("FIRST FRAME IS")));
+ EXPECT_CALL(
+ *event_interface_,
+ OnDataFrameVector(false, WebSocketFrameHeader::kOpCodeContinuation,
+ AsVector(" 25 BYTES. ")));
+ EXPECT_CALL(
+ *event_interface_,
+ OnDataFrameVector(false, WebSocketFrameHeader::kOpCodeContinuation,
+ AsVector("SECOND FRAME IS 26 BYTES. ")));
+ EXPECT_CALL(
+ *event_interface_,
+ OnDataFrameVector(false, WebSocketFrameHeader::kOpCodeContinuation,
+ AsVector("FINAL ")));
+ EXPECT_CALL(
+ *event_interface_,
+ OnDataFrameVector(true, WebSocketFrameHeader::kOpCodeContinuation,
+ AsVector("FRAME IS 24 BYTES.")));
}
CreateChannelAndConnectWithQuota(14);
ASSERT_EQ(CHANNEL_ALIVE, channel_->SendFlowControl(43));
@@ -2456,21 +2469,18 @@ TEST_F(WebSocketChannelFlowControlTest, EmptyMessageNoQuota) {
EXPECT_CALL(*event_interface_, OnAddChannelResponse(_, _));
EXPECT_CALL(*event_interface_, OnFlowControl(_));
EXPECT_CALL(*event_interface_,
- OnDataFrame(false,
- WebSocketFrameHeader::kOpCodeText,
- AsVector("FIRST ")));
- EXPECT_CALL(*event_interface_,
- OnDataFrame(true,
- WebSocketFrameHeader::kOpCodeContinuation,
- AsVector("MESSAGE")));
+ OnDataFrameVector(false, WebSocketFrameHeader::kOpCodeText,
+ AsVector("FIRST ")));
+ EXPECT_CALL(
+ *event_interface_,
+ OnDataFrameVector(true, WebSocketFrameHeader::kOpCodeContinuation,
+ AsVector("MESSAGE")));
EXPECT_CALL(*event_interface_,
- OnDataFrame(true,
- WebSocketFrameHeader::kOpCodeText,
- AsVector("")));
+ OnDataFrameVector(true, WebSocketFrameHeader::kOpCodeText,
+ AsVector("")));
EXPECT_CALL(*event_interface_,
- OnDataFrame(true,
- WebSocketFrameHeader::kOpCodeText,
- AsVector("THIRD MESSAGE")));
+ OnDataFrameVector(true, WebSocketFrameHeader::kOpCodeText,
+ AsVector("THIRD MESSAGE")));
}
CreateChannelAndConnectWithQuota(6);
@@ -2498,23 +2508,25 @@ TEST_F(WebSocketChannelFlowControlTest, CloseFrameShouldNotOvertakeDataFrames) {
EXPECT_CALL(*event_interface_, OnAddChannelResponse(_, _));
EXPECT_CALL(*event_interface_, OnFlowControl(_));
EXPECT_CALL(*event_interface_,
- OnDataFrame(false, WebSocketFrameHeader::kOpCodeText,
- AsVector("FIRST ")));
+ OnDataFrameVector(false, WebSocketFrameHeader::kOpCodeText,
+ AsVector("FIRST ")));
EXPECT_CALL(checkpoint, Call(1));
- EXPECT_CALL(*event_interface_,
- OnDataFrame(false, WebSocketFrameHeader::kOpCodeContinuation,
- AsVector("MESSAG")));
+ EXPECT_CALL(
+ *event_interface_,
+ OnDataFrameVector(false, WebSocketFrameHeader::kOpCodeContinuation,
+ AsVector("MESSAG")));
EXPECT_CALL(checkpoint, Call(2));
EXPECT_CALL(*event_interface_,
- OnDataFrame(true, WebSocketFrameHeader::kOpCodeContinuation,
- AsVector("E")));
+ OnDataFrameVector(true, WebSocketFrameHeader::kOpCodeContinuation,
+ AsVector("E")));
+ EXPECT_CALL(*event_interface_,
+ OnDataFrameVector(false, WebSocketFrameHeader::kOpCodeText,
+ AsVector("SECON")));
+ EXPECT_CALL(checkpoint, Call(3));
EXPECT_CALL(
*event_interface_,
- OnDataFrame(false, WebSocketFrameHeader::kOpCodeText, AsVector("SECON")));
- EXPECT_CALL(checkpoint, Call(3));
- EXPECT_CALL(*event_interface_,
- OnDataFrame(false, WebSocketFrameHeader::kOpCodeContinuation,
- AsVector("D ")));
+ OnDataFrameVector(false, WebSocketFrameHeader::kOpCodeContinuation,
+ AsVector("D ")));
EXPECT_CALL(*event_interface_, OnClosingHandshake());
EXPECT_CALL(checkpoint, Call(4));
@@ -2542,8 +2554,8 @@ TEST_F(WebSocketChannelStreamTest, SentFramesAreMasked) {
.WillOnce(Return(OK));
CreateChannelAndConnectSuccessfully();
- channel_->SendFrame(
- true, WebSocketFrameHeader::kOpCodeText, AsVector("NEEDS MASKING"));
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText,
+ AsIOBuffer("NEEDS MASKING"), 13U);
}
// RFC6455 5.5.1 "The application MUST NOT send any more data frames after
@@ -2560,8 +2572,8 @@ TEST_F(WebSocketChannelStreamTest, NothingIsSentAfterClose) {
CreateChannelAndConnectSuccessfully();
ASSERT_EQ(CHANNEL_ALIVE, channel_->StartClosingHandshake(1000, "Success"));
- channel_->SendFrame(
- true, WebSocketFrameHeader::kOpCodeText, AsVector("SHOULD BE IGNORED"));
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText,
+ AsIOBuffer("SHOULD BE IGNORED"), 18U);
}
// RFC6455 5.5.1 "If an endpoint receives a Close frame and did not previously
@@ -2802,12 +2814,12 @@ TEST_F(WebSocketChannelStreamTest, PongInTheMiddleOfDataMessage) {
}
CreateChannelAndConnectSuccessfully();
- channel_->SendFrame(
- false, WebSocketFrameHeader::kOpCodeText, AsVector("Hello "));
+ channel_->SendFrame(false, WebSocketFrameHeader::kOpCodeText,
+ AsIOBuffer("Hello "), 6U);
*read_frames = CreateFrameVector(frames);
read_callback.Run(OK);
- channel_->SendFrame(
- true, WebSocketFrameHeader::kOpCodeContinuation, AsVector("World"));
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeContinuation,
+ AsIOBuffer("World"), 5U);
}
// WriteFrames() may not be called until the previous write has completed.
@@ -2836,10 +2848,10 @@ TEST_F(WebSocketChannelStreamTest, WriteFramesOneAtATime) {
CreateChannelAndConnectSuccessfully();
checkpoint.Call(1);
- channel_->SendFrame(
- false, WebSocketFrameHeader::kOpCodeText, AsVector("Hello "));
- channel_->SendFrame(
- true, WebSocketFrameHeader::kOpCodeText, AsVector("World"));
+ channel_->SendFrame(false, WebSocketFrameHeader::kOpCodeText,
+ AsIOBuffer("Hello "), 6U);
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText,
+ AsIOBuffer("World"), 5U);
checkpoint.Call(2);
write_callback.Run(OK);
checkpoint.Call(3);
@@ -2872,9 +2884,8 @@ TEST_F(WebSocketChannelStreamTest, WaitingMessagesAreBatched) {
CreateChannelAndConnectSuccessfully();
for (size_t i = 0; i < strlen(input_letters); ++i) {
- channel_->SendFrame(true,
- WebSocketFrameHeader::kOpCodeText,
- std::vector<char>(1, input_letters[i]));
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText,
+ AsIOBuffer(std::string(1, input_letters[i])), 1U);
}
write_callback.Run(OK);
}
@@ -2893,9 +2904,9 @@ TEST_F(WebSocketChannelStreamTest, SendGoingAwayOnRendererQuotaExceeded) {
EXPECT_CALL(*mock_stream_, Close());
CreateChannelAndConnectSuccessfully();
- channel_->SendFrame(true,
- WebSocketFrameHeader::kOpCodeText,
- std::vector<char>(kDefaultInitialQuota + 1, 'C'));
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText,
+ AsIOBuffer(std::string(kDefaultInitialQuota + 1, 'C')),
+ kDefaultInitialQuota + 1);
}
// For convenience, most of these tests use Text frames. However, the WebSocket
@@ -2912,9 +2923,9 @@ TEST_F(WebSocketChannelStreamTest, WrittenBinaryFramesAre8BitClean) {
CreateChannelAndConnectSuccessfully();
channel_->SendFrame(
- true,
- WebSocketFrameHeader::kOpCodeBinary,
- std::vector<char>(kBinaryBlob, kBinaryBlob + kBinaryBlobSize));
+ true, WebSocketFrameHeader::kOpCodeBinary,
+ AsIOBuffer(std::string(kBinaryBlob, kBinaryBlob + kBinaryBlobSize)),
+ kBinaryBlobSize);
ASSERT_TRUE(frames != nullptr);
ASSERT_EQ(1U, frames->size());
const WebSocketFrame* out_frame = (*frames)[0].get();
@@ -2941,11 +2952,11 @@ TEST_F(WebSocketChannelEventInterfaceTest, ReadBinaryFramesAre8BitClean) {
set_stream(std::move(stream));
EXPECT_CALL(*event_interface_, OnAddChannelResponse(_, _));
EXPECT_CALL(*event_interface_, OnFlowControl(_));
- EXPECT_CALL(*event_interface_,
- OnDataFrame(true,
- WebSocketFrameHeader::kOpCodeBinary,
- std::vector<char>(kBinaryBlob,
- kBinaryBlob + kBinaryBlobSize)));
+ EXPECT_CALL(
+ *event_interface_,
+ OnDataFrameVector(
+ true, WebSocketFrameHeader::kOpCodeBinary,
+ std::vector<char>(kBinaryBlob, kBinaryBlob + kBinaryBlobSize)));
CreateChannelAndConnectSuccessfully();
}
@@ -2958,8 +2969,8 @@ TEST_F(WebSocketChannelSendUtf8Test, InvalidUtf8Rejected) {
CreateChannelAndConnectSuccessfully();
- channel_->SendFrame(
- true, WebSocketFrameHeader::kOpCodeText, AsVector("\xff"));
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText,
+ AsIOBuffer("\xff"), 1U);
}
// A Text message cannot end with a partial UTF-8 character.
@@ -2970,8 +2981,8 @@ TEST_F(WebSocketChannelSendUtf8Test, IncompleteCharacterInFinalFrame) {
CreateChannelAndConnectSuccessfully();
- channel_->SendFrame(
- true, WebSocketFrameHeader::kOpCodeText, AsVector("\xc2"));
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText,
+ AsIOBuffer("\xc2"), 1U);
}
// A non-final Text frame may end with a partial UTF-8 character (compare to
@@ -2979,19 +2990,18 @@ TEST_F(WebSocketChannelSendUtf8Test, IncompleteCharacterInFinalFrame) {
TEST_F(WebSocketChannelSendUtf8Test, IncompleteCharacterInNonFinalFrame) {
CreateChannelAndConnectSuccessfully();
- channel_->SendFrame(
- false, WebSocketFrameHeader::kOpCodeText, AsVector("\xc2"));
+ channel_->SendFrame(false, WebSocketFrameHeader::kOpCodeText,
+ AsIOBuffer("\xc2"), 1U);
}
// UTF-8 parsing context must be retained between frames.
TEST_F(WebSocketChannelSendUtf8Test, ValidCharacterSplitBetweenFrames) {
CreateChannelAndConnectSuccessfully();
- channel_->SendFrame(
- false, WebSocketFrameHeader::kOpCodeText, AsVector("\xf1"));
- channel_->SendFrame(true,
- WebSocketFrameHeader::kOpCodeContinuation,
- AsVector("\x80\xa0\xbf"));
+ channel_->SendFrame(false, WebSocketFrameHeader::kOpCodeText,
+ AsIOBuffer("\xf1"), 1U);
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeContinuation,
+ AsIOBuffer("\x80\xa0\xbf"), 3U);
}
// Similarly, an invalid character should be detected even if split.
@@ -3002,11 +3012,10 @@ TEST_F(WebSocketChannelSendUtf8Test, InvalidCharacterSplit) {
CreateChannelAndConnectSuccessfully();
- channel_->SendFrame(
- false, WebSocketFrameHeader::kOpCodeText, AsVector("\xe1"));
- channel_->SendFrame(true,
- WebSocketFrameHeader::kOpCodeContinuation,
- AsVector("\x80\xa0\xbf"));
+ channel_->SendFrame(false, WebSocketFrameHeader::kOpCodeText,
+ AsIOBuffer("\xe1"), 1U);
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeContinuation,
+ AsIOBuffer("\x80\xa0\xbf"), 3U);
}
// An invalid character must be detected in continuation frames.
@@ -3017,12 +3026,12 @@ TEST_F(WebSocketChannelSendUtf8Test, InvalidByteInContinuation) {
CreateChannelAndConnectSuccessfully();
- channel_->SendFrame(
- false, WebSocketFrameHeader::kOpCodeText, AsVector("foo"));
- channel_->SendFrame(
- false, WebSocketFrameHeader::kOpCodeContinuation, AsVector("bar"));
- channel_->SendFrame(
- true, WebSocketFrameHeader::kOpCodeContinuation, AsVector("\xff"));
+ channel_->SendFrame(false, WebSocketFrameHeader::kOpCodeText,
+ AsIOBuffer("foo"), 3U);
+ channel_->SendFrame(false, WebSocketFrameHeader::kOpCodeContinuation,
+ AsIOBuffer("bar"), 3U);
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeContinuation,
+ AsIOBuffer("\xff"), 1U);
}
// However, continuation frames of a Binary frame will not be tested for UTF-8
@@ -3030,12 +3039,12 @@ TEST_F(WebSocketChannelSendUtf8Test, InvalidByteInContinuation) {
TEST_F(WebSocketChannelSendUtf8Test, BinaryContinuationNotChecked) {
CreateChannelAndConnectSuccessfully();
- channel_->SendFrame(
- false, WebSocketFrameHeader::kOpCodeBinary, AsVector("foo"));
- channel_->SendFrame(
- false, WebSocketFrameHeader::kOpCodeContinuation, AsVector("bar"));
- channel_->SendFrame(
- true, WebSocketFrameHeader::kOpCodeContinuation, AsVector("\xff"));
+ channel_->SendFrame(false, WebSocketFrameHeader::kOpCodeBinary,
+ AsIOBuffer("foo"), 3U);
+ channel_->SendFrame(false, WebSocketFrameHeader::kOpCodeContinuation,
+ AsIOBuffer("bar"), 3U);
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeContinuation,
+ AsIOBuffer("\xff"), 1U);
}
// Multiple text messages can be validated without the validation state getting
@@ -3043,8 +3052,10 @@ TEST_F(WebSocketChannelSendUtf8Test, BinaryContinuationNotChecked) {
TEST_F(WebSocketChannelSendUtf8Test, ValidateMultipleTextMessages) {
CreateChannelAndConnectSuccessfully();
- channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText, AsVector("foo"));
- channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText, AsVector("bar"));
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText,
+ AsIOBuffer("foo"), 3U);
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText,
+ AsIOBuffer("bar"), 3U);
}
// UTF-8 validation is enforced on received Text frames.
@@ -3080,8 +3091,8 @@ TEST_F(WebSocketChannelStreamTest, InvalidUtf8TextFrameNotSent) {
CreateChannelAndConnectSuccessfully();
- channel_->SendFrame(
- true, WebSocketFrameHeader::kOpCodeText, AsVector("\xff"));
+ channel_->SendFrame(true, WebSocketFrameHeader::kOpCodeText,
+ AsIOBuffer("\xff"), 1U);
}
// The rest of the tests for receiving invalid UTF-8 test the communication with
@@ -3250,10 +3261,9 @@ TEST_F(WebSocketChannelEventInterfaceTest, BogusContinuation) {
EXPECT_CALL(*event_interface_, OnAddChannelResponse(_, _));
EXPECT_CALL(*event_interface_, OnFlowControl(kDefaultInitialQuota));
- EXPECT_CALL(
- *event_interface_,
- OnDataFrame(
- false, WebSocketFrameHeader::kOpCodeBinary, AsVector("frame1")));
+ EXPECT_CALL(*event_interface_,
+ OnDataFrameVector(false, WebSocketFrameHeader::kOpCodeBinary,
+ AsVector("frame1")));
EXPECT_CALL(
*event_interface_,
OnFailChannel(
@@ -3297,7 +3307,7 @@ TEST_F(WebSocketChannelEventInterfaceTest, DataFramesNonEmptyOrFinal) {
EXPECT_CALL(*event_interface_, OnFlowControl(kDefaultInitialQuota));
EXPECT_CALL(
*event_interface_,
- OnDataFrame(true, WebSocketFrameHeader::kOpCodeText, AsVector("")));
+ OnDataFrameVector(true, WebSocketFrameHeader::kOpCodeText, AsVector("")));
CreateChannelAndConnectSuccessfully();
}
@@ -3513,7 +3523,8 @@ TEST_F(WebSocketChannelTest, CurrentSendQuotaUpdated) {
channel_->SendFrame(
true, WebSocketFrameHeader::kOpCodeText,
- std::vector<char>(static_cast<size_t>(kMessageSize), 'a'));
+ AsIOBuffer(std::string(static_cast<size_t>(kMessageSize), 'a')),
+ static_cast<size_t>(kMessageSize));
int new_send_quota = channel_->current_send_quota();
EXPECT_EQ(kMessageSize, initial_send_quota - new_send_quota);
}
« no previous file with comments | « net/websockets/websocket_channel.cc ('k') | net/websockets/websocket_end_to_end_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698