Use HttpFrameType instead of int literals in HttpDecoder.

Also change HttpDecoder::MaxFrameLenght() argument type to 64 bit to avoid potential errors caused by casting unknown frame types to valid 8 bit values.

gfe-relnote: n/a, no functional change.
PiperOrigin-RevId: 259217634
Change-Id: I22fc612f4a5d04f8eaaca8dca263aa1f89579c92
diff --git a/quic/core/http/http_decoder.cc b/quic/core/http/http_decoder.cc
index ef871ab..b1aba79 100644
--- a/quic/core/http/http_decoder.cc
+++ b/quic/core/http/http_decoder.cc
@@ -138,27 +138,27 @@
       current_frame_length_);
 
   switch (current_frame_type_) {
-    case 0x00:  // DATA
+    case static_cast<uint64_t>(HttpFrameType::DATA):
       continue_processing = visitor_->OnDataFrameStart(frame_meta);
       break;
-    case 0x01:  // HEADERS
+    case static_cast<uint64_t>(HttpFrameType::HEADERS):
       continue_processing = visitor_->OnHeadersFrameStart(frame_meta);
       break;
-    case 0x02:  // PRIORITY
+    case static_cast<uint64_t>(HttpFrameType::PRIORITY):
       continue_processing = visitor_->OnPriorityFrameStart(frame_meta);
       break;
-    case 0x03:  // CANCEL_PUSH
+    case static_cast<uint64_t>(HttpFrameType::CANCEL_PUSH):
       break;
-    case 0x04:  // SETTINGS
+    case static_cast<uint64_t>(HttpFrameType::SETTINGS):
       continue_processing = visitor_->OnSettingsFrameStart(frame_meta);
       break;
-    case 0x05:  // PUSH_PROMISE
+    case static_cast<uint64_t>(HttpFrameType::PUSH_PROMISE):
       break;
-    case 0x07:  // GOAWAY
+    case static_cast<uint64_t>(HttpFrameType::GOAWAY):
       break;
-    case 0x0d:  // MAX_PUSH_ID
+    case static_cast<uint64_t>(HttpFrameType::MAX_PUSH_ID):
       break;
-    case 0x0e:  // DUPLICATE_PUSH
+    case static_cast<uint64_t>(HttpFrameType::DUPLICATE_PUSH):
       break;
     default:
       continue_processing =
@@ -179,7 +179,7 @@
   bool continue_processing = true;
 
   switch (current_frame_type_) {
-    case 0x0: {  // DATA
+    case static_cast<uint64_t>(HttpFrameType::DATA): {
       QuicByteCount bytes_to_read = std::min<QuicByteCount>(
           remaining_frame_length_, reader->BytesRemaining());
       QuicStringPiece payload;
@@ -190,7 +190,7 @@
       remaining_frame_length_ -= payload.length();
       break;
     }
-    case 0x1: {  // HEADERS
+    case static_cast<uint64_t>(HttpFrameType::HEADERS): {
       QuicByteCount bytes_to_read = std::min<QuicByteCount>(
           remaining_frame_length_, reader->BytesRemaining());
       QuicStringPiece payload;
@@ -201,21 +201,21 @@
       remaining_frame_length_ -= payload.length();
       break;
     }
-    case 0x2: {  // PRIORITY
+    case static_cast<uint64_t>(HttpFrameType::PRIORITY): {
       // TODO(rch): avoid buffering if the entire frame is present, and
       // instead parse directly out of |reader|.
       BufferFramePayload(reader);
       break;
     }
-    case 0x3: {  // CANCEL_PUSH
+    case static_cast<uint64_t>(HttpFrameType::CANCEL_PUSH): {
       BufferFramePayload(reader);
       break;
     }
-    case 0x4: {  // SETTINGS
+    case static_cast<uint64_t>(HttpFrameType::SETTINGS): {
       BufferFramePayload(reader);
       break;
     }
-    case 0x5: {  // PUSH_PROMISE
+    case static_cast<uint64_t>(HttpFrameType::PUSH_PROMISE): {
       if (current_frame_length_ == remaining_frame_length_) {
         QuicByteCount bytes_remaining = reader->BytesRemaining();
         PushId push_id;
@@ -244,18 +244,16 @@
       remaining_frame_length_ -= payload.length();
       break;
     }
-    case 0x7: {  // GOAWAY
+    case static_cast<uint64_t>(HttpFrameType::GOAWAY): {
       BufferFramePayload(reader);
       break;
     }
-
-    case 0xD: {  // MAX_PUSH_ID
+    case static_cast<uint64_t>(HttpFrameType::MAX_PUSH_ID): {
       // TODO(rch): Handle partial delivery.
       BufferFramePayload(reader);
       break;
     }
-
-    case 0xE: {  // DUPLICATE_PUSH
+    case static_cast<uint64_t>(HttpFrameType::DUPLICATE_PUSH): {
       BufferFramePayload(reader);
       break;
     }
@@ -285,15 +283,15 @@
   bool continue_processing = true;
 
   switch (current_frame_type_) {
-    case 0x0: {  // DATA
+    case static_cast<uint64_t>(HttpFrameType::DATA): {
       continue_processing = visitor_->OnDataFrameEnd();
       break;
     }
-    case 0x1: {  // HEADERS
+    case static_cast<uint64_t>(HttpFrameType::HEADERS): {
       continue_processing = visitor_->OnHeadersFrameEnd();
       break;
     }
-    case 0x2: {  // PRIORITY
+    case static_cast<uint64_t>(HttpFrameType::PRIORITY): {
       // TODO(rch): avoid buffering if the entire frame is present, and
       // instead parse directly out of |reader|.
       PriorityFrame frame;
@@ -304,7 +302,7 @@
       continue_processing = visitor_->OnPriorityFrame(frame);
       break;
     }
-    case 0x3: {  // CANCEL_PUSH
+    case static_cast<uint64_t>(HttpFrameType::CANCEL_PUSH): {
       // TODO(rch): Handle partial delivery.
       CancelPushFrame frame;
       QuicDataReader reader(buffer_.data(), current_frame_length_);
@@ -315,7 +313,7 @@
       continue_processing = visitor_->OnCancelPushFrame(frame);
       break;
     }
-    case 0x4: {  // SETTINGS
+    case static_cast<uint64_t>(HttpFrameType::SETTINGS): {
       SettingsFrame frame;
       QuicDataReader reader(buffer_.data(), current_frame_length_);
       if (!ParseSettingsFrame(&reader, &frame)) {
@@ -324,11 +322,11 @@
       continue_processing = visitor_->OnSettingsFrame(frame);
       break;
     }
-    case 0x5: {  // PUSH_PROMISE
+    case static_cast<uint64_t>(HttpFrameType::PUSH_PROMISE): {
       continue_processing = visitor_->OnPushPromiseFrameEnd();
       break;
     }
-    case 0x7: {  // GOAWAY
+    case static_cast<uint64_t>(HttpFrameType::GOAWAY): {
       // TODO(bnc): Handle partial delivery.
       QuicDataReader reader(buffer_.data(), current_frame_length_);
       GoAwayFrame frame;
@@ -345,8 +343,7 @@
       continue_processing = visitor_->OnGoAwayFrame(frame);
       break;
     }
-
-    case 0xD: {  // MAX_PUSH_ID
+    case static_cast<uint64_t>(HttpFrameType::MAX_PUSH_ID): {
       // TODO(bnc): Handle partial delivery.
       QuicDataReader reader(buffer_.data(), current_frame_length_);
       MaxPushIdFrame frame;
@@ -357,8 +354,7 @@
       continue_processing = visitor_->OnMaxPushIdFrame(frame);
       break;
     }
-
-    case 0xE: {  // DUPLICATE_PUSH
+    case static_cast<uint64_t>(HttpFrameType::DUPLICATE_PUSH): {
       // TODO(bnc): Handle partial delivery.
       QuicDataReader reader(buffer_.data(), current_frame_length_);
       DuplicatePushFrame frame;
@@ -509,21 +505,21 @@
   return true;
 }
 
-QuicByteCount HttpDecoder::MaxFrameLength(uint8_t frame_type) {
+QuicByteCount HttpDecoder::MaxFrameLength(uint64_t frame_type) {
   switch (frame_type) {
-    case 0x2:  // PRIORITY
+    case static_cast<uint64_t>(HttpFrameType::PRIORITY):
       return kPriorityFirstByteLength + VARIABLE_LENGTH_INTEGER_LENGTH_8 * 2 +
              kPriorityWeightLength;
-    case 0x3:  // CANCEL_PUSH
+    case static_cast<uint64_t>(HttpFrameType::CANCEL_PUSH):
       return sizeof(PushId);
-    case 0x4:  // SETTINGS
+    case static_cast<uint64_t>(HttpFrameType::SETTINGS):
       // This limit is arbitrary.
       return 1024 * 1024;
-    case 0x7:  // GOAWAY
+    case static_cast<uint64_t>(HttpFrameType::GOAWAY):
       return sizeof(QuicStreamId);
-    case 0xD:  // MAX_PUSH_ID
+    case static_cast<uint64_t>(HttpFrameType::MAX_PUSH_ID):
       return sizeof(PushId);
-    case 0xE:  // DUPLICATE_PUSH
+    case static_cast<uint64_t>(HttpFrameType::DUPLICATE_PUSH):
       return sizeof(PushId);
     default:
       // Other frames require no data buffering, so it's safe to have no limit.
diff --git a/quic/core/http/http_decoder.h b/quic/core/http/http_decoder.h
index e3d42ac..16cc5d2 100644
--- a/quic/core/http/http_decoder.h
+++ b/quic/core/http/http_decoder.h
@@ -190,7 +190,7 @@
   bool ParseSettingsFrame(QuicDataReader* reader, SettingsFrame* frame);
 
   // Returns the max frame size of a given |frame_type|.
-  QuicByteCount MaxFrameLength(uint8_t frame_type);
+  QuicByteCount MaxFrameLength(uint64_t frame_type);
 
   // Visitor to invoke when messages are parsed.
   Visitor* const visitor_;  // Unowned.