Automated g4 rollback of changelist 471573005.

*** Reason for rollback ***

After trying out a few approaches, I think it's better for the QUIC-LB connection ID generator to be just a direct addition to LoadBalancerEncoder. Thus, there is no need for mocking, and consequently, this change.

*** Original change description ***

Change LoadBalancerEncoder::Create to return unique_ptr.

More convenient in light of changes to who owns instances of LoadBalancerEncoder

***

PiperOrigin-RevId: 472454846
diff --git a/quiche/quic/load_balancer/load_balancer_encoder.cc b/quiche/quic/load_balancer/load_balancer_encoder.cc
index 5b0a613..bb9608b 100644
--- a/quiche/quic/load_balancer/load_balancer_encoder.cc
+++ b/quiche/quic/load_balancer/load_balancer_encoder.cc
@@ -47,7 +47,7 @@
 constexpr uint8_t kLoadBalancerLengthMask = 0x3f;
 constexpr uint8_t kLoadBalancerUnroutableConfigId = 0xc0;
 
-std::unique_ptr<LoadBalancerEncoder> LoadBalancerEncoder::Create(
+absl::optional<LoadBalancerEncoder> LoadBalancerEncoder::Create(
     QuicRandom &random, LoadBalancerEncoderVisitorInterface *const visitor,
     const bool len_self_encoded, const uint8_t unroutable_connection_id_len) {
   if (unroutable_connection_id_len == 0 ||
@@ -56,10 +56,10 @@
     QUIC_BUG(quic_bug_435375038_01)
         << "Invalid unroutable_connection_id_len = "
         << static_cast<int>(unroutable_connection_id_len);
-    return nullptr;
+    return absl::optional<LoadBalancerEncoder>();
   }
-  return absl::WrapUnique(new LoadBalancerEncoder(
-      random, visitor, len_self_encoded, unroutable_connection_id_len));
+  return LoadBalancerEncoder(random, visitor, len_self_encoded,
+                             unroutable_connection_id_len);
 }
 
 bool LoadBalancerEncoder::UpdateConfig(const LoadBalancerConfig &config,
diff --git a/quiche/quic/load_balancer/load_balancer_encoder.h b/quiche/quic/load_balancer/load_balancer_encoder.h
index 1405d62..b48bb19 100644
--- a/quiche/quic/load_balancer/load_balancer_encoder.h
+++ b/quiche/quic/load_balancer/load_balancer_encoder.h
@@ -60,7 +60,7 @@
   // random. |unroutable_connection_id_length| specifies the length of
   // connection IDs to be generated when there is no active config. It must not
   // be 0 and must not be larger than the RFC9000 maximum of 20.
-  static std::unique_ptr<LoadBalancerEncoder> Create(
+  static absl::optional<LoadBalancerEncoder> Create(
       QuicRandom& random, LoadBalancerEncoderVisitorInterface* const visitor,
       const bool len_self_encoded,
       const uint8_t unroutable_connection_id_len = kLoadBalancerUnroutableLen);
diff --git a/quiche/quic/load_balancer/load_balancer_encoder_test.cc b/quiche/quic/load_balancer/load_balancer_encoder_test.cc
index 0ea7aa0..f1df860 100644
--- a/quiche/quic/load_balancer/load_balancer_encoder_test.cc
+++ b/quiche/quic/load_balancer/load_balancer_encoder_test.cc
@@ -119,18 +119,18 @@
 
 TEST_F(LoadBalancerEncoderTest, BadUnroutableLength) {
   EXPECT_QUIC_BUG(
-      EXPECT_EQ(LoadBalancerEncoder::Create(random_, nullptr, false, 0),
-                nullptr),
+      EXPECT_FALSE(
+          LoadBalancerEncoder::Create(random_, nullptr, false, 0).has_value()),
       "Invalid unroutable_connection_id_len = 0");
   EXPECT_QUIC_BUG(
-      EXPECT_EQ(LoadBalancerEncoder::Create(random_, nullptr, false, 21),
-                nullptr),
+      EXPECT_FALSE(
+          LoadBalancerEncoder::Create(random_, nullptr, false, 21).has_value()),
       "Invalid unroutable_connection_id_len = 21");
 }
 
 TEST_F(LoadBalancerEncoderTest, BadServerIdLength) {
   auto encoder = LoadBalancerEncoder::Create(random_, nullptr, true);
-  EXPECT_NE(encoder, nullptr);
+  EXPECT_TRUE(encoder.has_value());
   // Expects a 3 byte server ID and got 4.
   auto config = LoadBalancerConfig::CreateUnencrypted(1, 3, 4);
   EXPECT_TRUE(config.has_value());
@@ -143,7 +143,8 @@
 TEST_F(LoadBalancerEncoderTest, FailToUpdateConfigWithSameId) {
   TestLoadBalancerEncoderVisitor visitor;
   auto encoder = LoadBalancerEncoder::Create(random_, &visitor, true);
-  EXPECT_NE(encoder, nullptr);
+  EXPECT_TRUE(encoder.has_value());
+  EXPECT_TRUE(encoder.has_value());
   auto config = LoadBalancerConfig::CreateUnencrypted(1, 3, 4);
   EXPECT_TRUE(config.has_value());
   EXPECT_TRUE(encoder->UpdateConfig(*config, MakeServerId(kServerId, 3)));
@@ -198,7 +199,7 @@
   };
   random_.AddNextValues(0, 0x75c2699c);
   auto encoder = LoadBalancerEncoder::Create(random_, nullptr, true, 8);
-  EXPECT_NE(encoder, nullptr);
+  EXPECT_TRUE(encoder.has_value());
   auto config = LoadBalancerConfig::Create(config_id, server_id_len, nonce_len,
                                            absl::string_view(raw_key));
   EXPECT_TRUE(config.has_value());
@@ -247,7 +248,7 @@
   };
   for (const auto &test : test_vectors) {
     auto encoder = LoadBalancerEncoder::Create(random_, nullptr, true, 8);
-    EXPECT_NE(encoder, nullptr);
+    EXPECT_TRUE(encoder.has_value());
     random_.AddNextValues(kNonceHigh, kNonceLow);
     EXPECT_TRUE(encoder->UpdateConfig(test.config, test.server_id));
     EXPECT_EQ(encoder->GenerateConnectionId(), test.connection_id);
@@ -258,7 +259,7 @@
   const uint8_t server_id_len = 3;
   TestLoadBalancerEncoderVisitor visitor;
   auto encoder = LoadBalancerEncoder::Create(random_, &visitor, true, 8);
-  EXPECT_NE(encoder, nullptr);
+  EXPECT_TRUE(encoder.has_value());
   auto config = LoadBalancerConfig::Create(0, server_id_len, 4, kKey);
   EXPECT_TRUE(config.has_value());
   EXPECT_TRUE(
@@ -278,7 +279,7 @@
 TEST_F(LoadBalancerEncoderTest, UnroutableConnectionId) {
   random_.AddNextValues(0x83, kNonceHigh);
   auto encoder = LoadBalancerEncoder::Create(random_, nullptr, false);
-  EXPECT_NE(encoder, nullptr);
+  EXPECT_TRUE(encoder.has_value());
   EXPECT_EQ(encoder->num_nonces_left(), 0);
   auto connection_id = encoder->GenerateConnectionId();
   // The first byte is the config_id (0xc0) xored with (0x83 & 0x3f).
@@ -289,7 +290,7 @@
 
 TEST_F(LoadBalancerEncoderTest, NonDefaultUnroutableConnectionIdLength) {
   auto encoder = LoadBalancerEncoder::Create(random_, nullptr, true, 9);
-  EXPECT_NE(encoder, nullptr);
+  EXPECT_TRUE(encoder.has_value());
   QuicConnectionId connection_id = encoder->GenerateConnectionId();
   EXPECT_EQ(connection_id.length(), 9);
 }
@@ -297,7 +298,7 @@
 TEST_F(LoadBalancerEncoderTest, DeleteConfigWhenNoConfigExists) {
   TestLoadBalancerEncoderVisitor visitor;
   auto encoder = LoadBalancerEncoder::Create(random_, &visitor, true);
-  EXPECT_NE(encoder, nullptr);
+  EXPECT_TRUE(encoder.has_value());
   encoder->DeleteConfig();
   EXPECT_EQ(visitor.num_deletes(), 0u);
 }