diff --git a/quic/core/quic_crypto_stream.cc b/quic/core/quic_crypto_stream.cc
index 86603a9..81d8547 100644
--- a/quic/core/quic_crypto_stream.cc
+++ b/quic/core/quic_crypto_stream.cc
@@ -173,11 +173,8 @@
     return;
   }
 
-  EncryptionLevel current_level = session()->connection()->encryption_level();
-  session()->connection()->SetDefaultEncryptionLevel(level);
   size_t bytes_consumed =
-      session()->connection()->SendCryptoData(level, data.length(), offset);
-  session()->connection()->SetDefaultEncryptionLevel(current_level);
+      stream_delegate()->WriteCryptoData(level, data.length(), offset);
   send_buffer->OnStreamDataConsumed(bytes_consumed);
 }
 
@@ -246,15 +243,12 @@
 void QuicCryptoStream::WritePendingCryptoRetransmission() {
   QUIC_BUG_IF(!QuicVersionUsesCryptoFrames(session()->transport_version()))
       << "Versions less than 47 don't write CRYPTO frames";
-  EncryptionLevel current_encryption_level =
-      session()->connection()->encryption_level();
   for (EncryptionLevel level :
        {ENCRYPTION_INITIAL, ENCRYPTION_ZERO_RTT, ENCRYPTION_FORWARD_SECURE}) {
     QuicStreamSendBuffer* send_buffer = &substreams_[level].send_buffer;
-    session()->connection()->SetDefaultEncryptionLevel(level);
     while (send_buffer->HasPendingRetransmission()) {
       auto pending = send_buffer->NextPendingRetransmission();
-      size_t bytes_consumed = session()->connection()->SendCryptoData(
+      size_t bytes_consumed = stream_delegate()->WriteCryptoData(
           level, pending.length, pending.offset);
       send_buffer->OnStreamDataRetransmitted(pending.offset, bytes_consumed);
       if (bytes_consumed < pending.length) {
@@ -262,7 +256,6 @@
       }
     }
   }
-  session()->connection()->SetDefaultEncryptionLevel(current_encryption_level);
 }
 
 void QuicCryptoStream::WritePendingRetransmission() {
@@ -431,13 +424,10 @@
   if (retransmission.Empty()) {
     return;
   }
-  EncryptionLevel current_encryption_level =
-      session()->connection()->encryption_level();
   for (const auto& interval : retransmission) {
     size_t retransmission_offset = interval.min();
     size_t retransmission_length = interval.max() - interval.min();
-    session()->connection()->SetDefaultEncryptionLevel(crypto_frame->level);
-    size_t bytes_consumed = session()->connection()->SendCryptoData(
+    size_t bytes_consumed = stream_delegate()->WriteCryptoData(
         crypto_frame->level, retransmission_length, retransmission_offset);
     send_buffer->OnStreamDataRetransmitted(retransmission_offset,
                                            bytes_consumed);
@@ -445,14 +435,11 @@
       break;
     }
   }
-  session()->connection()->SetDefaultEncryptionLevel(current_encryption_level);
 }
 
 void QuicCryptoStream::WriteBufferedCryptoFrames() {
   QUIC_BUG_IF(!QuicVersionUsesCryptoFrames(session()->transport_version()))
       << "Versions less than 47 don't use CRYPTO frames";
-  EncryptionLevel current_encryption_level =
-      session()->connection()->encryption_level();
   for (EncryptionLevel level :
        {ENCRYPTION_INITIAL, ENCRYPTION_ZERO_RTT, ENCRYPTION_FORWARD_SECURE}) {
     QuicStreamSendBuffer* send_buffer = &substreams_[level].send_buffer;
@@ -462,8 +449,7 @@
       // No buffered data for this encryption level.
       continue;
     }
-    session()->connection()->SetDefaultEncryptionLevel(level);
-    size_t bytes_consumed = session()->connection()->SendCryptoData(
+    size_t bytes_consumed = stream_delegate()->WriteCryptoData(
         level, data_length, send_buffer->stream_bytes_written());
     send_buffer->OnStreamDataConsumed(bytes_consumed);
     if (bytes_consumed < data_length) {
@@ -471,7 +457,6 @@
       break;
     }
   }
-  session()->connection()->SetDefaultEncryptionLevel(current_encryption_level);
 }
 
 bool QuicCryptoStream::HasBufferedCryptoFrames() const {
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc
index 1cc1d90..ebcb28a 100644
--- a/quic/core/quic_session.cc
+++ b/quic/core/quic_session.cc
@@ -768,6 +768,19 @@
   return data;
 }
 
+size_t QuicSession::WriteCryptoData(EncryptionLevel level,
+                                    size_t write_length,
+                                    QuicStreamOffset offset) {
+  DCHECK(QuicVersionUsesCryptoFrames(transport_version()));
+  const auto current_level = connection()->encryption_level();
+  connection_->SetDefaultEncryptionLevel(level);
+  const auto bytes_consumed =
+      connection_->SendCryptoData(level, write_length, offset);
+  // Restores encryption level.
+  connection_->SetDefaultEncryptionLevel(current_level);
+  return bytes_consumed;
+}
+
 bool QuicSession::WriteControlFrame(const QuicFrame& frame) {
   return connection_->SendControlFrame(frame);
 }
diff --git a/quic/core/quic_session.h b/quic/core/quic_session.h
index 4549878..84b1500 100644
--- a/quic/core/quic_session.h
+++ b/quic/core/quic_session.h
@@ -276,6 +276,10 @@
       bool is_retransmission,
       quiche::QuicheOptional<EncryptionLevel> level) override;
 
+  size_t WriteCryptoData(EncryptionLevel level,
+                         size_t write_length,
+                         QuicStreamOffset offset) override;
+
   // Called by the QuicCryptoStream when a handshake message is sent.
   virtual void OnCryptoHandshakeMessageSent(
       const CryptoHandshakeMessage& message);
diff --git a/quic/core/stream_delegate_interface.h b/quic/core/stream_delegate_interface.h
index 898baa5..440b01a 100644
--- a/quic/core/stream_delegate_interface.h
+++ b/quic/core/stream_delegate_interface.h
@@ -30,6 +30,10 @@
       StreamSendingState state,
       bool is_retransmission,
       quiche::QuicheOptional<EncryptionLevel> level) = 0;
+  // Called to write crypto data.
+  virtual size_t WriteCryptoData(EncryptionLevel level,
+                                 size_t write_length,
+                                 QuicStreamOffset offset) = 0;
   // Called on stream creation.
   virtual void RegisterStreamPriority(
       QuicStreamId id,
