Surface hpack decoder detailed error for header value too long, and put detailed error to quic connection close error details. only change connection close error detail, not protected.

PiperOrigin-RevId: 323008871
Change-Id: I6f41118464ae686fbfeb009c8ac13d83b8fff3f0
diff --git a/spdy/core/hpack/hpack_decoder_adapter.cc b/spdy/core/hpack/hpack_decoder_adapter.cc
index 4c44635..cf9a0e7 100644
--- a/spdy/core/hpack/hpack_decoder_adapter.cc
+++ b/spdy/core/hpack/hpack_decoder_adapter.cc
@@ -51,6 +51,7 @@
     if (!hpack_decoder_.StartDecodingBlock()) {
       header_block_started_ = false;
       error_ = hpack_decoder_.error();
+      detailed_error_ = hpack_decoder_.detailed_error();
       return false;
     }
   }
@@ -65,12 +66,14 @@
                     << max_decode_buffer_size_bytes_ << " < "
                     << headers_data_length;
       error_ = http2::HpackDecodingError::kFragmentTooLong;
+      detailed_error_ = "";
       return false;
     }
     listener_adapter_.AddToTotalHpackBytes(headers_data_length);
     if (max_header_block_bytes_ != 0 &&
         listener_adapter_.total_hpack_bytes() > max_header_block_bytes_) {
       error_ = http2::HpackDecodingError::kCompressedHeaderSizeExceedsLimit;
+      detailed_error_ = "";
       return false;
     }
     http2::DecodeBuffer db(headers_data, headers_data_length);
@@ -78,6 +81,7 @@
     DCHECK(!ok || db.Empty()) << "Remaining=" << db.Remaining();
     if (!ok) {
       error_ = hpack_decoder_.error();
+      detailed_error_ = hpack_decoder_.detailed_error();
     }
     return ok;
   }
@@ -93,6 +97,7 @@
   if (!hpack_decoder_.EndDecodingBlock()) {
     SPDY_DVLOG(3) << "EndDecodingBlock returned false";
     error_ = hpack_decoder_.error();
+    detailed_error_ = hpack_decoder_.detailed_error();
     return false;
   }
   header_block_started_ = false;