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