Add QpackProgressiveDecoder-generated error message to quic_offline_decoder output.

Before:

qpack_offline_decoder encoded/qpack-06/f5/fb-req-hq.out.256.0.0 qifs/fb-req-hq.qif
E0710 09:36:55.067986   28697 qpack_offline_decoder.cc:155] Decoding error on stream 2

After:

qpack_offline_decoder encoded/qpack-06/f5/fb-req-hq.out.256.0.0 qifs/fb-req-hq.qif
E0710 09:37:15.694075   30089 qpack_offline_decoder.cc:155] Decoding error on stream 2: Error decoding Required Insert Count.

gfe-relnote: n/a, test-only change in QUIC v99-only code.
PiperOrigin-RevId: 257438816
Change-Id: I7ec6f5335e0a552f0b5e0b32d489ade7a4431dd1
diff --git a/quic/core/qpack/offline/qpack_offline_decoder.cc b/quic/core/qpack/offline/qpack_offline_decoder.cc
index 6efebdc..1064c78 100644
--- a/quic/core/qpack/offline/qpack_offline_decoder.cc
+++ b/quic/core/qpack/offline/qpack_offline_decoder.cc
@@ -152,7 +152,8 @@
     progressive_decoder->EndHeaderBlock();
 
     if (headers_handler.decoding_error_detected()) {
-      QUIC_LOG(ERROR) << "Decoding error on stream " << stream_id;
+      QUIC_LOG(ERROR) << "Decoding error on stream " << stream_id << ": "
+                      << headers_handler.error_message();
       return false;
     }
 
diff --git a/quic/core/qpack/qpack_decoder_test_utils.cc b/quic/core/qpack/qpack_decoder_test_utils.cc
index ab0e2b8..173270d 100644
--- a/quic/core/qpack/qpack_decoder_test_utils.cc
+++ b/quic/core/qpack/qpack_decoder_test_utils.cc
@@ -35,11 +35,12 @@
 }
 
 void TestHeadersHandler::OnDecodingErrorDetected(
-    QuicStringPiece /*error_message*/) {
+    QuicStringPiece error_message) {
   ASSERT_FALSE(decoding_completed_);
   ASSERT_FALSE(decoding_error_detected_);
 
   decoding_error_detected_ = true;
+  error_message_.assign(error_message.data(), error_message.size());
 }
 
 spdy::SpdyHeaderBlock TestHeadersHandler::ReleaseHeaderList() {
@@ -57,6 +58,11 @@
   return decoding_error_detected_;
 }
 
+const std::string& TestHeadersHandler::error_message() const {
+  DCHECK(decoding_error_detected_);
+  return error_message_;
+}
+
 void QpackDecode(
     QpackDecoder::EncoderStreamErrorDelegate* encoder_stream_error_delegate,
     QpackStreamSenderDelegate* decoder_stream_sender_delegate,
diff --git a/quic/core/qpack/qpack_decoder_test_utils.h b/quic/core/qpack/qpack_decoder_test_utils.h
index c2e909c..d5f494c 100644
--- a/quic/core/qpack/qpack_decoder_test_utils.h
+++ b/quic/core/qpack/qpack_decoder_test_utils.h
@@ -5,6 +5,8 @@
 #ifndef QUICHE_QUIC_CORE_QPACK_QPACK_DECODER_TEST_UTILS_H_
 #define QUICHE_QUIC_CORE_QPACK_QPACK_DECODER_TEST_UTILS_H_
 
+#include <string>
+
 #include "net/third_party/quiche/src/quic/core/qpack/qpack_decoder.h"
 #include "net/third_party/quiche/src/quic/core/qpack/qpack_progressive_decoder.h"
 #include "net/third_party/quiche/src/quic/core/qpack/qpack_test_utils.h"
@@ -52,11 +54,13 @@
 
   bool decoding_completed() const;
   bool decoding_error_detected() const;
+  const std::string& error_message() const;
 
  private:
   spdy::SpdyHeaderBlock header_list_;
   bool decoding_completed_;
   bool decoding_error_detected_;
+  std::string error_message_;
 };
 
 class MockHeadersHandler