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());
};