Added support for congestion windows in test helper.

This is used by BBR which is introduced in a future CL.

Bug: webrtc:8415
Change-Id: Ie5b3e6e58b7c9c7a35fc21acb636103d7f5daec3
Reviewed-on: https://webrtc-review.googlesource.com/64920
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22643}
diff --git a/modules/congestion_controller/network_control/test/network_control_tester.cc b/modules/congestion_controller/network_control/test/network_control_tester.cc
index 358153b..67d5611 100644
--- a/modules/congestion_controller/network_control/test/network_control_tester.cc
+++ b/modules/congestion_controller/network_control/test/network_control_tester.cc
@@ -95,28 +95,43 @@
   Timestamp start_time = current_time_;
   Timestamp last_process_time = current_time_;
   while (current_time_ - start_time < duration) {
-    SentPacket sent_packet =
-        next_packet(cacher_.GetState(), current_time_, packet_interval);
-    controller_->OnSentPacket(sent_packet);
-    received_packets_.push_back(SimulateSend(
-        sent_packet, packet_interval, propagation_delay, actual_bandwidth));
-    if (received_packets_.size() >= 2 &&
+    bool send_packet = true;
+    NetworkControlState control_state = cacher_.GetState();
+
+    if (control_state.congestion_window &&
+        control_state.congestion_window->enabled) {
+      DataSize data_in_flight = DataSize::Zero();
+      for (PacketResult& packet : outstanding_packets_)
+        data_in_flight += packet.sent_packet->size;
+      if (data_in_flight > control_state.congestion_window->data_window)
+        send_packet = false;
+    }
+
+    if (send_packet) {
+      SentPacket sent_packet =
+          next_packet(cacher_.GetState(), current_time_, packet_interval);
+      controller_->OnSentPacket(sent_packet);
+      outstanding_packets_.push_back(SimulateSend(
+          sent_packet, packet_interval, propagation_delay, actual_bandwidth));
+    }
+
+    if (outstanding_packets_.size() >= 2 &&
         current_time_ >=
-            received_packets_[1].receive_time + propagation_delay) {
+            outstanding_packets_[1].receive_time + propagation_delay) {
       TransportPacketsFeedback feedback;
       feedback.prior_in_flight = DataSize::Zero();
-      for (PacketResult& packet : received_packets_)
+      for (PacketResult& packet : outstanding_packets_)
         feedback.prior_in_flight += packet.sent_packet->size;
-      while (!received_packets_.empty() &&
-             current_time_ >=
-                 received_packets_.front().receive_time + propagation_delay) {
-        feedback.packet_feedbacks.push_back(received_packets_.front());
-        received_packets_.pop_front();
+      while (!outstanding_packets_.empty() &&
+             current_time_ >= outstanding_packets_.front().receive_time +
+                                  propagation_delay) {
+        feedback.packet_feedbacks.push_back(outstanding_packets_.front());
+        outstanding_packets_.pop_front();
       }
       feedback.feedback_time =
           feedback.packet_feedbacks.back().receive_time + propagation_delay;
       feedback.data_in_flight = DataSize::Zero();
-      for (PacketResult& packet : received_packets_)
+      for (PacketResult& packet : outstanding_packets_)
         feedback.data_in_flight += packet.sent_packet->size;
       controller_->OnTransportPacketsFeedback(feedback);
     }
diff --git a/modules/congestion_controller/network_control/test/network_control_tester.h b/modules/congestion_controller/network_control/test/network_control_tester.h
index 535b374..8fce2a3 100644
--- a/modules/congestion_controller/network_control/test/network_control_tester.h
+++ b/modules/congestion_controller/network_control/test/network_control_tester.h
@@ -91,7 +91,7 @@
   TimeDelta process_interval_;
   Timestamp current_time_;
   TimeDelta accumulated_delay_;
-  std::deque<PacketResult> received_packets_;
+  std::deque<PacketResult> outstanding_packets_;
 };
 }  // namespace test
 }  // namespace webrtc