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