False deprecate --gfe2_restart_flag_quic_enable_sending_bandwidth_estimate_when_network_idle_v2.

PiperOrigin-RevId: 566393408
diff --git a/quiche/quic/core/http/quic_server_session_base.cc b/quiche/quic/core/http/quic_server_session_base.cc
index 350502b..fc39b90 100644
--- a/quiche/quic/core/http/quic_server_session_base.cc
+++ b/quiche/quic/core/http/quic_server_session_base.cc
@@ -86,12 +86,6 @@
         << "Failed to disable resumption";
   }
 
-  enable_sending_bandwidth_estimate_when_network_idle_ =
-      GetQuicRestartFlag(
-          quic_enable_sending_bandwidth_estimate_when_network_idle_v2) &&
-      version().HasIetfQuicFrames() &&
-      ContainsQuicTag(config()->ReceivedConnectionOptions(), kBWID);
-
   // Enable bandwidth resumption if peer sent correct connection options.
   const bool last_bandwidth_resumption =
       ContainsQuicTag(config()->ReceivedConnectionOptions(), kBWRE);
@@ -134,31 +128,10 @@
   }
 }
 
-void QuicServerSessionBase::OnBandwidthUpdateTimeout() {
-  if (!enable_sending_bandwidth_estimate_when_network_idle_) {
-    return;
-  }
-  QUIC_DVLOG(1) << "Bandwidth update timed out.";
-  const SendAlgorithmInterface* send_algorithm =
-      connection()->sent_packet_manager().GetSendAlgorithm();
-  if (send_algorithm != nullptr &&
-      send_algorithm->HasGoodBandwidthEstimateForResumption()) {
-    const bool success = MaybeSendAddressToken();
-    QUIC_BUG_IF(QUIC_BUG_25522, !success) << "Failed to send address token.";
-    QUIC_RESTART_FLAG_COUNT_N(
-        quic_enable_sending_bandwidth_estimate_when_network_idle_v2, 2, 3);
-  }
-}
+// TODO(b/296840230) Remove this virtual function.
+void QuicServerSessionBase::OnBandwidthUpdateTimeout() {}
 
 void QuicServerSessionBase::OnCongestionWindowChange(QuicTime now) {
-  // Sending bandwidth is no longer conditioned on if session does bandwidth
-  // resumption.
-  if (GetQuicRestartFlag(
-          quic_enable_sending_bandwidth_estimate_when_network_idle_v2)) {
-    QUIC_RESTART_FLAG_COUNT_N(
-        quic_enable_sending_bandwidth_estimate_when_network_idle_v2, 3, 3);
-    return;
-  }
   if (!bandwidth_resumption_enabled_) {
     return;
   }
@@ -357,55 +330,30 @@
         sent_packet_manager.GetRttStats()->min_rtt().ToMilliseconds());
   }
 
-  if (enable_sending_bandwidth_estimate_when_network_idle_) {
-    const SendAlgorithmInterface* send_algorithm =
-        sent_packet_manager.GetSendAlgorithm();
-    if (send_algorithm != nullptr &&
-        send_algorithm->HasGoodBandwidthEstimateForResumption()) {
-      cached_network_params.set_bandwidth_estimate_bytes_per_second(
-          BandwidthToCachedParameterBytesPerSecond(
-              send_algorithm->BandwidthEstimate()));
-      QUIC_CODE_COUNT(quic_send_measured_bandwidth_in_token);
-    } else {
-      const quic::CachedNetworkParameters* previous_cached_network_params =
-          crypto_stream()->PreviousCachedNetworkParams();
-      if (previous_cached_network_params != nullptr &&
-          previous_cached_network_params
-                  ->bandwidth_estimate_bytes_per_second() > 0) {
-        cached_network_params.set_bandwidth_estimate_bytes_per_second(
-            previous_cached_network_params
-                ->bandwidth_estimate_bytes_per_second());
-        QUIC_CODE_COUNT(quic_send_previous_bandwidth_in_token);
-      } else {
-        QUIC_CODE_COUNT(quic_not_send_bandwidth_in_token);
-      }
-    }
-  } else {
-    // Populate bandwidth estimates if any.
-    if (bandwidth_recorder != nullptr && bandwidth_recorder->HasEstimate()) {
-      const int32_t bw_estimate_bytes_per_second =
-          BandwidthToCachedParameterBytesPerSecond(
-              bandwidth_recorder->BandwidthEstimate());
-      const int32_t max_bw_estimate_bytes_per_second =
-          BandwidthToCachedParameterBytesPerSecond(
-              bandwidth_recorder->MaxBandwidthEstimate());
-      QUIC_BUG_IF(quic_bug_12513_1, max_bw_estimate_bytes_per_second < 0)
-          << max_bw_estimate_bytes_per_second;
-      QUIC_BUG_IF(quic_bug_10393_1, bw_estimate_bytes_per_second < 0)
-          << bw_estimate_bytes_per_second;
+  // Populate bandwidth estimates if any.
+  if (bandwidth_recorder != nullptr && bandwidth_recorder->HasEstimate()) {
+    const int32_t bw_estimate_bytes_per_second =
+        BandwidthToCachedParameterBytesPerSecond(
+            bandwidth_recorder->BandwidthEstimate());
+    const int32_t max_bw_estimate_bytes_per_second =
+        BandwidthToCachedParameterBytesPerSecond(
+            bandwidth_recorder->MaxBandwidthEstimate());
+    QUIC_BUG_IF(quic_bug_12513_1, max_bw_estimate_bytes_per_second < 0)
+        << max_bw_estimate_bytes_per_second;
+    QUIC_BUG_IF(quic_bug_10393_1, bw_estimate_bytes_per_second < 0)
+        << bw_estimate_bytes_per_second;
 
-      cached_network_params.set_bandwidth_estimate_bytes_per_second(
-          bw_estimate_bytes_per_second);
-      cached_network_params.set_max_bandwidth_estimate_bytes_per_second(
-          max_bw_estimate_bytes_per_second);
-      cached_network_params.set_max_bandwidth_timestamp_seconds(
-          bandwidth_recorder->MaxBandwidthTimestamp());
+    cached_network_params.set_bandwidth_estimate_bytes_per_second(
+        bw_estimate_bytes_per_second);
+    cached_network_params.set_max_bandwidth_estimate_bytes_per_second(
+        max_bw_estimate_bytes_per_second);
+    cached_network_params.set_max_bandwidth_timestamp_seconds(
+        bandwidth_recorder->MaxBandwidthTimestamp());
 
-      cached_network_params.set_previous_connection_state(
-          bandwidth_recorder->EstimateRecordedDuringSlowStart()
-              ? CachedNetworkParameters::SLOW_START
-              : CachedNetworkParameters::CONGESTION_AVOIDANCE);
-    }
+    cached_network_params.set_previous_connection_state(
+        bandwidth_recorder->EstimateRecordedDuringSlowStart()
+            ? CachedNetworkParameters::SLOW_START
+            : CachedNetworkParameters::CONGESTION_AVOIDANCE);
   }
 
   if (!serving_region_.empty()) {
diff --git a/quiche/quic/core/http/quic_server_session_base.h b/quiche/quic/core/http/quic_server_session_base.h
index a06cb14..f70e15a 100644
--- a/quiche/quic/core/http/quic_server_session_base.h
+++ b/quiche/quic/core/http/quic_server_session_base.h
@@ -75,10 +75,6 @@
 
   QuicSSLConfig GetSSLConfig() const override;
 
-  bool enable_sending_bandwidth_estimate_when_network_idle() const {
-    return enable_sending_bandwidth_estimate_when_network_idle_;
-  }
-
  protected:
   // QuicSession methods(override them with return type of QuicSpdyStream*):
   QuicCryptoServerStreamBase* GetMutableCryptoStream() override;
@@ -152,8 +148,6 @@
   // should go away once we fix http://b//27897982
   int32_t BandwidthToCachedParameterBytesPerSecond(
       const QuicBandwidth& bandwidth) const;
-
-  bool enable_sending_bandwidth_estimate_when_network_idle_ = false;
 };
 
 }  // namespace quic
diff --git a/quiche/quic/core/http/quic_server_session_base_test.cc b/quiche/quic/core/http/quic_server_session_base_test.cc
index 058ae5b..7a1c952 100644
--- a/quiche/quic/core/http/quic_server_session_base_test.cc
+++ b/quiche/quic/core/http/quic_server_session_base_test.cc
@@ -607,40 +607,35 @@
                                     HAS_RETRANSMITTABLE_DATA, true,
                                     ECN_NOT_ECT);
 
-  if (GetQuicRestartFlag(
-          quic_enable_sending_bandwidth_estimate_when_network_idle_v2)) {
-    EXPECT_CALL(*connection_, OnSendConnectionState(_)).Times(0);
-  } else {
-    // Verify that the proto has exactly the values we expect.
-    CachedNetworkParameters expected_network_params;
-    expected_network_params.set_bandwidth_estimate_bytes_per_second(
-        bandwidth_recorder.BandwidthEstimate().ToBytesPerSecond());
-    expected_network_params.set_max_bandwidth_estimate_bytes_per_second(
-        bandwidth_recorder.MaxBandwidthEstimate().ToBytesPerSecond());
-    expected_network_params.set_max_bandwidth_timestamp_seconds(
-        bandwidth_recorder.MaxBandwidthTimestamp());
-    expected_network_params.set_min_rtt_ms(session_->connection()
-                                               ->sent_packet_manager()
-                                               .GetRttStats()
-                                               ->min_rtt()
-                                               .ToMilliseconds());
-    expected_network_params.set_previous_connection_state(
-        CachedNetworkParameters::CONGESTION_AVOIDANCE);
-    expected_network_params.set_timestamp(
-        session_->connection()->clock()->WallNow().ToUNIXSeconds());
-    expected_network_params.set_serving_region(serving_region);
+  // Verify that the proto has exactly the values we expect.
+  CachedNetworkParameters expected_network_params;
+  expected_network_params.set_bandwidth_estimate_bytes_per_second(
+      bandwidth_recorder.BandwidthEstimate().ToBytesPerSecond());
+  expected_network_params.set_max_bandwidth_estimate_bytes_per_second(
+      bandwidth_recorder.MaxBandwidthEstimate().ToBytesPerSecond());
+  expected_network_params.set_max_bandwidth_timestamp_seconds(
+      bandwidth_recorder.MaxBandwidthTimestamp());
+  expected_network_params.set_min_rtt_ms(session_->connection()
+                                             ->sent_packet_manager()
+                                             .GetRttStats()
+                                             ->min_rtt()
+                                             .ToMilliseconds());
+  expected_network_params.set_previous_connection_state(
+      CachedNetworkParameters::CONGESTION_AVOIDANCE);
+  expected_network_params.set_timestamp(
+      session_->connection()->clock()->WallNow().ToUNIXSeconds());
+  expected_network_params.set_serving_region(serving_region);
 
-    if (quic_crypto_stream) {
-      EXPECT_CALL(*quic_crypto_stream,
-                  SendServerConfigUpdate(EqualsProto(expected_network_params)))
-          .Times(1);
-    } else {
-      EXPECT_CALL(*tls_server_stream,
-                  GetAddressToken(EqualsProto(expected_network_params)))
-          .WillOnce(testing::Return("Test address token"));
-    }
-    EXPECT_CALL(*connection_, OnSendConnectionState(_)).Times(1);
+  if (quic_crypto_stream) {
+    EXPECT_CALL(*quic_crypto_stream,
+                SendServerConfigUpdate(EqualsProto(expected_network_params)))
+        .Times(1);
+  } else {
+    EXPECT_CALL(*tls_server_stream,
+                GetAddressToken(EqualsProto(expected_network_params)))
+        .WillOnce(testing::Return("Test address token"));
   }
+  EXPECT_CALL(*connection_, OnSendConnectionState(_)).Times(1);
   session_->OnCongestionWindowChange(now);
 }
 
diff --git a/quiche/quic/core/quic_flags_list.h b/quiche/quic/core/quic_flags_list.h
index c1cc294..1e1a93e 100644
--- a/quiche/quic/core/quic_flags_list.h
+++ b/quiche/quic/core/quic_flags_list.h
@@ -79,8 +79,6 @@
 QUIC_FLAG(quic_reloadable_flag_quic_priority_respect_incremental, false)
 // If true, round-robin stream writes instead of batching in QuicWriteBlockedList.
 QUIC_FLAG(quic_reloadable_flag_quic_disable_batch_write, false)
-// If true, server sends bandwidth eastimate when network is idle for a while.
-QUIC_FLAG(quic_restart_flag_quic_enable_sending_bandwidth_estimate_when_network_idle_v2, false)
 // If true, set burst token to 2 in cwnd bootstrapping experiment.
 QUIC_FLAG(quic_reloadable_flag_quic_conservative_bursts, false)
 // If true, use BBRv2 as the default congestion controller. Takes precedence over --quic_default_to_bbr.
diff --git a/quiche/quic/core/quic_idle_network_detector.cc b/quiche/quic/core/quic_idle_network_detector.cc
index 5a63ebc..acac42a 100644
--- a/quiche/quic/core/quic_idle_network_detector.cc
+++ b/quiche/quic/core/quic_idle_network_detector.cc
@@ -73,14 +73,6 @@
   idle_network_timeout_ = idle_network_timeout;
   bandwidth_update_timeout_ = QuicTime::Delta::Infinite();
 
-  if (GetQuicRestartFlag(
-          quic_enable_sending_bandwidth_estimate_when_network_idle_v2) &&
-      handshake_timeout_.IsInfinite()) {
-    QUIC_RESTART_FLAG_COUNT_N(
-        quic_enable_sending_bandwidth_estimate_when_network_idle_v2, 1, 3);
-    bandwidth_update_timeout_ = idle_network_timeout_ * 0.5;
-  }
-
   SetAlarm();
 }
 
diff --git a/quiche/quic/core/quic_idle_network_detector.h b/quiche/quic/core/quic_idle_network_detector.h
index bf13d62..7000ce1 100644
--- a/quiche/quic/core/quic_idle_network_detector.h
+++ b/quiche/quic/core/quic_idle_network_detector.h
@@ -114,6 +114,7 @@
   // Idle network timeout. Infinite means no idle network timeout.
   QuicTime::Delta idle_network_timeout_;
 
+  // TODO(b/296840230) Remove this field.
   // Bandwidth update timeout. Infinite means no bandwidth update timeout.
   QuicTime::Delta bandwidth_update_timeout_;
 
diff --git a/quiche/quic/core/quic_idle_network_detector_test.cc b/quiche/quic/core/quic_idle_network_detector_test.cc
index a139eb2..6b9e33e 100644
--- a/quiche/quic/core/quic_idle_network_detector_test.cc
+++ b/quiche/quic/core/quic_idle_network_detector_test.cc
@@ -102,30 +102,11 @@
   detector_->SetTimeouts(
       /*handshake_timeout=*/QuicTime::Delta::Infinite(),
       /*idle_network_timeout=*/QuicTime::Delta::FromSeconds(600));
-  if (!GetQuicRestartFlag(
-          quic_enable_sending_bandwidth_estimate_when_network_idle_v2)) {
-    EXPECT_EQ(clock_.Now() + QuicTime::Delta::FromSeconds(600),
-              alarm_->deadline());
-
-    // No network activity for 600s.
-    clock_.AdvanceTime(QuicTime::Delta::FromSeconds(600));
-    EXPECT_CALL(delegate_, OnIdleNetworkDetected());
-    alarm_->Fire();
-    return;
-  }
-
-  EXPECT_EQ(clock_.Now() + QuicTime::Delta::FromSeconds(300),
-            alarm_->deadline());
-
-  // No network activity for 300s.
-  clock_.AdvanceTime(QuicTime::Delta::FromSeconds(300));
-  EXPECT_CALL(delegate_, OnBandwidthUpdateTimeout());
-  alarm_->Fire();
-  EXPECT_EQ(clock_.Now() + QuicTime::Delta::FromSeconds(300),
+  EXPECT_EQ(clock_.Now() + QuicTime::Delta::FromSeconds(600),
             alarm_->deadline());
 
   // No network activity for 600s.
-  clock_.AdvanceTime(QuicTime::Delta::FromSeconds(300));
+  clock_.AdvanceTime(QuicTime::Delta::FromSeconds(600));
   EXPECT_CALL(delegate_, OnIdleNetworkDetected());
   alarm_->Fire();
 }
@@ -139,16 +120,11 @@
   EXPECT_TRUE(alarm_->IsSet());
 
   // Handshake completes in 200ms.
-  const bool enable_sending_bandwidth_estimate_when_network_idle =
-      GetQuicRestartFlag(
-          quic_enable_sending_bandwidth_estimate_when_network_idle_v2);
   clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(200));
   detector_->OnPacketReceived(clock_.Now());
   detector_->SetTimeouts(
       /*handshake_timeout=*/QuicTime::Delta::Infinite(),
-      enable_sending_bandwidth_estimate_when_network_idle
-          ? QuicTime::Delta::FromSeconds(1200)
-          : QuicTime::Delta::FromSeconds(600));
+      QuicTime::Delta::FromSeconds(600));
   EXPECT_EQ(clock_.Now() + QuicTime::Delta::FromSeconds(600),
             alarm_->deadline());
 
@@ -166,27 +142,9 @@
   EXPECT_EQ(packet_sent_time + QuicTime::Delta::FromSeconds(600),
             alarm_->deadline());
 
-  if (!enable_sending_bandwidth_estimate_when_network_idle) {
-    // No network activity for 600s.
-    clock_.AdvanceTime(QuicTime::Delta::FromSeconds(600) -
-                       QuicTime::Delta::FromMilliseconds(200));
-    EXPECT_CALL(delegate_, OnIdleNetworkDetected());
-    alarm_->Fire();
-    return;
-  }
-
-  // Bandwidth update times out after no network activity for 600s.
+  // No network activity for 600s.
   clock_.AdvanceTime(QuicTime::Delta::FromSeconds(600) -
                      QuicTime::Delta::FromMilliseconds(200));
-  EXPECT_CALL(delegate_, OnBandwidthUpdateTimeout());
-  alarm_->Fire();
-  EXPECT_TRUE(alarm_->IsSet());
-  EXPECT_EQ(packet_sent_time + QuicTime::Delta::FromSeconds(1200),
-            alarm_->deadline());
-
-  // Network idle time out after no network activity for 1200s.
-  clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1200) -
-                     QuicTime::Delta::FromMilliseconds(600));
   EXPECT_CALL(delegate_, OnIdleNetworkDetected());
   alarm_->Fire();
 }
@@ -194,12 +152,7 @@
 TEST_F(QuicIdleNetworkDetectorTest, ShorterIdleTimeoutOnSentPacket) {
   detector_->enable_shorter_idle_timeout_on_sent_packet();
   QuicTime::Delta idle_network_timeout = QuicTime::Delta::Zero();
-  if (GetQuicRestartFlag(
-          quic_enable_sending_bandwidth_estimate_when_network_idle_v2)) {
-    idle_network_timeout = QuicTime::Delta::FromSeconds(60);
-  } else {
-    idle_network_timeout = QuicTime::Delta::FromSeconds(30);
-  }
+  idle_network_timeout = QuicTime::Delta::FromSeconds(30);
   detector_->SetTimeouts(
       /*handshake_timeout=*/QuicTime::Delta::Infinite(), idle_network_timeout);
   EXPECT_TRUE(alarm_->IsSet());
@@ -247,35 +200,6 @@
   EXPECT_FALSE(alarm_->IsSet());
 }
 
-TEST_F(QuicIdleNetworkDetectorTest,
-       ResetBandwidthTimeoutWhenHandshakeTimeoutIsSet) {
-  if (!GetQuicRestartFlag(
-          quic_enable_sending_bandwidth_estimate_when_network_idle_v2)) {
-    return;
-  }
-  detector_->SetTimeouts(
-      /*handshake_timeout=*/QuicTime::Delta::Infinite(),
-      /*idle_network_timeout=*/QuicTime::Delta::FromSeconds(20));
-  // The deadline is set based on the bandwidth timeout.
-  EXPECT_EQ(clock_.Now() + QuicTime::Delta::FromSeconds(10),
-            alarm_->deadline());
-
-  detector_->SetTimeouts(
-      /*handshake_timeout=*/QuicTime::Delta::FromSeconds(15),
-      /*idle_network_timeout=*/QuicTime::Delta::FromSeconds(20));
-  // Bandwidth timeout is reset and the deadline is set based on the handshake
-  // timeout.
-  EXPECT_EQ(clock_.Now() + QuicTime::Delta::FromSeconds(15),
-            alarm_->deadline());
-
-  detector_->SetTimeouts(
-      /*handshake_timeout=*/QuicTime::Delta::Infinite(),
-      /*idle_network_timeout=*/QuicTime::Delta::FromSeconds(20));
-  // The deadline is set based on the bandwidth timeout.
-  EXPECT_EQ(clock_.Now() + QuicTime::Delta::FromSeconds(10),
-            alarm_->deadline());
-}
-
 }  // namespace
 
 }  // namespace test