Set received crypto frame's encryption level.

gfe-relnote: not protected. only used in debug and tests.
PiperOrigin-RevId: 288066037
Change-Id: I10eeac5332329fa48dbd36a980f6757716f13179
diff --git a/quic/core/frames/quic_crypto_frame.cc b/quic/core/frames/quic_crypto_frame.cc
index 20254b8..d750da7 100644
--- a/quic/core/frames/quic_crypto_frame.cc
+++ b/quic/core/frames/quic_crypto_frame.cc
@@ -35,7 +35,8 @@
 
 std::ostream& operator<<(std::ostream& os,
                          const QuicCryptoFrame& stream_frame) {
-  os << "{ offset: " << stream_frame.offset
+  os << "{ level: " << static_cast<int>(stream_frame.level)
+     << ", offset: " << stream_frame.offset
      << ", length: " << stream_frame.data_length << " }\n";
   return os;
 }
diff --git a/quic/core/quic_framer.cc b/quic/core/quic_framer.cc
index acc0a89..31af81a 100644
--- a/quic/core/quic_framer.cc
+++ b/quic/core/quic_framer.cc
@@ -2907,7 +2907,7 @@
           return RaiseError(QUIC_INVALID_FRAME_DATA);
         }
         QuicCryptoFrame frame;
-        if (!ProcessCryptoFrame(reader, &frame)) {
+        if (!ProcessCryptoFrame(reader, GetEncryptionLevel(header), &frame)) {
           return RaiseError(QUIC_INVALID_FRAME_DATA);
         }
         QUIC_DVLOG(2) << ENDPOINT << "Processing crypto frame " << frame;
@@ -3237,7 +3237,7 @@
         }
         case IETF_CRYPTO: {
           QuicCryptoFrame frame;
-          if (!ProcessCryptoFrame(reader, &frame)) {
+          if (!ProcessCryptoFrame(reader, GetEncryptionLevel(header), &frame)) {
             return RaiseError(QUIC_INVALID_FRAME_DATA);
           }
           QUIC_DVLOG(2) << ENDPOINT << "Processing IETF crypto frame " << frame;
@@ -3404,7 +3404,9 @@
 }
 
 bool QuicFramer::ProcessCryptoFrame(QuicDataReader* reader,
+                                    EncryptionLevel encryption_level,
                                     QuicCryptoFrame* frame) {
+  frame->level = encryption_level;
   if (!reader->ReadVarInt62(&frame->offset)) {
     set_detailed_error("Unable to read crypto data offset.");
     return false;
diff --git a/quic/core/quic_framer.h b/quic/core/quic_framer.h
index 1583970..768aa33 100644
--- a/quic/core/quic_framer.h
+++ b/quic/core/quic_framer.h
@@ -900,7 +900,9 @@
                                    QuicRstStreamFrame* frame);
   bool ProcessStopSendingFrame(QuicDataReader* reader,
                                QuicStopSendingFrame* stop_sending_frame);
-  bool ProcessCryptoFrame(QuicDataReader* reader, QuicCryptoFrame* frame);
+  bool ProcessCryptoFrame(QuicDataReader* reader,
+                          EncryptionLevel encryption_level,
+                          QuicCryptoFrame* frame);
 
   // IETF frame appending methods.  All methods append the type byte as well.
   bool AppendIetfStreamFrame(const QuicStreamFrame& frame,
diff --git a/quic/core/quic_framer_test.cc b/quic/core/quic_framer_test.cc
index c3f5463..2daac1e 100644
--- a/quic/core/quic_framer_test.cc
+++ b/quic/core/quic_framer_test.cc
@@ -299,7 +299,7 @@
         new std::string(frame.data_buffer, frame.data_length);
     crypto_data_.push_back(QuicWrapUnique(string_data));
     crypto_frames_.push_back(std::make_unique<QuicCryptoFrame>(
-        ENCRYPTION_INITIAL, frame.offset, *string_data));
+        frame.level, frame.offset, *string_data));
     if (VersionHasIetfQuicFrames(transport_version_)) {
       EXPECT_EQ(IETF_CRYPTO, framer_->current_received_frame_type());
     } else {
@@ -6471,7 +6471,7 @@
 }
 
 TEST_P(QuicFramerTest, CryptoFrame) {
-  if (framer_.transport_version() < QUIC_VERSION_48) {
+  if (!QuicVersionUsesCryptoFrames(framer_.transport_version())) {
     // CRYPTO frames aren't supported prior to v48.
     return;
   }
@@ -6546,6 +6546,7 @@
       PACKET_8BYTE_CONNECTION_ID, PACKET_0BYTE_CONNECTION_ID));
   ASSERT_EQ(1u, visitor_.crypto_frames_.size());
   QuicCryptoFrame* frame = visitor_.crypto_frames_[0].get();
+  EXPECT_EQ(ENCRYPTION_FORWARD_SECURE, frame->level);
   EXPECT_EQ(kStreamOffset, frame->offset);
   EXPECT_EQ("hello world!",
             std::string(frame->data_buffer, frame->data_length));
diff --git a/quic/test_tools/quic_framer_peer.cc b/quic/test_tools/quic_framer_peer.cc
index d686d5a..1cb8edf 100644
--- a/quic/test_tools/quic_framer_peer.cc
+++ b/quic/test_tools/quic_framer_peer.cc
@@ -73,13 +73,6 @@
 }
 
 // static
-bool QuicFramerPeer::ProcessCryptoFrame(QuicFramer* framer,
-                                        QuicDataReader* reader,
-                                        QuicCryptoFrame* frame) {
-  return framer->ProcessCryptoFrame(reader, frame);
-}
-
-// static
 bool QuicFramerPeer::AppendCryptoFrame(QuicFramer* framer,
                                        const QuicCryptoFrame& frame,
                                        QuicDataWriter* writer) {
diff --git a/quic/test_tools/quic_framer_peer.h b/quic/test_tools/quic_framer_peer.h
index d462555..5dbdf82 100644
--- a/quic/test_tools/quic_framer_peer.h
+++ b/quic/test_tools/quic_framer_peer.h
@@ -50,9 +50,6 @@
                                     const QuicStreamFrame& frame,
                                     bool last_frame_in_packet,
                                     QuicDataWriter* writer);
-  static bool ProcessCryptoFrame(QuicFramer* framer,
-                                 QuicDataReader* reader,
-                                 QuicCryptoFrame* frame);
   static bool AppendCryptoFrame(QuicFramer* framer,
                                 const QuicCryptoFrame& frame,
                                 QuicDataWriter* writer);