Clean up UberQuicStreamIdManagerTest by using a Delegate instead of a full Session. Also change the UberQuicStreamIdManager constructor to take a Delegate, Perspective and Version instead of a session.

gfe-relnote: change the UberQuicStreamIdManager constructor to take a Delegate, Perspective and Version instead of a session. Refactor only. Not flag protected.
PiperOrigin-RevId: 270671933
Change-Id: Ie9f8d6051c115f6076179cf8d1fceac1cf6c989b
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc
index 9d0c7bf..cfe7b3f 100644
--- a/quic/core/quic_session.cc
+++ b/quic/core/quic_session.cc
@@ -61,6 +61,8 @@
                          kDefaultMaxStreamsPerConnection,
                          config_.GetMaxIncomingBidirectionalStreamsToSend()),
       v99_streamid_manager_(
+          perspective(),
+          connection->version(),
           this,
           num_expected_unidirectional_static_streams,
           kDefaultMaxStreamsPerConnection,
diff --git a/quic/core/uber_quic_stream_id_manager.cc b/quic/core/uber_quic_stream_id_manager.cc
index 98c6e8c..f258384 100644
--- a/quic/core/uber_quic_stream_id_manager.cc
+++ b/quic/core/uber_quic_stream_id_manager.cc
@@ -10,24 +10,26 @@
 namespace quic {
 
 UberQuicStreamIdManager::UberQuicStreamIdManager(
-    QuicSession* session,
+    Perspective perspective,
+    ParsedQuicVersion version,
+    QuicStreamIdManager::DelegateInterface* delegate,
     QuicStreamCount num_expected_unidirectiona_static_streams,
     QuicStreamCount max_open_outgoing_bidirectional_streams,
     QuicStreamCount max_open_outgoing_unidirectional_streams,
     QuicStreamCount max_open_incoming_bidirectional_streams,
     QuicStreamCount max_open_incoming_unidirectional_streams)
-    : bidirectional_stream_id_manager_(session,
+    : bidirectional_stream_id_manager_(delegate,
                                        /*unidirectional=*/false,
-                                       session->perspective(),
-                                       session->transport_version(),
+                                       perspective,
+                                       version.transport_version,
                                        0,
                                        max_open_outgoing_bidirectional_streams,
                                        max_open_incoming_bidirectional_streams),
       unidirectional_stream_id_manager_(
-          session,
+          delegate,
           /*unidirectional=*/true,
-          session->perspective(),
-          session->transport_version(),
+          perspective,
+          version.transport_version,
           num_expected_unidirectiona_static_streams,
           max_open_outgoing_unidirectional_streams,
           max_open_incoming_unidirectional_streams) {}
diff --git a/quic/core/uber_quic_stream_id_manager.h b/quic/core/uber_quic_stream_id_manager.h
index dab571d..a725fdd 100644
--- a/quic/core/uber_quic_stream_id_manager.h
+++ b/quic/core/uber_quic_stream_id_manager.h
@@ -21,8 +21,10 @@
 class QUIC_EXPORT_PRIVATE UberQuicStreamIdManager {
  public:
   UberQuicStreamIdManager(
-      QuicSession* session,
-      QuicStreamCount num_expected_unidirectiona_static_streams,
+      Perspective perspective,
+      ParsedQuicVersion version,
+      QuicStreamIdManager::DelegateInterface* delegate,
+      QuicStreamCount num_expected_unidirectional_static_streams,
       QuicStreamCount max_open_outgoing_bidirectional_streams,
       QuicStreamCount max_open_outgoing_unidirectional_streams,
       QuicStreamCount max_open_incoming_bidirectional_streams,
diff --git a/quic/core/uber_quic_stream_id_manager_test.cc b/quic/core/uber_quic_stream_id_manager_test.cc
index b4ef1cc..265756f 100644
--- a/quic/core/uber_quic_stream_id_manager_test.cc
+++ b/quic/core/uber_quic_stream_id_manager_test.cc
@@ -6,7 +6,6 @@
 
 #include "net/third_party/quiche/src/quic/core/quic_utils.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
-#include "net/third_party/quiche/src/quic/test_tools/quic_session_peer.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_stream_id_manager_peer.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_test_utils.h"
 
@@ -17,24 +16,28 @@
 namespace test {
 namespace {
 
-class UberQuicStreamIdManagerTest : public QuicTestWithParam<Perspective> {
+class MockDelegate : public QuicStreamIdManager::DelegateInterface {
  public:
-  bool SaveControlFrame(const QuicFrame& frame) {
-    frame_ = frame;
-    return true;
-  }
+  MOCK_METHOD1(OnCanCreateNewOutgoingStream, void(bool unidirectional));
+  MOCK_METHOD2(OnError,
+               void(QuicErrorCode error_code, std::string error_details));
+  MOCK_METHOD2(SendMaxStreams,
+               void(QuicStreamCount stream_count, bool unidirectional));
+  MOCK_METHOD2(SendStreamsBlocked,
+               void(QuicStreamCount stream_count, bool unidirectional));
+};
 
+class UberQuicStreamIdManagerTest : public QuicTestWithParam<Perspective> {
  protected:
   UberQuicStreamIdManagerTest()
-      : connection_(new MockQuicConnection(
-            &helper_,
-            &alarm_factory_,
-            GetParam(),
-            ParsedQuicVersionVector(
-                {{PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_99}}))) {
-    session_ = std::make_unique<StrictMock<MockQuicSession>>(connection_);
-    manager_ = QuicSessionPeer::v99_streamid_manager(session_.get());
-  }
+      : manager_(perspective(),
+                 version(),
+                 &delegate_,
+                 /*num_expected_unidirectional_static_streams=*/0,
+                 kDefaultMaxStreamsPerConnection,
+                 kDefaultMaxStreamsPerConnection,
+                 kDefaultMaxStreamsPerConnection,
+                 kDefaultMaxStreamsPerConnection) {}
 
   QuicStreamId GetNthClientInitiatedBidirectionalId(int n) {
     return QuicUtils::GetFirstBidirectionalStreamId(transport_version(),
@@ -92,16 +95,13 @@
            ((stream_count - 1) * QuicUtils::StreamIdDelta(transport_version()));
   }
 
-  QuicTransportVersion transport_version() {
-    return connection_->transport_version();
-  }
+  ParsedQuicVersion version() { return {PROTOCOL_TLS1_3, transport_version()}; }
+  QuicTransportVersion transport_version() { return QUIC_VERSION_99; }
 
-  MockQuicConnectionHelper helper_;
-  MockAlarmFactory alarm_factory_;
-  MockQuicConnection* connection_;
-  std::unique_ptr<StrictMock<MockQuicSession>> session_;
-  UberQuicStreamIdManager* manager_;
-  QuicFrame frame_;
+  Perspective perspective() { return GetParam(); }
+
+  testing::StrictMock<MockDelegate> delegate_;
+  UberQuicStreamIdManager manager_;
 };
 
 INSTANTIATE_TEST_SUITE_P(Tests,
@@ -111,16 +111,16 @@
                          ::testing::PrintToStringParamName());
 
 TEST_P(UberQuicStreamIdManagerTest, Initialization) {
-  if (GetParam() == Perspective::IS_SERVER) {
+  if (perspective() == Perspective::IS_SERVER) {
     EXPECT_EQ(GetNthServerInitiatedBidirectionalId(0),
-              manager_->next_outgoing_bidirectional_stream_id());
+              manager_.next_outgoing_bidirectional_stream_id());
     EXPECT_EQ(GetNthServerInitiatedUnidirectionalId(0),
-              manager_->next_outgoing_unidirectional_stream_id());
+              manager_.next_outgoing_unidirectional_stream_id());
   } else {
     EXPECT_EQ(GetNthClientInitiatedBidirectionalId(0),
-              manager_->next_outgoing_bidirectional_stream_id());
+              manager_.next_outgoing_bidirectional_stream_id());
     EXPECT_EQ(GetNthClientInitiatedUnidirectionalId(0),
-              manager_->next_outgoing_unidirectional_stream_id());
+              manager_.next_outgoing_unidirectional_stream_id());
   }
 }
 
@@ -128,240 +128,240 @@
   const size_t kNumMaxOutgoingStream = 123;
   // Set the uni- and bi- directional limits to different values to ensure
   // that they are managed separately.
-  manager_->SetMaxOpenOutgoingBidirectionalStreams(kNumMaxOutgoingStream);
-  manager_->SetMaxOpenOutgoingUnidirectionalStreams(kNumMaxOutgoingStream + 1);
+  EXPECT_CALL(delegate_, OnCanCreateNewOutgoingStream(false));
+  manager_.SetMaxOpenOutgoingBidirectionalStreams(kNumMaxOutgoingStream);
+  EXPECT_CALL(delegate_, OnCanCreateNewOutgoingStream(true));
+  manager_.SetMaxOpenOutgoingUnidirectionalStreams(kNumMaxOutgoingStream + 1);
   EXPECT_EQ(kNumMaxOutgoingStream,
-            manager_->max_outgoing_bidirectional_streams());
+            manager_.max_outgoing_bidirectional_streams());
   EXPECT_EQ(kNumMaxOutgoingStream + 1,
-            manager_->max_outgoing_unidirectional_streams());
+            manager_.max_outgoing_unidirectional_streams());
   // Check that, for each directionality, we can open the correct number of
   // streams.
   int i = kNumMaxOutgoingStream;
   while (i) {
-    EXPECT_TRUE(manager_->CanOpenNextOutgoingBidirectionalStream());
-    manager_->GetNextOutgoingBidirectionalStreamId();
-    EXPECT_TRUE(manager_->CanOpenNextOutgoingUnidirectionalStream());
-    manager_->GetNextOutgoingUnidirectionalStreamId();
+    EXPECT_TRUE(manager_.CanOpenNextOutgoingBidirectionalStream());
+    manager_.GetNextOutgoingBidirectionalStreamId();
+    EXPECT_TRUE(manager_.CanOpenNextOutgoingUnidirectionalStream());
+    manager_.GetNextOutgoingUnidirectionalStreamId();
     i--;
   }
   // One more unidirectional
-  EXPECT_TRUE(manager_->CanOpenNextOutgoingUnidirectionalStream());
-  manager_->GetNextOutgoingUnidirectionalStreamId();
+  EXPECT_TRUE(manager_.CanOpenNextOutgoingUnidirectionalStream());
+  manager_.GetNextOutgoingUnidirectionalStreamId();
 
   // Both should be exhausted...
-  EXPECT_FALSE(manager_->CanOpenNextOutgoingUnidirectionalStream());
-  EXPECT_FALSE(manager_->CanOpenNextOutgoingBidirectionalStream());
+  EXPECT_FALSE(manager_.CanOpenNextOutgoingUnidirectionalStream());
+  EXPECT_FALSE(manager_.CanOpenNextOutgoingBidirectionalStream());
 }
 
 TEST_P(UberQuicStreamIdManagerTest, SetMaxOpenIncomingStreams) {
   const size_t kNumMaxIncomingStreams = 456;
-  manager_->SetMaxOpenIncomingUnidirectionalStreams(kNumMaxIncomingStreams);
+  manager_.SetMaxOpenIncomingUnidirectionalStreams(kNumMaxIncomingStreams);
   // Do +1 for bidirectional to ensure that uni- and bi- get properly set.
-  manager_->SetMaxOpenIncomingBidirectionalStreams(kNumMaxIncomingStreams + 1);
+  manager_.SetMaxOpenIncomingBidirectionalStreams(kNumMaxIncomingStreams + 1);
   EXPECT_EQ(kNumMaxIncomingStreams + 1,
-            manager_->GetMaxAllowdIncomingBidirectionalStreams());
+            manager_.GetMaxAllowdIncomingBidirectionalStreams());
   EXPECT_EQ(kNumMaxIncomingStreams,
-            manager_->GetMaxAllowdIncomingUnidirectionalStreams());
-  EXPECT_EQ(manager_->max_incoming_bidirectional_streams(),
-            manager_->advertised_max_incoming_bidirectional_streams());
-  EXPECT_EQ(manager_->max_incoming_unidirectional_streams(),
-            manager_->advertised_max_incoming_unidirectional_streams());
+            manager_.GetMaxAllowdIncomingUnidirectionalStreams());
+  EXPECT_EQ(manager_.max_incoming_bidirectional_streams(),
+            manager_.advertised_max_incoming_bidirectional_streams());
+  EXPECT_EQ(manager_.max_incoming_unidirectional_streams(),
+            manager_.advertised_max_incoming_unidirectional_streams());
   // Make sure that we can create kNumMaxIncomingStreams incoming unidirectional
   // streams and kNumMaxIncomingStreams+1 incoming bidirectional streams.
   size_t i;
   for (i = 0; i < kNumMaxIncomingStreams; i++) {
-    EXPECT_TRUE(manager_->MaybeIncreaseLargestPeerStreamId(
+    EXPECT_TRUE(manager_.MaybeIncreaseLargestPeerStreamId(
         GetNthPeerInitiatedUnidirectionalStreamId(i)));
-    EXPECT_TRUE(manager_->MaybeIncreaseLargestPeerStreamId(
+    EXPECT_TRUE(manager_.MaybeIncreaseLargestPeerStreamId(
         GetNthPeerInitiatedBidirectionalStreamId(i)));
   }
   // Should be able to open the next bidirectional stream
-  EXPECT_TRUE(manager_->MaybeIncreaseLargestPeerStreamId(
+  EXPECT_TRUE(manager_.MaybeIncreaseLargestPeerStreamId(
       GetNthPeerInitiatedBidirectionalStreamId(i)));
 
   // We should have exhausted the counts, the next streams should fail
-  EXPECT_FALSE(manager_->MaybeIncreaseLargestPeerStreamId(
+  EXPECT_CALL(delegate_, OnError(QUIC_INVALID_STREAM_ID, _));
+  EXPECT_FALSE(manager_.MaybeIncreaseLargestPeerStreamId(
       GetNthPeerInitiatedUnidirectionalStreamId(i)));
-  EXPECT_FALSE(manager_->MaybeIncreaseLargestPeerStreamId(
+  EXPECT_CALL(delegate_, OnError(QUIC_INVALID_STREAM_ID, _));
+  EXPECT_FALSE(manager_.MaybeIncreaseLargestPeerStreamId(
       GetNthPeerInitiatedBidirectionalStreamId(i + 1)));
 }
 
 TEST_P(UberQuicStreamIdManagerTest, GetNextOutgoingStreamId) {
-  if (GetParam() == Perspective::IS_SERVER) {
+  if (perspective() == Perspective::IS_SERVER) {
     EXPECT_EQ(GetNthServerInitiatedBidirectionalId(0),
-              manager_->GetNextOutgoingBidirectionalStreamId());
+              manager_.GetNextOutgoingBidirectionalStreamId());
     EXPECT_EQ(GetNthServerInitiatedBidirectionalId(1),
-              manager_->GetNextOutgoingBidirectionalStreamId());
+              manager_.GetNextOutgoingBidirectionalStreamId());
     EXPECT_EQ(GetNthServerInitiatedUnidirectionalId(0),
-              manager_->GetNextOutgoingUnidirectionalStreamId());
+              manager_.GetNextOutgoingUnidirectionalStreamId());
     EXPECT_EQ(GetNthServerInitiatedUnidirectionalId(1),
-              manager_->GetNextOutgoingUnidirectionalStreamId());
+              manager_.GetNextOutgoingUnidirectionalStreamId());
   } else {
     EXPECT_EQ(GetNthClientInitiatedBidirectionalId(0),
-              manager_->GetNextOutgoingBidirectionalStreamId());
+              manager_.GetNextOutgoingBidirectionalStreamId());
     EXPECT_EQ(GetNthClientInitiatedBidirectionalId(1),
-              manager_->GetNextOutgoingBidirectionalStreamId());
+              manager_.GetNextOutgoingBidirectionalStreamId());
     EXPECT_EQ(GetNthClientInitiatedUnidirectionalId(0),
-              manager_->GetNextOutgoingUnidirectionalStreamId());
+              manager_.GetNextOutgoingUnidirectionalStreamId());
     EXPECT_EQ(GetNthClientInitiatedUnidirectionalId(1),
-              manager_->GetNextOutgoingUnidirectionalStreamId());
+              manager_.GetNextOutgoingUnidirectionalStreamId());
   }
 }
 
 TEST_P(UberQuicStreamIdManagerTest, AvailableStreams) {
-  if (GetParam() == Perspective::IS_SERVER) {
-    EXPECT_TRUE(manager_->MaybeIncreaseLargestPeerStreamId(
+  if (perspective() == Perspective::IS_SERVER) {
+    EXPECT_TRUE(manager_.MaybeIncreaseLargestPeerStreamId(
         GetNthClientInitiatedBidirectionalId(3)));
     EXPECT_TRUE(
-        manager_->IsAvailableStream(GetNthClientInitiatedBidirectionalId(1)));
+        manager_.IsAvailableStream(GetNthClientInitiatedBidirectionalId(1)));
     EXPECT_TRUE(
-        manager_->IsAvailableStream(GetNthClientInitiatedBidirectionalId(2)));
+        manager_.IsAvailableStream(GetNthClientInitiatedBidirectionalId(2)));
 
-    EXPECT_TRUE(manager_->MaybeIncreaseLargestPeerStreamId(
+    EXPECT_TRUE(manager_.MaybeIncreaseLargestPeerStreamId(
         GetNthClientInitiatedUnidirectionalId(3)));
     EXPECT_TRUE(
-        manager_->IsAvailableStream(GetNthClientInitiatedUnidirectionalId(1)));
+        manager_.IsAvailableStream(GetNthClientInitiatedUnidirectionalId(1)));
     EXPECT_TRUE(
-        manager_->IsAvailableStream(GetNthClientInitiatedUnidirectionalId(2)));
+        manager_.IsAvailableStream(GetNthClientInitiatedUnidirectionalId(2)));
   } else {
-    EXPECT_TRUE(manager_->MaybeIncreaseLargestPeerStreamId(
+    EXPECT_TRUE(manager_.MaybeIncreaseLargestPeerStreamId(
         GetNthServerInitiatedBidirectionalId(3)));
     EXPECT_TRUE(
-        manager_->IsAvailableStream(GetNthServerInitiatedBidirectionalId(1)));
+        manager_.IsAvailableStream(GetNthServerInitiatedBidirectionalId(1)));
     EXPECT_TRUE(
-        manager_->IsAvailableStream(GetNthServerInitiatedBidirectionalId(2)));
+        manager_.IsAvailableStream(GetNthServerInitiatedBidirectionalId(2)));
 
-    EXPECT_TRUE(manager_->MaybeIncreaseLargestPeerStreamId(
+    EXPECT_TRUE(manager_.MaybeIncreaseLargestPeerStreamId(
         GetNthServerInitiatedUnidirectionalId(3)));
     EXPECT_TRUE(
-        manager_->IsAvailableStream(GetNthServerInitiatedUnidirectionalId(1)));
+        manager_.IsAvailableStream(GetNthServerInitiatedUnidirectionalId(1)));
     EXPECT_TRUE(
-        manager_->IsAvailableStream(GetNthServerInitiatedUnidirectionalId(2)));
+        manager_.IsAvailableStream(GetNthServerInitiatedUnidirectionalId(2)));
   }
 }
 
 TEST_P(UberQuicStreamIdManagerTest, MaybeIncreaseLargestPeerStreamId) {
-  EXPECT_CALL(*connection_, CloseConnection(_, _, _)).Times(0);
-  EXPECT_TRUE(manager_->MaybeIncreaseLargestPeerStreamId(StreamCountToId(
-      manager_->max_incoming_bidirectional_streams(),
-      QuicUtils::InvertPerspective(GetParam()), /* bidirectional=*/true)));
-  EXPECT_TRUE(manager_->MaybeIncreaseLargestPeerStreamId(StreamCountToId(
-      manager_->max_incoming_bidirectional_streams(),
-      QuicUtils::InvertPerspective(GetParam()), /* bidirectional=*/false)));
+  EXPECT_CALL(delegate_, OnError(_, _)).Times(0);
+  EXPECT_TRUE(manager_.MaybeIncreaseLargestPeerStreamId(StreamCountToId(
+      manager_.max_incoming_bidirectional_streams(),
+      QuicUtils::InvertPerspective(perspective()), /* bidirectional=*/true)));
+  EXPECT_TRUE(manager_.MaybeIncreaseLargestPeerStreamId(StreamCountToId(
+      manager_.max_incoming_bidirectional_streams(),
+      QuicUtils::InvertPerspective(perspective()), /* bidirectional=*/false)));
 
   std::string error_details =
-      GetParam() == Perspective::IS_SERVER
+      perspective() == Perspective::IS_SERVER
           ? "Stream id 400 would exceed stream count limit 100"
           : "Stream id 401 would exceed stream count limit 100";
 
-  EXPECT_CALL(*connection_,
-              CloseConnection(QUIC_INVALID_STREAM_ID, error_details, _));
-  EXPECT_FALSE(manager_->MaybeIncreaseLargestPeerStreamId(StreamCountToId(
-      manager_->max_incoming_bidirectional_streams() + 1,
-      QuicUtils::InvertPerspective(GetParam()), /* bidirectional=*/true)));
-  error_details = GetParam() == Perspective::IS_SERVER
+  EXPECT_CALL(delegate_, OnError(QUIC_INVALID_STREAM_ID, error_details));
+  EXPECT_FALSE(manager_.MaybeIncreaseLargestPeerStreamId(StreamCountToId(
+      manager_.max_incoming_bidirectional_streams() + 1,
+      QuicUtils::InvertPerspective(perspective()), /* bidirectional=*/true)));
+  error_details = perspective() == Perspective::IS_SERVER
                       ? "Stream id 402 would exceed stream count limit 100"
                       : "Stream id 403 would exceed stream count limit 100";
-  EXPECT_CALL(*connection_,
-              CloseConnection(QUIC_INVALID_STREAM_ID, error_details, _));
-  EXPECT_FALSE(manager_->MaybeIncreaseLargestPeerStreamId(StreamCountToId(
-      manager_->max_incoming_bidirectional_streams() + 1,
-      QuicUtils::InvertPerspective(GetParam()), /* bidirectional=*/false)));
+  EXPECT_CALL(delegate_, OnError(QUIC_INVALID_STREAM_ID, error_details));
+  EXPECT_FALSE(manager_.MaybeIncreaseLargestPeerStreamId(StreamCountToId(
+      manager_.max_incoming_bidirectional_streams() + 1,
+      QuicUtils::InvertPerspective(perspective()), /* bidirectional=*/false)));
 }
 
 TEST_P(UberQuicStreamIdManagerTest, OnMaxStreamsFrame) {
   QuicStreamCount max_outgoing_bidirectional_stream_count =
-      manager_->max_outgoing_bidirectional_streams();
+      manager_.max_outgoing_bidirectional_streams();
 
   QuicStreamCount max_outgoing_unidirectional_stream_count =
-      manager_->max_outgoing_unidirectional_streams();
+      manager_.max_outgoing_unidirectional_streams();
 
   // Inject a MAX_STREAMS frame that does not increase the limit and then
   // check that there are no changes. First try the bidirectional manager.
   QuicMaxStreamsFrame frame(kInvalidControlFrameId,
                             max_outgoing_bidirectional_stream_count,
                             /*unidirectional=*/false);
-  EXPECT_TRUE(manager_->OnMaxStreamsFrame(frame));
+  EXPECT_CALL(delegate_, OnCanCreateNewOutgoingStream(frame.unidirectional));
+  EXPECT_TRUE(manager_.OnMaxStreamsFrame(frame));
   EXPECT_EQ(max_outgoing_bidirectional_stream_count,
-            manager_->max_outgoing_bidirectional_streams());
+            manager_.max_outgoing_bidirectional_streams());
 
   // Now try the unidirectioanl manager
   frame.stream_count = max_outgoing_unidirectional_stream_count;
   frame.unidirectional = true;
-  EXPECT_TRUE(manager_->OnMaxStreamsFrame(frame));
+  EXPECT_CALL(delegate_, OnCanCreateNewOutgoingStream(frame.unidirectional));
+  EXPECT_TRUE(manager_.OnMaxStreamsFrame(frame));
   EXPECT_EQ(max_outgoing_unidirectional_stream_count,
-            manager_->max_outgoing_unidirectional_streams());
+            manager_.max_outgoing_unidirectional_streams());
 
   // Now try to increase the bidirectional stream count.
   frame.stream_count = max_outgoing_bidirectional_stream_count + 1;
   frame.unidirectional = false;
-  EXPECT_TRUE(manager_->OnMaxStreamsFrame(frame));
+  EXPECT_CALL(delegate_, OnCanCreateNewOutgoingStream(frame.unidirectional));
+  EXPECT_TRUE(manager_.OnMaxStreamsFrame(frame));
   EXPECT_EQ(max_outgoing_bidirectional_stream_count + 1,
-            manager_->max_outgoing_bidirectional_streams());
+            manager_.max_outgoing_bidirectional_streams());
   // Make sure that the unidirectional state does not change.
   EXPECT_EQ(max_outgoing_unidirectional_stream_count,
-            manager_->max_outgoing_unidirectional_streams());
+            manager_.max_outgoing_unidirectional_streams());
 
   // Now check that a MAX_STREAMS for the unidirectional manager increases
   // just the unidirectiomal manager's state.
   frame.stream_count = max_outgoing_unidirectional_stream_count + 1;
   frame.unidirectional = true;
-  EXPECT_TRUE(manager_->OnMaxStreamsFrame(frame));
+  EXPECT_CALL(delegate_, OnCanCreateNewOutgoingStream(frame.unidirectional));
+  EXPECT_TRUE(manager_.OnMaxStreamsFrame(frame));
   EXPECT_EQ(max_outgoing_bidirectional_stream_count + 1,
-            manager_->max_outgoing_bidirectional_streams());
+            manager_.max_outgoing_bidirectional_streams());
   EXPECT_EQ(max_outgoing_unidirectional_stream_count + 1,
-            manager_->max_outgoing_unidirectional_streams());
+            manager_.max_outgoing_unidirectional_streams());
 }
 
 TEST_P(UberQuicStreamIdManagerTest, OnStreamsBlockedFrame) {
   // Allow MAX_STREAMS frame transmission
-  manager_->OnConfigNegotiated();
-  // Set up to capture calls to SendControlFrame - when a STREAMS_BLOCKED
-  // frame is received, it will result in a a new MAX_STREAMS frame being
-  // sent (if new streams can be made available).
-  EXPECT_CALL(*connection_, SendControlFrame(_))
-      .WillRepeatedly(
-          Invoke(this, &UberQuicStreamIdManagerTest::SaveControlFrame));
+  manager_.OnConfigNegotiated();
 
   QuicStreamCount stream_count =
-      manager_->advertised_max_incoming_bidirectional_streams() - 1;
+      manager_.advertised_max_incoming_bidirectional_streams() - 1;
 
   QuicStreamsBlockedFrame frame(kInvalidControlFrameId, stream_count,
                                 /*unidirectional=*/false);
-  session_->OnStreamsBlockedFrame(frame);
-  EXPECT_EQ(MAX_STREAMS_FRAME, frame_.type);
-  EXPECT_EQ(manager_->max_incoming_bidirectional_streams(),
-            frame_.max_streams_frame.stream_count);
+  EXPECT_CALL(delegate_,
+              SendMaxStreams(manager_.max_incoming_bidirectional_streams(),
+                             frame.unidirectional));
+  manager_.OnStreamsBlockedFrame(frame);
 
-  stream_count = manager_->advertised_max_incoming_unidirectional_streams() - 1;
+  stream_count = manager_.advertised_max_incoming_unidirectional_streams() - 1;
   frame.stream_count = stream_count;
   frame.unidirectional = true;
 
-  session_->OnStreamsBlockedFrame(frame);
-  EXPECT_EQ(MAX_STREAMS_FRAME, frame_.type);
-  EXPECT_EQ(manager_->max_incoming_unidirectional_streams(),
-            frame_.max_streams_frame.stream_count);
+  EXPECT_CALL(delegate_,
+              SendMaxStreams(manager_.max_incoming_unidirectional_streams(),
+                             frame.unidirectional));
+  manager_.OnStreamsBlockedFrame(frame);
 }
 
 TEST_P(UberQuicStreamIdManagerTest, IsIncomingStream) {
-  if (GetParam() == Perspective::IS_SERVER) {
+  if (perspective() == Perspective::IS_SERVER) {
     EXPECT_TRUE(
-        manager_->IsIncomingStream(GetNthClientInitiatedBidirectionalId(0)));
+        manager_.IsIncomingStream(GetNthClientInitiatedBidirectionalId(0)));
     EXPECT_TRUE(
-        manager_->IsIncomingStream(GetNthClientInitiatedUnidirectionalId(0)));
+        manager_.IsIncomingStream(GetNthClientInitiatedUnidirectionalId(0)));
     EXPECT_FALSE(
-        manager_->IsIncomingStream(GetNthServerInitiatedBidirectionalId(0)));
+        manager_.IsIncomingStream(GetNthServerInitiatedBidirectionalId(0)));
     EXPECT_FALSE(
-        manager_->IsIncomingStream(GetNthServerInitiatedUnidirectionalId(0)));
+        manager_.IsIncomingStream(GetNthServerInitiatedUnidirectionalId(0)));
   } else {
     EXPECT_FALSE(
-        manager_->IsIncomingStream(GetNthClientInitiatedBidirectionalId(0)));
+        manager_.IsIncomingStream(GetNthClientInitiatedBidirectionalId(0)));
     EXPECT_FALSE(
-        manager_->IsIncomingStream(GetNthClientInitiatedUnidirectionalId(0)));
+        manager_.IsIncomingStream(GetNthClientInitiatedUnidirectionalId(0)));
     EXPECT_TRUE(
-        manager_->IsIncomingStream(GetNthServerInitiatedBidirectionalId(0)));
+        manager_.IsIncomingStream(GetNthServerInitiatedBidirectionalId(0)));
     EXPECT_TRUE(
-        manager_->IsIncomingStream(GetNthServerInitiatedUnidirectionalId(0)));
+        manager_.IsIncomingStream(GetNthServerInitiatedUnidirectionalId(0)));
   }
 }
 
@@ -369,38 +369,41 @@
   const size_t kNumMaxOutgoingStream = 123;
   // Set the uni- and bi- directional limits to different values to ensure
   // that they are managed separately.
-  manager_->SetMaxOpenOutgoingBidirectionalStreams(kNumMaxOutgoingStream);
-  manager_->SetMaxOpenOutgoingUnidirectionalStreams(kNumMaxOutgoingStream + 1);
+  EXPECT_CALL(delegate_, OnCanCreateNewOutgoingStream(false));
+  manager_.SetMaxOpenOutgoingBidirectionalStreams(kNumMaxOutgoingStream);
+  EXPECT_CALL(delegate_, OnCanCreateNewOutgoingStream(true));
+  manager_.SetMaxOpenOutgoingUnidirectionalStreams(kNumMaxOutgoingStream + 1);
   EXPECT_EQ(kNumMaxOutgoingStream,
-            manager_->max_outgoing_bidirectional_streams());
+            manager_.max_outgoing_bidirectional_streams());
   EXPECT_EQ(kNumMaxOutgoingStream + 1,
-            manager_->max_outgoing_unidirectional_streams());
+            manager_.max_outgoing_unidirectional_streams());
   // Check that, for each directionality, we can open the correct number of
   // streams.
   int i = kNumMaxOutgoingStream;
   while (i) {
-    EXPECT_TRUE(manager_->CanOpenNextOutgoingBidirectionalStream());
-    manager_->GetNextOutgoingBidirectionalStreamId();
-    EXPECT_TRUE(manager_->CanOpenNextOutgoingUnidirectionalStream());
-    manager_->GetNextOutgoingUnidirectionalStreamId();
+    EXPECT_TRUE(manager_.CanOpenNextOutgoingBidirectionalStream());
+    manager_.GetNextOutgoingBidirectionalStreamId();
+    EXPECT_TRUE(manager_.CanOpenNextOutgoingUnidirectionalStream());
+    manager_.GetNextOutgoingUnidirectionalStreamId();
     i--;
   }
   // One more unidirectional
-  EXPECT_TRUE(manager_->CanOpenNextOutgoingUnidirectionalStream());
-  manager_->GetNextOutgoingUnidirectionalStreamId();
+  EXPECT_TRUE(manager_.CanOpenNextOutgoingUnidirectionalStream());
+  manager_.GetNextOutgoingUnidirectionalStreamId();
 
   // Both should be exhausted...
-  EXPECT_FALSE(manager_->CanOpenNextOutgoingUnidirectionalStream());
-  EXPECT_FALSE(manager_->CanOpenNextOutgoingBidirectionalStream());
+  EXPECT_FALSE(manager_.CanOpenNextOutgoingUnidirectionalStream());
+  EXPECT_FALSE(manager_.CanOpenNextOutgoingBidirectionalStream());
 
   // Now cons a MAX STREAMS frame for unidirectional streams to raise
   // the limit.
   QuicMaxStreamsFrame frame(1, kNumMaxOutgoingStream + 10,
                             /*unidirectional=*/true);
-  manager_->OnMaxStreamsFrame(frame);
+  EXPECT_CALL(delegate_, OnCanCreateNewOutgoingStream(frame.unidirectional));
+  manager_.OnMaxStreamsFrame(frame);
   // We now should be able to get another uni- stream, but not a bi.
-  EXPECT_TRUE(manager_->CanOpenNextOutgoingUnidirectionalStream());
-  EXPECT_FALSE(manager_->CanOpenNextOutgoingBidirectionalStream());
+  EXPECT_TRUE(manager_.CanOpenNextOutgoingUnidirectionalStream());
+  EXPECT_FALSE(manager_.CanOpenNextOutgoingBidirectionalStream());
 }
 
 }  // namespace