Use version-aware QuicConnectionCloseFrame constructor.

Several places omitted using this constructor. They have been updated
to use it.

gfe-relnote: N/A just refactors a constructor.
PiperOrigin-RevId: 268329266
Change-Id: Ib9edbc826690aed524d8888ae7893eed5c2006da
diff --git a/quic/core/frames/quic_connection_close_frame.cc b/quic/core/frames/quic_connection_close_frame.cc
index 8f1fe24..88c1109 100644
--- a/quic/core/frames/quic_connection_close_frame.cc
+++ b/quic/core/frames/quic_connection_close_frame.cc
@@ -10,48 +10,13 @@
 #include "net/third_party/quiche/src/quic/platform/api/quic_str_cat.h"
 
 namespace quic {
-
 QuicConnectionCloseFrame::QuicConnectionCloseFrame()
     // Default close type ensures that existing, pre-V99 code works as expected.
     : close_type(GOOGLE_QUIC_CONNECTION_CLOSE),
       quic_error_code(QUIC_NO_ERROR),
-      extracted_error_code(QUIC_IETF_GQUIC_ERROR_MISSING),
+      extracted_error_code(QUIC_NO_ERROR),
       transport_close_frame_type(0) {}
 
-QuicConnectionCloseFrame::QuicConnectionCloseFrame(QuicErrorCode error_code,
-                                                   std::string error_details)
-    // Default close type ensures that existing, pre-V99 code works as expected.
-    : close_type(GOOGLE_QUIC_CONNECTION_CLOSE),
-      quic_error_code(error_code),
-      extracted_error_code(error_code),
-      error_details(std::move(error_details)),
-      transport_close_frame_type(0) {}
-
-QuicConnectionCloseFrame::QuicConnectionCloseFrame(
-    QuicErrorCode quic_error_code,
-    std::string error_details,
-    uint64_t ietf_application_error_code)
-    : close_type(IETF_QUIC_APPLICATION_CONNECTION_CLOSE),
-      application_error_code(ietf_application_error_code),
-      extracted_error_code(quic_error_code),
-      error_details(std::move(error_details)),
-      transport_close_frame_type(0) {
-  DCHECK_LE(ietf_application_error_code, kMaxIetfVarInt);
-}
-
-QuicConnectionCloseFrame::QuicConnectionCloseFrame(
-    QuicErrorCode quic_error_code,
-    std::string error_details,
-    QuicIetfTransportErrorCodes transport_error_code,
-    uint64_t transport_frame_type)
-    : close_type(IETF_QUIC_TRANSPORT_CONNECTION_CLOSE),
-      transport_error_code(transport_error_code),
-      extracted_error_code(quic_error_code),
-      error_details(std::move(error_details)),
-      transport_close_frame_type(transport_frame_type) {
-  DCHECK_LE(transport_error_code, kMaxIetfVarInt);
-}
-
 QuicConnectionCloseFrame::QuicConnectionCloseFrame(
     QuicTransportVersion transport_version,
     QuicErrorCode error_code,
diff --git a/quic/core/frames/quic_connection_close_frame.h b/quic/core/frames/quic_connection_close_frame.h
index 9b6fdd4..4ee41b9 100644
--- a/quic/core/frames/quic_connection_close_frame.h
+++ b/quic/core/frames/quic_connection_close_frame.h
@@ -27,21 +27,6 @@
                            std::string error_phrase,
                            uint64_t transport_close_frame_type);
 
-  // TODO(fkastenholz): After migration to supporting IETF QUIC, this probably
-  // should be deprecated.
-  QuicConnectionCloseFrame(QuicErrorCode error_code, std::string error_details);
-
-  // Sets close_type to IETF_QUIC_APPLICATION_CONNECTION_CLOSE.
-  QuicConnectionCloseFrame(QuicErrorCode quic_error_code,
-                           std::string error_details,
-                           uint64_t ietf_application_error_code);
-
-  // Sets close_type to IETF_QUIC_TRANSPORT_CONNECTION_CLOSE.
-  QuicConnectionCloseFrame(QuicErrorCode quic_error_code,
-                           std::string error_details,
-                           QuicIetfTransportErrorCodes transport_error_code,
-                           uint64_t transport_frame_type);
-
   friend QUIC_EXPORT_PRIVATE std::ostream& operator<<(
       std::ostream& os,
       const QuicConnectionCloseFrame& c);
diff --git a/quic/core/frames/quic_frames_test.cc b/quic/core/frames/quic_frames_test.cc
index b1030ee..8492a0c 100644
--- a/quic/core/frames/quic_frames_test.cc
+++ b/quic/core/frames/quic_frames_test.cc
@@ -148,7 +148,7 @@
   // underlying frame.
   EXPECT_EQ(
       "{ Close type: GOOGLE_QUIC_CONNECTION_CLOSE, error_code: 25, "
-      "extracted_error_code: QUIC_IETF_GQUIC_ERROR_MISSING, "
+      "extracted_error_code: QUIC_NO_ERROR, "
       "error_details: 'No recent "
       "network activity.'"
       "}\n",
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index e85ec9d..87deb70 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -2875,7 +2875,8 @@
     QuicErrorCode error,
     const std::string& error_details,
     ConnectionCloseSource source) {
-  QuicConnectionCloseFrame frame(error, error_details);
+  QuicConnectionCloseFrame frame(transport_version(), error, error_details,
+                                 framer_.current_received_frame_type());
   return TearDownLocalConnectionState(frame, source);
 }
 
diff --git a/quic/core/quic_framer_test.cc b/quic/core/quic_framer_test.cc
index ed52624..933b975 100644
--- a/quic/core/quic_framer_test.cc
+++ b/quic/core/quic_framer_test.cc
@@ -7222,17 +7222,13 @@
   header.version_flag = false;
   header.packet_number = kPacketNumber;
 
-  QuicConnectionCloseFrame close_frame;
-  if (VersionHasIetfQuicFrames(framer_.transport_version())) {
-    close_frame.transport_error_code =
-        static_cast<QuicIetfTransportErrorCodes>(0x11);
-    close_frame.transport_close_frame_type = 0x05;
-    close_frame.close_type = IETF_QUIC_TRANSPORT_CONNECTION_CLOSE;
-  } else {
-    close_frame.quic_error_code = static_cast<QuicErrorCode>(0x05060708);
-  }
-  close_frame.error_details = "because I can";
-
+  QuicConnectionCloseFrame close_frame(
+      framer_.transport_version(),
+      static_cast<QuicErrorCode>(
+          VersionHasIetfQuicFrames(framer_.transport_version()) ? 0x11
+                                                                : 0x05060708),
+      "because I can", 0x05);
+  close_frame.extracted_error_code = QUIC_IETF_GQUIC_ERROR_MISSING;
   QuicFrames frames = {QuicFrame(&close_frame)};
 
   // clang-format off
@@ -7327,23 +7323,16 @@
   header.version_flag = false;
   header.packet_number = kPacketNumber;
 
-  QuicConnectionCloseFrame close_frame;
-  if (VersionHasIetfQuicFrames(framer_.transport_version())) {
-    close_frame.transport_error_code =
-        static_cast<QuicIetfTransportErrorCodes>(0x11);
-    close_frame.transport_close_frame_type = 0x05;
-    close_frame.close_type = IETF_QUIC_TRANSPORT_CONNECTION_CLOSE;
-  } else {
-    close_frame.quic_error_code = static_cast<QuicErrorCode>(0x05060708);
-  }
+  QuicConnectionCloseFrame close_frame(
+      framer_.transport_version(),
+      static_cast<QuicErrorCode>(
+          VersionHasIetfQuicFrames(framer_.transport_version()) ? 0x11
+                                                                : 0x05060708),
+      "because I can", 0x05);
   // Set this so that it is "there" for both Google QUIC and IETF QUIC
   // framing. It better not show up for Google QUIC!
   close_frame.extracted_error_code = static_cast<QuicErrorCode>(0x4567);
 
-  // For IETF QUIC this will be prefaced with "17767:"
-  // (17767 == 0x4567).
-  close_frame.error_details = "because I can";
-
   QuicFrames frames = {QuicFrame(&close_frame)};
 
   // clang-format off
@@ -7439,15 +7428,13 @@
   header.version_flag = false;
   header.packet_number = kPacketNumber;
 
-  QuicConnectionCloseFrame close_frame;
-  if (VersionHasIetfQuicFrames(framer_.transport_version())) {
-    close_frame.transport_error_code = PROTOCOL_VIOLATION;  // value is 0x0a
-    EXPECT_EQ(0u, close_frame.transport_close_frame_type);
-    close_frame.close_type = IETF_QUIC_TRANSPORT_CONNECTION_CLOSE;
-  } else {
-    close_frame.quic_error_code = static_cast<QuicErrorCode>(0x05060708);
-  }
-  close_frame.error_details = std::string(2048, 'A');
+  QuicConnectionCloseFrame close_frame(
+      framer_.transport_version(),
+      static_cast<QuicErrorCode>(
+          VersionHasIetfQuicFrames(framer_.transport_version()) ? 0xa
+                                                                : 0x05060708),
+      std::string(2048, 'A'), 0x05);
+  close_frame.extracted_error_code = QUIC_IETF_GQUIC_ERROR_MISSING;
   QuicFrames frames = {QuicFrame(&close_frame)};
 
   // clang-format off
@@ -7562,7 +7549,7 @@
     // error code
     kVarInt62OneByte + 0x0a,
     // Frame type within the CONNECTION_CLOSE frame
-    kVarInt62OneByte + 0x00,
+    kVarInt62OneByte + 0x05,
     // error details length
     kVarInt62TwoBytes + 0x01, 0x00,
     // error details (truncated to 256 bytes)
@@ -7653,12 +7640,12 @@
     // error code
     kVarInt62OneByte + 0x11,
     // error details length
-    kVarInt62OneByte + 0x0d,
-    // error details
-    'b',  'e',  'c',  'a',
-    'u',  's',  'e',  ' ',
-    'I',  ' ',  'c',  'a',
-    'n',
+    kVarInt62OneByte + 0x0f,
+    // error details, note that it includes an extended error code.
+    '0',  ':',  'b',  'e',
+    'c',  'a',  'u',  's',
+    'e',  ' ',  'I',  ' ',
+    'c',  'a',  'n',
   };
   // clang-format on
 
@@ -7687,6 +7674,9 @@
       static_cast<uint64_t>(QUIC_INVALID_STREAM_ID);
   app_close_frame.error_details = std::string(2048, 'A');
   app_close_frame.close_type = IETF_QUIC_APPLICATION_CONNECTION_CLOSE;
+  // Setting to missing ensures that if it is missing, the extended
+  // code is not added to the text message.
+  app_close_frame.extracted_error_code = QUIC_IETF_GQUIC_ERROR_MISSING;
 
   QuicFrames frames = {QuicFrame(&app_close_frame)};
 
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc
index 68cfd6d..9b812de 100644
--- a/quic/core/quic_session.cc
+++ b/quic/core/quic_session.cc
@@ -71,7 +71,6 @@
       num_outgoing_static_streams_(0),
       num_incoming_static_streams_(0),
       num_locally_closed_incoming_streams_highest_offset_(0),
-      on_closed_frame_(QUIC_NO_ERROR, ""),
       flow_controller_(
           this,
           QuicUtils::GetInvalidStreamId(connection->transport_version()),