Add some QUIC DCHECKs

These assumptions were found when trying to debug crbug/1117201

Debug-only change

PiperOrigin-RevId: 328638627
Change-Id: Ic563044d9e5d7be8965a62b126215c066d0b400f
diff --git a/quic/core/quic_packet_creator.cc b/quic/core/quic_packet_creator.cc
index fb574fc..bfced90 100644
--- a/quic/core/quic_packet_creator.cc
+++ b/quic/core/quic_packet_creator.cc
@@ -1619,6 +1619,13 @@
     }
   }
 
+  // If this is an ACK frame, validate that it is non-empty and that
+  // largest_acked matches the max packet number.
+  DCHECK(frame.type != ACK_FRAME ||
+         (!frame.ack_frame->packets.Empty() &&
+          frame.ack_frame->packets.Max() == frame.ack_frame->largest_acked))
+      << "Invalid ACK frame: " << frame;
+
   size_t frame_len = GetSerializedFrameLength(frame);
   if (frame_len == 0 && RemoveSoftMaxPacketLength()) {
     // Remove soft max_packet_length and retry.
@@ -1977,5 +1984,13 @@
   creator_->SetDefaultPeerAddress(old_peer_address_);
 }
 
+void QuicPacketCreator::set_encryption_level(EncryptionLevel level) {
+  DCHECK(level == packet_.encryption_level || !HasPendingFrames())
+      << "Cannot update encryption level from " << packet_.encryption_level
+      << " to " << level << " when we already have pending frames: "
+      << QuicFramesToString(queued_frames_);
+  packet_.encryption_level = level;
+}
+
 #undef ENDPOINT  // undef for jumbo builds
 }  // namespace quic