Remove received datagram buffer from quic/quic_transport. We've concluded in https://chromium-review.googlesource.com/c/chromium/src/+/2000410 that it would be easier for now to have that buffer in the renderer instead. Therefore, a push-based API without a buffer makes more sense. gfe-relnote: n/a (not used in GFE) PiperOrigin-RevId: 290121880 Change-Id: I4bff86e27c1d748cd1aea1f0b17a06c14e67e013
diff --git a/quic/quic_transport/quic_transport_client_session.cc b/quic/quic_transport/quic_transport_client_session.cc index 6db1e4d..2a75c26 100644 --- a/quic/quic_transport/quic_transport_client_session.cc +++ b/quic/quic_transport/quic_transport_client_session.cc
@@ -263,25 +263,7 @@ void QuicTransportClientSession::OnMessageReceived( quiche::QuicheStringPiece message) { - max_incoming_datagrams_ = std::max<size_t>( - max_incoming_datagrams_, - kIncomingDatagramBufferSizeInCwnds * - connection()->sent_packet_manager().GetCongestionWindowInBytes()); - if (incoming_datagrams_.size() >= max_incoming_datagrams_) { - return; - } - - incoming_datagrams_.push_back(std::string(message)); - visitor_->OnIncomingDatagramAvailable(); -} - -QuicOptional<std::string> QuicTransportClientSession::ReadDatagram() { - if (incoming_datagrams_.empty()) { - return QuicOptional<std::string>(); - } - std::string datagram = std::move(incoming_datagrams_.front()); - incoming_datagrams_.pop_front(); - return datagram; + visitor_->OnDatagramReceived(message); } void QuicTransportClientSession::OnCanCreateNewOutgoingStream(
diff --git a/quic/quic_transport/quic_transport_client_session.h b/quic/quic_transport/quic_transport_client_session.h index b5f0ca0..e2bee49 100644 --- a/quic/quic_transport/quic_transport_client_session.h +++ b/quic/quic_transport/quic_transport_client_session.h
@@ -49,7 +49,7 @@ virtual void OnIncomingUnidirectionalStreamAvailable() = 0; // Notifies the visitor when a new datagram has been received. - virtual void OnIncomingDatagramAvailable() = 0; + virtual void OnDatagramReceived(quiche::QuicheStringPiece datagram) = 0; // Notifies the visitor that a new outgoing stream can now be created. virtual void OnCanCreateNewOutgoingBidirectionalStream() = 0; @@ -111,7 +111,6 @@ QuicTransportStream* OpenOutgoingUnidirectionalStream(); using QuicSession::datagram_queue; - QuicOptional<std::string> ReadDatagram(); protected: class QUIC_EXPORT_PRIVATE ClientIndication : public QuicStream { @@ -154,11 +153,6 @@ // before sending MAX_STREAMS. QuicDeque<QuicTransportStream*> incoming_bidirectional_streams_; QuicDeque<QuicTransportStream*> incoming_unidirectional_streams_; - - // Buffer for the incoming datagrams. - QuicDeque<std::string> incoming_datagrams_; - // Maximum size of the |incoming_datagrams_| buffer. Can only go up. - size_t max_incoming_datagrams_ = 128; }; } // namespace quic
diff --git a/quic/quic_transport/quic_transport_client_session_test.cc b/quic/quic_transport/quic_transport_client_session_test.cc index 3e08bf5..b2f38f5 100644 --- a/quic/quic_transport/quic_transport_client_session_test.cc +++ b/quic/quic_transport/quic_transport_client_session_test.cc
@@ -27,6 +27,7 @@ using testing::_; using testing::ElementsAre; +using testing::Eq; const char* kTestOrigin = "https://test-origin.test"; url::Origin GetTestOrigin() { @@ -169,14 +170,8 @@ } TEST_F(QuicTransportClientSessionTest, ReceiveDatagram) { - QuicOptional<std::string> datagram = session_->ReadDatagram(); - EXPECT_FALSE(datagram.has_value()); - - EXPECT_CALL(visitor_, OnIncomingDatagramAvailable()); + EXPECT_CALL(visitor_, OnDatagramReceived(Eq("test"))); session_->OnMessageReceived("test"); - datagram = session_->ReadDatagram(); - ASSERT_TRUE(datagram.has_value()); - EXPECT_EQ("test", *datagram); } } // namespace
diff --git a/quic/quic_transport/quic_transport_integration_test.cc b/quic/quic_transport/quic_transport_integration_test.cc index f4effe2..66bddcb 100644 --- a/quic/quic_transport/quic_transport_integration_test.cc +++ b/quic/quic_transport/quic_transport_integration_test.cc
@@ -31,6 +31,7 @@ #include "net/third_party/quiche/src/quic/test_tools/simulator/simulator.h" #include "net/third_party/quiche/src/quic/test_tools/simulator/switch.h" #include "net/third_party/quiche/src/quic/tools/quic_transport_simple_server_session.h" +#include "net/third_party/quiche/src/common/platform/api/quiche_string_piece.h" namespace quic { namespace test { @@ -38,7 +39,9 @@ using simulator::QuicEndpointBase; using simulator::Simulator; +using testing::_; using testing::Assign; +using testing::Eq; url::Origin GetTestOrigin() { constexpr char kTestOrigin[] = "https://test-origin.test"; @@ -340,14 +343,10 @@ MemSliceFromString("test")); bool datagram_received = false; - EXPECT_CALL(*client_->visitor(), OnIncomingDatagramAvailable()) + EXPECT_CALL(*client_->visitor(), OnDatagramReceived(Eq("test"))) .WillOnce(Assign(&datagram_received, true)); ASSERT_TRUE(simulator_.RunUntilOrTimeout( [&datagram_received]() { return datagram_received; }, kDefaultTimeout)); - - QuicOptional<std::string> datagram = client_->session()->ReadDatagram(); - ASSERT_TRUE(datagram.has_value()); - EXPECT_EQ("test", *datagram); } // This test sets the datagram queue to an nearly-infinte queueing time, and @@ -367,12 +366,9 @@ } size_t received = 0; - EXPECT_CALL(*client_->visitor(), OnIncomingDatagramAvailable()) - .WillRepeatedly([this, &received]() { - while (client_->session()->ReadDatagram().has_value()) { - received++; - } - }); + EXPECT_CALL(*client_->visitor(), OnDatagramReceived(_)) + .WillRepeatedly( + [&received](quiche::QuicheStringPiece /*datagram*/) { received++; }); ASSERT_TRUE(simulator_.RunUntilOrTimeout( [this]() { return client_->session()->datagram_queue()->empty(); }, 3 * kServerBandwidth.TransferTime(1000 * kMaxOutgoingPacketSize)));
diff --git a/quic/test_tools/quic_transport_test_tools.h b/quic/test_tools/quic_transport_test_tools.h index b15e699..e7e01f7 100644 --- a/quic/test_tools/quic_transport_test_tools.h +++ b/quic/test_tools/quic_transport_test_tools.h
@@ -17,7 +17,7 @@ MOCK_METHOD0(OnSessionReady, void()); MOCK_METHOD0(OnIncomingBidirectionalStreamAvailable, void()); MOCK_METHOD0(OnIncomingUnidirectionalStreamAvailable, void()); - MOCK_METHOD0(OnIncomingDatagramAvailable, void()); + MOCK_METHOD1(OnDatagramReceived, void(quiche::QuicheStringPiece)); MOCK_METHOD0(OnCanCreateNewOutgoingBidirectionalStream, void()); MOCK_METHOD0(OnCanCreateNewOutgoingUnidirectionalStream, void()); };