Default add RVCM to connection options

Change-Id: I08902186ec5bb16c000cbcdeb433ab4debfc0dd9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3760909
Reviewed-by: Fan Yang <[email protected]>
Commit-Queue: Renjie Tang <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1024001}
diff --git a/net/quic/quic_context.cc b/net/quic/quic_context.cc
index 0264fb07..9f10dcf7 100644
--- a/net/quic/quic_context.cc
+++ b/net/quic/quic_context.cc
@@ -6,6 +6,7 @@
 
 #include "net/quic/platform/impl/quic_chromium_clock.h"
 #include "net/quic/quic_chromium_connection_helper.h"
+#include "net/third_party/quiche/src/quiche/quic/core/crypto/crypto_protocol.h"
 #include "net/third_party/quiche/src/quiche/quic/core/crypto/quic_random.h"
 #include "net/third_party/quiche/src/quiche/quic/core/quic_constants.h"
 
@@ -51,7 +52,12 @@
   config.set_max_idle_time_before_crypto_handshake(
       quic::QuicTime::Delta::FromMicroseconds(
           params.max_idle_time_before_crypto_handshake.InMicroseconds()));
-  config.SetConnectionOptionsToSend(params.connection_options);
+  quic::QuicTagVector copt_to_send = params.connection_options;
+  if (std::find(copt_to_send.begin(), copt_to_send.end(), quic::kRVCM) ==
+      copt_to_send.end()) {
+    copt_to_send.push_back(quic::kRVCM);
+  }
+  config.SetConnectionOptionsToSend(copt_to_send);
   config.SetClientConnectionOptions(params.client_connection_options);
   config.set_max_undecryptable_packets(kMaxUndecryptablePackets);
   config.SetInitialSessionFlowControlWindowToSend(
diff --git a/net/quic/quic_network_transaction_unittest.cc b/net/quic/quic_network_transaction_unittest.cc
index 076eb95..70bf596 100644
--- a/net/quic/quic_network_transaction_unittest.cc
+++ b/net/quic/quic_network_transaction_unittest.cc
@@ -3237,6 +3237,9 @@
 TEST_P(QuicNetworkTransactionTest, TimeoutAfterHandshakeConfirmed) {
   context_.params()->retry_without_alt_svc_on_quic_errors = false;
   context_.params()->idle_connection_timeout = base::Seconds(5);
+  // Turn off port migration to avoid dealing with unnecessary complexity in
+  // this test.
+  context_.params()->allow_port_migration = false;
 
   // The request will initially go out over QUIC.
   MockQuicData quic_data(version_);
@@ -3436,6 +3439,9 @@
     return;
   }
   context_.params()->idle_connection_timeout = base::Seconds(5);
+  // Turn off port migration to avoid dealing with unnecessary complexity in
+  // this test.
+  context_.params()->allow_port_migration = false;
 
   // The request will initially go out over QUIC.
   MockQuicData quic_data(version_);
diff --git a/net/quic/quic_stream_factory_test.cc b/net/quic/quic_stream_factory_test.cc
index cc0de1c..15da57b 100644
--- a/net/quic/quic_stream_factory_test.cc
+++ b/net/quic/quic_stream_factory_test.cc
@@ -256,7 +256,6 @@
 
   void SetIetfConnectionMigrationFlagsAndConnectionOptions() {
     FLAGS_quic_reloadable_flag_quic_connection_migration_use_new_cid_v2 = true;
-    quic_params_->connection_options.push_back(quic::kRVCM);
   }
 
   void InitializeConnectionMigrationV2Test(
@@ -12919,6 +12918,8 @@
 
   Initialize();
 
+  // RVCM will be default enabled as a connection option.
+  quic_params_->connection_options.push_back(quic::kRVCM);
   const quic::QuicConfig* config =
       QuicStreamFactoryPeer::GetConfig(factory_.get());
   EXPECT_EQ(quic_params_->connection_options, config->SendConnectionOptions());