Make writing Prioritized Element ID and Element Dependency ID optional when handling priority.

These fields are specified to be absent when priority type or dependency type is ROOT_OF_TREE.

On the decoding side, the absent fields will be parsed as 0 for default value. Those fields won't be used when later the frame is processed.

gfe-relnote: v99 only, not flag protected.
PiperOrigin-RevId: 254072432
Change-Id: I336e06b39d89ff01507e54818dafa67923e96e4c
diff --git a/quic/core/http/http_decoder.cc b/quic/core/http/http_decoder.cc
index f08d2ff..4513f04 100644
--- a/quic/core/http/http_decoder.cc
+++ b/quic/core/http/http_decoder.cc
@@ -519,11 +519,13 @@
   frame->dependency_type =
       static_cast<PriorityElementType>(ExtractBits(flags, 2, 4));
   frame->exclusive = flags % 2 == 1;
-  if (!reader->ReadVarInt62(&frame->prioritized_element_id)) {
+  if (frame->prioritized_type != ROOT_OF_TREE &&
+      !reader->ReadVarInt62(&frame->prioritized_element_id)) {
     RaiseError(QUIC_INTERNAL_ERROR, "Unable to read prioritized_element_id");
     return false;
   }
-  if (!reader->ReadVarInt62(&frame->element_dependency_id)) {
+  if (frame->dependency_type != ROOT_OF_TREE &&
+      !reader->ReadVarInt62(&frame->element_dependency_id)) {
     RaiseError(QUIC_INTERNAL_ERROR, "Unable to read element_dependency_id");
     return false;
   }