diff --git a/quic/core/http/http_encoder.cc b/quic/core/http/http_encoder.cc
index beeef9b..df04be2 100644
--- a/quic/core/http/http_encoder.cc
+++ b/quic/core/http/http_encoder.cc
@@ -44,8 +44,6 @@
   }
 }
 
-// Length of the type field of a frame.
-static const size_t kFrameTypeLength = 1;
 // Length of the weight field of a priority frame.
 static const size_t kPriorityWeightLength = 1;
 // Length of a priority frame's first byte.
@@ -63,8 +61,9 @@
     QuicByteCount payload_length,
     std::unique_ptr<char[]>* output) {
   DCHECK_NE(0u, payload_length);
-  QuicByteCount header_length =
-      QuicDataWriter::GetVarInt62Len(payload_length) + kFrameTypeLength;
+  QuicByteCount header_length = QuicDataWriter::GetVarInt62Len(payload_length) +
+                                QuicDataWriter::GetVarInt62Len(
+                                    static_cast<uint64_t>(HttpFrameType::DATA));
 
   output->reset(new char[header_length]);
   QuicDataWriter writer(header_length, output->get());
@@ -80,7 +79,9 @@
     std::unique_ptr<char[]>* output) {
   DCHECK_NE(0u, payload_length);
   QuicByteCount header_length =
-      QuicDataWriter::GetVarInt62Len(payload_length) + kFrameTypeLength;
+      QuicDataWriter::GetVarInt62Len(payload_length) +
+      QuicDataWriter::GetVarInt62Len(
+          static_cast<uint64_t>(HttpFrameType::HEADERS));
 
   output->reset(new char[header_length]);
   QuicDataWriter writer(header_length, output->get());
@@ -99,7 +100,8 @@
       QuicDataWriter::GetVarInt62Len(priority.prioritized_element_id) +
       QuicDataWriter::GetVarInt62Len(priority.element_dependency_id) +
       kPriorityWeightLength;
-  QuicByteCount total_length = GetTotalLength(payload_length);
+  QuicByteCount total_length =
+      GetTotalLength(payload_length, HttpFrameType::PRIORITY);
 
   output->reset(new char[total_length]);
   QuicDataWriter writer(total_length, output->get());
@@ -130,7 +132,8 @@
     std::unique_ptr<char[]>* output) {
   QuicByteCount payload_length =
       QuicDataWriter::GetVarInt62Len(cancel_push.push_id);
-  QuicByteCount total_length = GetTotalLength(payload_length);
+  QuicByteCount total_length =
+      GetTotalLength(payload_length, HttpFrameType::CANCEL_PUSH);
 
   output->reset(new char[total_length]);
   QuicDataWriter writer(total_length, output->get());
@@ -152,7 +155,8 @@
     payload_length += QuicDataWriter::GetVarInt62Len(it->second);
   }
 
-  QuicByteCount total_length = GetTotalLength(payload_length);
+  QuicByteCount total_length =
+      GetTotalLength(payload_length, HttpFrameType::SETTINGS);
 
   output->reset(new char[total_length]);
   QuicDataWriter writer(total_length, output->get());
@@ -178,7 +182,9 @@
       push_promise.headers.length();
   // GetTotalLength() is not used because headers will not be serialized.
   QuicByteCount total_length =
-      QuicDataWriter::GetVarInt62Len(payload_length) + kFrameTypeLength +
+      QuicDataWriter::GetVarInt62Len(payload_length) +
+      QuicDataWriter::GetVarInt62Len(
+          static_cast<uint64_t>(HttpFrameType::PUSH_PROMISE)) +
       QuicDataWriter::GetVarInt62Len(push_promise.push_id);
 
   output->reset(new char[total_length]);
@@ -196,7 +202,8 @@
     std::unique_ptr<char[]>* output) {
   QuicByteCount payload_length =
       QuicDataWriter::GetVarInt62Len(goaway.stream_id);
-  QuicByteCount total_length = GetTotalLength(payload_length);
+  QuicByteCount total_length =
+      GetTotalLength(payload_length, HttpFrameType::GOAWAY);
 
   output->reset(new char[total_length]);
   QuicDataWriter writer(total_length, output->get());
@@ -213,7 +220,8 @@
     std::unique_ptr<char[]>* output) {
   QuicByteCount payload_length =
       QuicDataWriter::GetVarInt62Len(max_push_id.push_id);
-  QuicByteCount total_length = GetTotalLength(payload_length);
+  QuicByteCount total_length =
+      GetTotalLength(payload_length, HttpFrameType::MAX_PUSH_ID);
 
   output->reset(new char[total_length]);
   QuicDataWriter writer(total_length, output->get());
@@ -230,7 +238,8 @@
     std::unique_ptr<char[]>* output) {
   QuicByteCount payload_length =
       QuicDataWriter::GetVarInt62Len(duplicate_push.push_id);
-  QuicByteCount total_length = GetTotalLength(payload_length);
+  QuicByteCount total_length =
+      GetTotalLength(payload_length, HttpFrameType::DUPLICATE_PUSH);
 
   output->reset(new char[total_length]);
   QuicDataWriter writer(total_length, output->get());
@@ -247,11 +256,13 @@
                                    HttpFrameType type,
                                    QuicDataWriter* writer) {
   return writer->WriteVarInt62(length) &&
-         writer->WriteUInt8(static_cast<uint8_t>(type));
+         writer->WriteVarInt62(static_cast<uint64_t>(type));
 }
 
-QuicByteCount HttpEncoder::GetTotalLength(QuicByteCount payload_length) {
-  return QuicDataWriter::GetVarInt62Len(payload_length) + kFrameTypeLength +
+QuicByteCount HttpEncoder::GetTotalLength(QuicByteCount payload_length,
+                                          HttpFrameType type) {
+  return QuicDataWriter::GetVarInt62Len(payload_length) +
+         QuicDataWriter::GetVarInt62Len(static_cast<uint64_t>(type)) +
          payload_length;
 }
 
