Move the capsule parser into //third_party/quiche/common.

Capsules are not specific to HTTP/3, thus they should live in the common code.

PiperOrigin-RevId: 502730881
diff --git a/build/source_list.bzl b/build/source_list.bzl
index 91be1a0..556b344 100644
--- a/build/source_list.bzl
+++ b/build/source_list.bzl
@@ -20,6 +20,7 @@
     "balsa/noop_balsa_visitor.h",
     "balsa/simple_buffer.h",
     "balsa/standard_header_map.h",
+    "common/capsule.h",
     "common/masque/connect_udp_datagram_payload.h",
     "common/platform/api/quiche_bug_tracker.h",
     "common/platform/api/quiche_client_stats.h",
@@ -219,7 +220,6 @@
     "quic/core/frames/quic_streams_blocked_frame.h",
     "quic/core/frames/quic_window_update_frame.h",
     "quic/core/handshaker_delegate_interface.h",
-    "quic/core/http/capsule.h",
     "quic/core/http/http_constants.h",
     "quic/core/http/http_decoder.h",
     "quic/core/http/http_encoder.h",
@@ -409,6 +409,7 @@
     "balsa/http_validation_policy.cc",
     "balsa/simple_buffer.cc",
     "balsa/standard_header_map.cc",
+    "common/capsule.cc",
     "common/masque/connect_udp_datagram_payload.cc",
     "common/platform/api/quiche_hostname_utils.cc",
     "common/platform/api/quiche_mutex.cc",
@@ -564,7 +565,6 @@
     "quic/core/frames/quic_stream_frame.cc",
     "quic/core/frames/quic_streams_blocked_frame.cc",
     "quic/core/frames/quic_window_update_frame.cc",
-    "quic/core/http/capsule.cc",
     "quic/core/http/http_constants.cc",
     "quic/core/http/http_decoder.cc",
     "quic/core/http/http_encoder.cc",
@@ -1025,6 +1025,7 @@
     "balsa/header_properties_test.cc",
     "balsa/simple_buffer_test.cc",
     "binary_http/binary_http_message_test.cc",
+    "common/capsule_test.cc",
     "common/masque/connect_udp_datagram_payload_test.cc",
     "common/platform/api/quiche_file_utils_test.cc",
     "common/platform/api/quiche_hostname_utils_test.cc",
@@ -1154,7 +1155,6 @@
     "quic/core/crypto/web_transport_fingerprint_proof_verifier_test.cc",
     "quic/core/deterministic_connection_id_generator_test.cc",
     "quic/core/frames/quic_frames_test.cc",
-    "quic/core/http/capsule_test.cc",
     "quic/core/http/http_decoder_test.cc",
     "quic/core/http/http_encoder_test.cc",
     "quic/core/http/http_frames_test.cc",
diff --git a/build/source_list.gni b/build/source_list.gni
index 965802a..22a646d 100644
--- a/build/source_list.gni
+++ b/build/source_list.gni
@@ -20,6 +20,7 @@
     "src/quiche/balsa/noop_balsa_visitor.h",
     "src/quiche/balsa/simple_buffer.h",
     "src/quiche/balsa/standard_header_map.h",
+    "src/quiche/common/capsule.h",
     "src/quiche/common/masque/connect_udp_datagram_payload.h",
     "src/quiche/common/platform/api/quiche_bug_tracker.h",
     "src/quiche/common/platform/api/quiche_client_stats.h",
@@ -219,7 +220,6 @@
     "src/quiche/quic/core/frames/quic_streams_blocked_frame.h",
     "src/quiche/quic/core/frames/quic_window_update_frame.h",
     "src/quiche/quic/core/handshaker_delegate_interface.h",
-    "src/quiche/quic/core/http/capsule.h",
     "src/quiche/quic/core/http/http_constants.h",
     "src/quiche/quic/core/http/http_decoder.h",
     "src/quiche/quic/core/http/http_encoder.h",
@@ -409,6 +409,7 @@
     "src/quiche/balsa/http_validation_policy.cc",
     "src/quiche/balsa/simple_buffer.cc",
     "src/quiche/balsa/standard_header_map.cc",
+    "src/quiche/common/capsule.cc",
     "src/quiche/common/masque/connect_udp_datagram_payload.cc",
     "src/quiche/common/platform/api/quiche_hostname_utils.cc",
     "src/quiche/common/platform/api/quiche_mutex.cc",
@@ -564,7 +565,6 @@
     "src/quiche/quic/core/frames/quic_stream_frame.cc",
     "src/quiche/quic/core/frames/quic_streams_blocked_frame.cc",
     "src/quiche/quic/core/frames/quic_window_update_frame.cc",
-    "src/quiche/quic/core/http/capsule.cc",
     "src/quiche/quic/core/http/http_constants.cc",
     "src/quiche/quic/core/http/http_decoder.cc",
     "src/quiche/quic/core/http/http_encoder.cc",
@@ -1025,6 +1025,7 @@
     "src/quiche/balsa/header_properties_test.cc",
     "src/quiche/balsa/simple_buffer_test.cc",
     "src/quiche/binary_http/binary_http_message_test.cc",
+    "src/quiche/common/capsule_test.cc",
     "src/quiche/common/masque/connect_udp_datagram_payload_test.cc",
     "src/quiche/common/platform/api/quiche_file_utils_test.cc",
     "src/quiche/common/platform/api/quiche_hostname_utils_test.cc",
@@ -1154,7 +1155,6 @@
     "src/quiche/quic/core/crypto/web_transport_fingerprint_proof_verifier_test.cc",
     "src/quiche/quic/core/deterministic_connection_id_generator_test.cc",
     "src/quiche/quic/core/frames/quic_frames_test.cc",
-    "src/quiche/quic/core/http/capsule_test.cc",
     "src/quiche/quic/core/http/http_decoder_test.cc",
     "src/quiche/quic/core/http/http_encoder_test.cc",
     "src/quiche/quic/core/http/http_frames_test.cc",
diff --git a/build/source_list.json b/build/source_list.json
index a79092f..495f110 100644
--- a/build/source_list.json
+++ b/build/source_list.json
@@ -19,6 +19,7 @@
     "quiche/balsa/noop_balsa_visitor.h",
     "quiche/balsa/simple_buffer.h",
     "quiche/balsa/standard_header_map.h",
+    "quiche/common/capsule.h",
     "quiche/common/masque/connect_udp_datagram_payload.h",
     "quiche/common/platform/api/quiche_bug_tracker.h",
     "quiche/common/platform/api/quiche_client_stats.h",
@@ -218,7 +219,6 @@
     "quiche/quic/core/frames/quic_streams_blocked_frame.h",
     "quiche/quic/core/frames/quic_window_update_frame.h",
     "quiche/quic/core/handshaker_delegate_interface.h",
-    "quiche/quic/core/http/capsule.h",
     "quiche/quic/core/http/http_constants.h",
     "quiche/quic/core/http/http_decoder.h",
     "quiche/quic/core/http/http_encoder.h",
@@ -408,6 +408,7 @@
     "quiche/balsa/http_validation_policy.cc",
     "quiche/balsa/simple_buffer.cc",
     "quiche/balsa/standard_header_map.cc",
+    "quiche/common/capsule.cc",
     "quiche/common/masque/connect_udp_datagram_payload.cc",
     "quiche/common/platform/api/quiche_hostname_utils.cc",
     "quiche/common/platform/api/quiche_mutex.cc",
@@ -563,7 +564,6 @@
     "quiche/quic/core/frames/quic_stream_frame.cc",
     "quiche/quic/core/frames/quic_streams_blocked_frame.cc",
     "quiche/quic/core/frames/quic_window_update_frame.cc",
-    "quiche/quic/core/http/capsule.cc",
     "quiche/quic/core/http/http_constants.cc",
     "quiche/quic/core/http/http_decoder.cc",
     "quiche/quic/core/http/http_encoder.cc",
@@ -1024,6 +1024,7 @@
     "quiche/balsa/header_properties_test.cc",
     "quiche/balsa/simple_buffer_test.cc",
     "quiche/binary_http/binary_http_message_test.cc",
+    "quiche/common/capsule_test.cc",
     "quiche/common/masque/connect_udp_datagram_payload_test.cc",
     "quiche/common/platform/api/quiche_file_utils_test.cc",
     "quiche/common/platform/api/quiche_hostname_utils_test.cc",
@@ -1153,7 +1154,6 @@
     "quiche/quic/core/crypto/web_transport_fingerprint_proof_verifier_test.cc",
     "quiche/quic/core/deterministic_connection_id_generator_test.cc",
     "quiche/quic/core/frames/quic_frames_test.cc",
-    "quiche/quic/core/http/capsule_test.cc",
     "quiche/quic/core/http/http_decoder_test.cc",
     "quiche/quic/core/http/http_encoder_test.cc",
     "quiche/quic/core/http/http_frames_test.cc",
diff --git a/quiche/quic/core/http/capsule.cc b/quiche/common/capsule.cc
similarity index 87%
rename from quiche/quic/core/http/capsule.cc
rename to quiche/common/capsule.cc
index 6d9d5c8..0237a7f 100644
--- a/quiche/quic/core/http/capsule.cc
+++ b/quiche/common/capsule.cc
@@ -2,23 +2,21 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "quiche/quic/core/http/capsule.h"
+#include "quiche/common/capsule.h"
 
 #include <type_traits>
 
 #include "absl/strings/escaping.h"
 #include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
-#include "quiche/quic/core/http/http_frames.h"
-#include "quiche/quic/core/quic_data_reader.h"
-#include "quiche/quic/core/quic_data_writer.h"
-#include "quiche/quic/core/quic_types.h"
-#include "quiche/quic/platform/api/quic_bug_tracker.h"
-#include "quiche/quic/platform/api/quic_ip_address.h"
+#include "quiche/common/platform/api/quiche_bug_tracker.h"
 #include "quiche/common/platform/api/quiche_logging.h"
+#include "quiche/common/quiche_data_reader.h"
+#include "quiche/common/quiche_data_writer.h"
 #include "quiche/common/quiche_ip_address.h"
+#include "quiche/web_transport/web_transport.h"
 
-namespace quic {
+namespace quiche {
 
 std::string CapsuleTypeToString(CapsuleType capsule_type) {
   switch (capsule_type) {
@@ -142,8 +140,9 @@
 }
 
 // static
-Capsule Capsule::CloseWebTransportSession(WebTransportSessionError error_code,
-                                          absl::string_view error_message) {
+Capsule Capsule::CloseWebTransportSession(
+    webtransport::SessionErrorCode error_code,
+    absl::string_view error_message) {
   Capsule capsule(CapsuleType::CLOSE_WEBTRANSPORT_SESSION);
   capsule.close_web_transport_session_capsule().error_code = error_code;
   capsule.close_web_transport_session_capsule().error_message = error_message;
@@ -332,9 +331,9 @@
 
 quiche::QuicheBuffer SerializeCapsule(
     const Capsule& capsule, quiche::QuicheBufferAllocator* allocator) {
-  QuicByteCount capsule_type_length = QuicDataWriter::GetVarInt62Len(
+  size_t capsule_type_length = QuicheDataWriter::GetVarInt62Len(
       static_cast<uint64_t>(capsule.capsule_type()));
-  QuicByteCount capsule_data_length;
+  size_t capsule_data_length;
   switch (capsule.capsule_type()) {
     case CapsuleType::DATAGRAM:
       capsule_data_length =
@@ -350,7 +349,7 @@
       break;
     case CapsuleType::CLOSE_WEBTRANSPORT_SESSION:
       capsule_data_length =
-          sizeof(WebTransportSessionError) +
+          sizeof(webtransport::SessionErrorCode) +
           capsule.close_web_transport_session_capsule().error_message.size();
       break;
     case CapsuleType::ADDRESS_REQUEST:
@@ -358,10 +357,10 @@
       for (auto requested_address :
            capsule.address_request_capsule().requested_addresses) {
         capsule_data_length +=
-            QuicDataWriter::GetVarInt62Len(requested_address.request_id) + 1 +
+            QuicheDataWriter::GetVarInt62Len(requested_address.request_id) + 1 +
             (requested_address.ip_prefix.address().IsIPv4()
-                 ? QuicIpAddress::kIPv4AddressSize
-                 : QuicIpAddress::kIPv6AddressSize) +
+                 ? QuicheIpAddress::kIPv4AddressSize
+                 : QuicheIpAddress::kIPv6AddressSize) +
             1;
       }
       break;
@@ -370,10 +369,10 @@
       for (auto assigned_address :
            capsule.address_assign_capsule().assigned_addresses) {
         capsule_data_length +=
-            QuicDataWriter::GetVarInt62Len(assigned_address.request_id) + 1 +
+            QuicheDataWriter::GetVarInt62Len(assigned_address.request_id) + 1 +
             (assigned_address.ip_prefix.address().IsIPv4()
-                 ? QuicIpAddress::kIPv4AddressSize
-                 : QuicIpAddress::kIPv6AddressSize) +
+                 ? QuicheIpAddress::kIPv4AddressSize
+                 : QuicheIpAddress::kIPv6AddressSize) +
             1;
       }
       break;
@@ -383,8 +382,8 @@
            capsule.route_advertisement_capsule().ip_address_ranges) {
         capsule_data_length += 1 +
                                (ip_address_range.start_ip_address.IsIPv4()
-                                    ? QuicIpAddress::kIPv4AddressSize
-                                    : QuicIpAddress::kIPv6AddressSize) *
+                                    ? QuicheIpAddress::kIPv4AddressSize
+                                    : QuicheIpAddress::kIPv6AddressSize) *
                                    2 +
                                1;
       }
@@ -393,25 +392,25 @@
       capsule_data_length = capsule.unknown_capsule_data().length();
       break;
   }
-  QuicByteCount capsule_length_length =
-      QuicDataWriter::GetVarInt62Len(capsule_data_length);
-  QuicByteCount total_capsule_length =
+  size_t capsule_length_length =
+      QuicheDataWriter::GetVarInt62Len(capsule_data_length);
+  size_t total_capsule_length =
       capsule_type_length + capsule_length_length + capsule_data_length;
   quiche::QuicheBuffer buffer(allocator, total_capsule_length);
-  QuicDataWriter writer(buffer.size(), buffer.data());
+  QuicheDataWriter writer(buffer.size(), buffer.data());
   if (!writer.WriteVarInt62(static_cast<uint64_t>(capsule.capsule_type()))) {
-    QUIC_BUG(capsule type write fail) << "Failed to write CAPSULE type";
+    QUICHE_BUG(capsule type write fail) << "Failed to write CAPSULE type";
     return {};
   }
   if (!writer.WriteVarInt62(capsule_data_length)) {
-    QUIC_BUG(capsule length write fail) << "Failed to write CAPSULE length";
+    QUICHE_BUG(capsule length write fail) << "Failed to write CAPSULE length";
     return {};
   }
   switch (capsule.capsule_type()) {
     case CapsuleType::DATAGRAM:
       if (!writer.WriteStringPiece(
               capsule.datagram_capsule().http_datagram_payload)) {
-        QUIC_BUG(datagram capsule payload write fail)
+        QUICHE_BUG(datagram capsule payload write fail)
             << "Failed to write DATAGRAM CAPSULE payload";
         return {};
       }
@@ -419,7 +418,7 @@
     case CapsuleType::LEGACY_DATAGRAM:
       if (!writer.WriteStringPiece(
               capsule.legacy_datagram_capsule().http_datagram_payload)) {
-        QUIC_BUG(datagram legacy capsule payload write fail)
+        QUICHE_BUG(datagram legacy capsule payload write fail)
             << "Failed to write LEGACY_DATAGRAM CAPSULE payload";
         return {};
       }
@@ -428,7 +427,7 @@
       if (!writer.WriteStringPiece(
               capsule.legacy_datagram_without_context_capsule()
                   .http_datagram_payload)) {
-        QUIC_BUG(datagram legacy without context capsule payload write fail)
+        QUICHE_BUG(datagram legacy without context capsule payload write fail)
             << "Failed to write LEGACY_DATAGRAM_WITHOUT_CONTEXT CAPSULE "
                "payload";
         return {};
@@ -437,13 +436,13 @@
     case CapsuleType::CLOSE_WEBTRANSPORT_SESSION:
       if (!writer.WriteUInt32(
               capsule.close_web_transport_session_capsule().error_code)) {
-        QUIC_BUG(close webtransport session capsule error code write fail)
+        QUICHE_BUG(close webtransport session capsule error code write fail)
             << "Failed to write CLOSE_WEBTRANSPORT_SESSION error code";
         return {};
       }
       if (!writer.WriteStringPiece(
               capsule.close_web_transport_session_capsule().error_message)) {
-        QUIC_BUG(close webtransport session capsule error message write fail)
+        QUICHE_BUG(close webtransport session capsule error message write fail)
             << "Failed to write CLOSE_WEBTRANSPORT_SESSION error message";
         return {};
       }
@@ -452,24 +451,24 @@
       for (auto requested_address :
            capsule.address_request_capsule().requested_addresses) {
         if (!writer.WriteVarInt62(requested_address.request_id)) {
-          QUIC_BUG(address request capsule id write fail)
+          QUICHE_BUG(address request capsule id write fail)
               << "Failed to write ADDRESS_REQUEST ID";
           return {};
         }
         if (!writer.WriteUInt8(
                 requested_address.ip_prefix.address().IsIPv4() ? 4 : 6)) {
-          QUIC_BUG(address request capsule family write fail)
+          QUICHE_BUG(address request capsule family write fail)
               << "Failed to write ADDRESS_REQUEST family";
           return {};
         }
         if (!writer.WriteStringPiece(
                 requested_address.ip_prefix.address().ToPackedString())) {
-          QUIC_BUG(address request capsule address write fail)
+          QUICHE_BUG(address request capsule address write fail)
               << "Failed to write ADDRESS_REQUEST address";
           return {};
         }
         if (!writer.WriteUInt8(requested_address.ip_prefix.prefix_length())) {
-          QUIC_BUG(address request capsule prefix length write fail)
+          QUICHE_BUG(address request capsule prefix length write fail)
               << "Failed to write ADDRESS_REQUEST prefix length";
           return {};
         }
@@ -479,24 +478,24 @@
       for (auto assigned_address :
            capsule.address_assign_capsule().assigned_addresses) {
         if (!writer.WriteVarInt62(assigned_address.request_id)) {
-          QUIC_BUG(address request capsule id write fail)
+          QUICHE_BUG(address request capsule id write fail)
               << "Failed to write ADDRESS_ASSIGN ID";
           return {};
         }
         if (!writer.WriteUInt8(
                 assigned_address.ip_prefix.address().IsIPv4() ? 4 : 6)) {
-          QUIC_BUG(address request capsule family write fail)
+          QUICHE_BUG(address request capsule family write fail)
               << "Failed to write ADDRESS_ASSIGN family";
           return {};
         }
         if (!writer.WriteStringPiece(
                 assigned_address.ip_prefix.address().ToPackedString())) {
-          QUIC_BUG(address request capsule address write fail)
+          QUICHE_BUG(address request capsule address write fail)
               << "Failed to write ADDRESS_ASSIGN address";
           return {};
         }
         if (!writer.WriteUInt8(assigned_address.ip_prefix.prefix_length())) {
-          QUIC_BUG(address request capsule prefix length write fail)
+          QUICHE_BUG(address request capsule prefix length write fail)
               << "Failed to write ADDRESS_ASSIGN prefix length";
           return {};
         }
@@ -507,24 +506,24 @@
            capsule.route_advertisement_capsule().ip_address_ranges) {
         if (!writer.WriteUInt8(
                 ip_address_range.start_ip_address.IsIPv4() ? 4 : 6)) {
-          QUIC_BUG(route advertisement capsule family write fail)
+          QUICHE_BUG(route advertisement capsule family write fail)
               << "Failed to write ROUTE_ADVERTISEMENT family";
           return {};
         }
         if (!writer.WriteStringPiece(
                 ip_address_range.start_ip_address.ToPackedString())) {
-          QUIC_BUG(route advertisement capsule start address write fail)
+          QUICHE_BUG(route advertisement capsule start address write fail)
               << "Failed to write ROUTE_ADVERTISEMENT start address";
           return {};
         }
         if (!writer.WriteStringPiece(
                 ip_address_range.end_ip_address.ToPackedString())) {
-          QUIC_BUG(route advertisement capsule end address write fail)
+          QUICHE_BUG(route advertisement capsule end address write fail)
               << "Failed to write ROUTE_ADVERTISEMENT end address";
           return {};
         }
         if (!writer.WriteUInt8(ip_address_range.ip_protocol)) {
-          QUIC_BUG(route advertisement capsule IP protocol write fail)
+          QUICHE_BUG(route advertisement capsule IP protocol write fail)
               << "Failed to write ROUTE_ADVERTISEMENT IP protocol";
           return {};
         }
@@ -532,13 +531,13 @@
       break;
     default:
       if (!writer.WriteStringPiece(capsule.unknown_capsule_data())) {
-        QUIC_BUG(capsule data write fail) << "Failed to write CAPSULE data";
+        QUICHE_BUG(capsule data write fail) << "Failed to write CAPSULE data";
         return {};
       }
       break;
   }
   if (writer.remaining() != 0) {
-    QUIC_BUG(capsule write length mismatch)
+    QUICHE_BUG(capsule write length mismatch)
         << "CAPSULE serialization wrote " << writer.length() << " instead of "
         << writer.capacity();
     return {};
@@ -577,19 +576,20 @@
   if (buffered_data_.empty()) {
     return 0;
   }
-  QuicDataReader capsule_fragment_reader(buffered_data_);
+  QuicheDataReader capsule_fragment_reader(buffered_data_);
   uint64_t capsule_type64;
   if (!capsule_fragment_reader.ReadVarInt62(&capsule_type64)) {
-    QUIC_DVLOG(2) << "Partial read: not enough data to read capsule type";
+    QUICHE_DVLOG(2) << "Partial read: not enough data to read capsule type";
     return 0;
   }
   absl::string_view capsule_data;
   if (!capsule_fragment_reader.ReadStringPieceVarInt62(&capsule_data)) {
-    QUIC_DVLOG(2) << "Partial read: not enough data to read capsule length or "
-                     "full capsule data";
+    QUICHE_DVLOG(2)
+        << "Partial read: not enough data to read capsule length or "
+           "full capsule data";
     return 0;
   }
-  QuicDataReader capsule_data_reader(capsule_data);
+  QuicheDataReader capsule_data_reader(capsule_data);
   Capsule capsule(static_cast<CapsuleType>(capsule_type64));
   switch (capsule.capsule_type()) {
     case CapsuleType::DATAGRAM:
@@ -634,8 +634,8 @@
         absl::string_view ip_address_bytes;
         if (!capsule_data_reader.ReadStringPiece(
                 &ip_address_bytes, address_family == 4
-                                       ? QuicIpAddress::kIPv4AddressSize
-                                       : QuicIpAddress::kIPv6AddressSize)) {
+                                       ? QuicheIpAddress::kIPv4AddressSize
+                                       : QuicheIpAddress::kIPv6AddressSize)) {
           ReportParseFailure("Unable to read capsule ADDRESS_REQUEST address");
           return 0;
         }
@@ -682,8 +682,8 @@
         absl::string_view ip_address_bytes;
         if (!capsule_data_reader.ReadStringPiece(
                 &ip_address_bytes, address_family == 4
-                                       ? QuicIpAddress::kIPv4AddressSize
-                                       : QuicIpAddress::kIPv6AddressSize)) {
+                                       ? QuicheIpAddress::kIPv4AddressSize
+                                       : QuicheIpAddress::kIPv6AddressSize)) {
           ReportParseFailure("Unable to read capsule ADDRESS_ASSIGN address");
           return 0;
         }
@@ -726,8 +726,8 @@
         absl::string_view start_ip_address_bytes;
         if (!capsule_data_reader.ReadStringPiece(
                 &start_ip_address_bytes,
-                address_family == 4 ? QuicIpAddress::kIPv4AddressSize
-                                    : QuicIpAddress::kIPv6AddressSize)) {
+                address_family == 4 ? QuicheIpAddress::kIPv4AddressSize
+                                    : QuicheIpAddress::kIPv6AddressSize)) {
           ReportParseFailure(
               "Unable to read capsule ROUTE_ADVERTISEMENT start address");
           return 0;
@@ -740,9 +740,9 @@
         }
         absl::string_view end_ip_address_bytes;
         if (!capsule_data_reader.ReadStringPiece(
-                &end_ip_address_bytes, address_family == 4
-                                           ? QuicIpAddress::kIPv4AddressSize
-                                           : QuicIpAddress::kIPv6AddressSize)) {
+                &end_ip_address_bytes,
+                address_family == 4 ? QuicheIpAddress::kIPv4AddressSize
+                                    : QuicheIpAddress::kIPv6AddressSize)) {
           ReportParseFailure(
               "Unable to read capsule ROUTE_ADVERTISEMENT end address");
           return 0;
@@ -775,7 +775,7 @@
 
 void CapsuleParser::ReportParseFailure(const std::string& error_message) {
   if (parsing_error_occurred_) {
-    QUIC_BUG(multiple parse errors) << "Experienced multiple parse failures";
+    QUICHE_BUG(multiple parse errors) << "Experienced multiple parse failures";
     return;
   }
   parsing_error_occurred_ = true;
@@ -815,4 +815,4 @@
   return ip_address_ranges == other.ip_address_ranges;
 }
 
-}  // namespace quic
+}  // namespace quiche
diff --git a/quiche/quic/core/http/capsule.h b/quiche/common/capsule.h
similarity index 86%
rename from quiche/quic/core/http/capsule.h
rename to quiche/common/capsule.h
index 198f667..85292c4 100644
--- a/quiche/quic/core/http/capsule.h
+++ b/quiche/common/capsule.h
@@ -2,23 +2,21 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef QUICHE_QUIC_CORE_HTTP_CAPSULE_H_
-#define QUICHE_QUIC_CORE_HTTP_CAPSULE_H_
+#ifndef QUICHE_COMMON_CAPSULE_H_
+#define QUICHE_COMMON_CAPSULE_H_
 
 #include <cstdint>
 #include <string>
 #include <vector>
 
-#include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
 #include "absl/types/optional.h"
-#include "quiche/quic/core/quic_data_reader.h"
-#include "quiche/quic/core/quic_types.h"
 #include "quiche/common/platform/api/quiche_logging.h"
 #include "quiche/common/quiche_buffer_allocator.h"
 #include "quiche/common/quiche_ip_address.h"
+#include "quiche/web_transport/web_transport.h"
 
-namespace quic {
+namespace quiche {
 
 enum class CapsuleType : uint64_t {
   // Casing in this enum matches the IETF specifications.
@@ -33,49 +31,49 @@
   ROUTE_ADVERTISEMENT = 0x1ECA6A02,
 };
 
-QUIC_EXPORT_PRIVATE std::string CapsuleTypeToString(CapsuleType capsule_type);
-QUIC_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os,
-                                             const CapsuleType& capsule_type);
+QUICHE_EXPORT std::string CapsuleTypeToString(CapsuleType capsule_type);
+QUICHE_EXPORT std::ostream& operator<<(std::ostream& os,
+                                       const CapsuleType& capsule_type);
 
-struct QUIC_EXPORT_PRIVATE DatagramCapsule {
+struct QUICHE_EXPORT DatagramCapsule {
   absl::string_view http_datagram_payload;
   std::string ToString() const;
 };
-struct QUIC_EXPORT_PRIVATE LegacyDatagramCapsule {
+struct QUICHE_EXPORT LegacyDatagramCapsule {
   absl::string_view http_datagram_payload;
   std::string ToString() const;
 };
-struct QUIC_EXPORT_PRIVATE LegacyDatagramWithoutContextCapsule {
+struct QUICHE_EXPORT LegacyDatagramWithoutContextCapsule {
   absl::string_view http_datagram_payload;
   std::string ToString() const;
 };
-struct QUIC_EXPORT_PRIVATE CloseWebTransportSessionCapsule {
-  WebTransportSessionError error_code;
+struct QUICHE_EXPORT CloseWebTransportSessionCapsule {
+  webtransport::SessionErrorCode error_code;
   absl::string_view error_message;
   std::string ToString() const;
 };
-struct QUIC_EXPORT_PRIVATE PrefixWithId {
+struct QUICHE_EXPORT PrefixWithId {
   uint64_t request_id;
   quiche::QuicheIpPrefix ip_prefix;
   bool operator==(const PrefixWithId& other) const;
 };
-struct QUIC_EXPORT_PRIVATE IpAddressRange {
+struct QUICHE_EXPORT IpAddressRange {
   quiche::QuicheIpAddress start_ip_address;
   quiche::QuicheIpAddress end_ip_address;
   uint8_t ip_protocol;
   bool operator==(const IpAddressRange& other) const;
 };
-struct QUIC_EXPORT_PRIVATE AddressAssignCapsule {
+struct QUICHE_EXPORT AddressAssignCapsule {
   std::vector<PrefixWithId> assigned_addresses;
   bool operator==(const AddressAssignCapsule& other) const;
   std::string ToString() const;
 };
-struct QUIC_EXPORT_PRIVATE AddressRequestCapsule {
+struct QUICHE_EXPORT AddressRequestCapsule {
   std::vector<PrefixWithId> requested_addresses;
   bool operator==(const AddressRequestCapsule& other) const;
   std::string ToString() const;
 };
-struct QUIC_EXPORT_PRIVATE RouteAdvertisementCapsule {
+struct QUICHE_EXPORT RouteAdvertisementCapsule {
   std::vector<IpAddressRange> ip_address_ranges;
   bool operator==(const RouteAdvertisementCapsule& other) const;
   std::string ToString() const;
@@ -86,7 +84,7 @@
 // points to. Strings saved into a capsule must outlive the capsule object. Any
 // code that sees a capsule in a callback needs to either process it immediately
 // or perform its own deep copy.
-class QUIC_EXPORT_PRIVATE Capsule {
+class QUICHE_EXPORT Capsule {
  public:
   static Capsule Datagram(
       absl::string_view http_datagram_payload = absl::string_view());
@@ -95,7 +93,7 @@
   static Capsule LegacyDatagramWithoutContext(
       absl::string_view http_datagram_payload = absl::string_view());
   static Capsule CloseWebTransportSession(
-      WebTransportSessionError error_code = 0,
+      webtransport::SessionErrorCode error_code = 0,
       absl::string_view error_message = "");
   static Capsule AddressRequest();
   static Capsule AddressAssign();
@@ -112,8 +110,8 @@
 
   // Human-readable information string for debugging purposes.
   std::string ToString() const;
-  friend QUIC_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os,
-                                                      const Capsule& capsule);
+  friend QUICHE_EXPORT std::ostream& operator<<(std::ostream& os,
+                                                const Capsule& capsule);
 
   CapsuleType capsule_type() const { return capsule_type_; }
   DatagramCapsule& datagram_capsule() {
@@ -222,9 +220,9 @@
 class CapsuleParserPeer;
 }  // namespace test
 
-class QUIC_EXPORT_PRIVATE CapsuleParser {
+class QUICHE_EXPORT CapsuleParser {
  public:
-  class QUIC_EXPORT_PRIVATE Visitor {
+  class QUICHE_EXPORT Visitor {
    public:
     virtual ~Visitor() {}
 
@@ -268,9 +266,9 @@
 };
 
 // Serializes |capsule| into a newly allocated buffer.
-QUIC_EXPORT_PRIVATE quiche::QuicheBuffer SerializeCapsule(
+QUICHE_EXPORT quiche::QuicheBuffer SerializeCapsule(
     const Capsule& capsule, quiche::QuicheBufferAllocator* allocator);
 
-}  // namespace quic
+}  // namespace quiche
 
-#endif  // QUICHE_QUIC_CORE_HTTP_CAPSULE_H_
+#endif  // QUICHE_COMMON_CAPSULE_H_
diff --git a/quiche/quic/core/http/capsule_test.cc b/quiche/common/capsule_test.cc
similarity index 97%
rename from quiche/quic/core/http/capsule_test.cc
rename to quiche/common/capsule_test.cc
index 95869c6..23d7533 100644
--- a/quiche/quic/core/http/capsule_test.cc
+++ b/quiche/common/capsule_test.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "quiche/quic/core/http/capsule.h"
+#include "quiche/common/capsule.h"
 
 #include <cstddef>
 #include <deque>
@@ -11,16 +11,16 @@
 
 #include "absl/strings/escaping.h"
 #include "absl/strings/string_view.h"
-#include "quiche/quic/platform/api/quic_test.h"
-#include "quiche/quic/test_tools/quic_test_utils.h"
+#include "quiche/common/platform/api/quiche_test.h"
 #include "quiche/common/quiche_ip_address.h"
+#include "quiche/common/simple_buffer_allocator.h"
 #include "quiche/common/test_tools/quiche_test_utils.h"
 
 using ::testing::_;
 using ::testing::InSequence;
 using ::testing::Return;
 
-namespace quic {
+namespace quiche {
 namespace test {
 
 class CapsuleParserPeer {
@@ -43,7 +43,7 @@
               (override));
 };
 
-class CapsuleTest : public QuicTest {
+class CapsuleTest : public QuicheTest {
  public:
   CapsuleTest() : capsule_parser_(&visitor_) {}
 
@@ -57,7 +57,7 @@
   void TestSerialization(const Capsule& capsule,
                          const std::string& expected_bytes) {
     quiche::QuicheBuffer serialized_capsule =
-        SerializeCapsule(capsule, quiche::SimpleBufferAllocator::Get());
+        SerializeCapsule(capsule, SimpleBufferAllocator::Get());
     quiche::test::CompareCharArraysWithHexError(
         "Serialized capsule", serialized_capsule.data(),
         serialized_capsule.size(), expected_bytes.data(),
@@ -389,4 +389,4 @@
 
 }  // namespace
 }  // namespace test
-}  // namespace quic
+}  // namespace quiche
diff --git a/quiche/quic/core/http/quic_spdy_stream.cc b/quiche/quic/core/http/quic_spdy_stream.cc
index 839e330..90e5341 100644
--- a/quiche/quic/core/http/quic_spdy_stream.cc
+++ b/quiche/quic/core/http/quic_spdy_stream.cc
@@ -14,7 +14,6 @@
 #include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
 #include "quiche/http2/http2_constants.h"
-#include "quiche/quic/core/http/capsule.h"
 #include "quiche/quic/core/http/http_constants.h"
 #include "quiche/quic/core/http/http_decoder.h"
 #include "quiche/quic/core/http/http_frames.h"
@@ -32,11 +31,14 @@
 #include "quiche/quic/platform/api/quic_flag_utils.h"
 #include "quiche/quic/platform/api/quic_flags.h"
 #include "quiche/quic/platform/api/quic_logging.h"
+#include "quiche/common/capsule.h"
 #include "quiche/common/quiche_mem_slice_storage.h"
 #include "quiche/common/quiche_text_utils.h"
 #include "quiche/spdy/core/spdy_protocol.h"
 
-using spdy::Http2HeaderBlock;
+using ::quiche::Capsule;
+using ::quiche::CapsuleType;
+using ::spdy::Http2HeaderBlock;
 
 namespace quic {
 
@@ -1444,7 +1446,7 @@
   }
   datagram_visitor_ = visitor;
   QUICHE_DCHECK(!capsule_parser_);
-  capsule_parser_ = std::make_unique<CapsuleParser>(this);
+  capsule_parser_ = std::make_unique<quiche::CapsuleParser>(this);
 }
 
 void QuicSpdyStream::UnregisterHttp3DatagramVisitor() {
diff --git a/quiche/quic/core/http/quic_spdy_stream.h b/quiche/quic/core/http/quic_spdy_stream.h
index 450e154..887facb 100644
--- a/quiche/quic/core/http/quic_spdy_stream.h
+++ b/quiche/quic/core/http/quic_spdy_stream.h
@@ -19,7 +19,6 @@
 #include "absl/base/attributes.h"
 #include "absl/strings/string_view.h"
 #include "absl/types/span.h"
-#include "quiche/quic/core/http/capsule.h"
 #include "quiche/quic/core/http/http_decoder.h"
 #include "quiche/quic/core/http/http_encoder.h"
 #include "quiche/quic/core/http/quic_header_list.h"
@@ -36,6 +35,7 @@
 #include "quiche/quic/platform/api/quic_export.h"
 #include "quiche/quic/platform/api/quic_flags.h"
 #include "quiche/quic/platform/api/quic_socket_address.h"
+#include "quiche/common/capsule.h"
 #include "quiche/common/platform/api/quiche_mem_slice.h"
 #include "quiche/spdy/core/http2_header_block.h"
 #include "quiche/spdy/core/spdy_framer.h"
@@ -53,7 +53,7 @@
 // A QUIC stream that can send and receive HTTP2 (SPDY) headers.
 class QUIC_EXPORT_PRIVATE QuicSpdyStream
     : public QuicStream,
-      public CapsuleParser::Visitor,
+      public quiche::CapsuleParser::Visitor,
       public QpackDecodedHeadersAccumulator::Visitor {
  public:
   // Visitor receives callbacks from the stream.
@@ -256,7 +256,7 @@
   bool CanWriteNewBodyData(QuicByteCount write_size) const;
 
   // From CapsuleParser::Visitor.
-  bool OnCapsule(const Capsule& capsule) override;
+  bool OnCapsule(const quiche::Capsule& capsule) override;
   void OnCapsuleParseFailure(const std::string& error_message) override;
 
   // Sends an HTTP/3 datagram. The stream ID is not part of |payload|. Virtual
@@ -290,11 +290,11 @@
     virtual ~ConnectIpVisitor() {}
 
     virtual bool OnAddressAssignCapsule(
-        const AddressAssignCapsule& capsule) = 0;
+        const quiche::AddressAssignCapsule& capsule) = 0;
     virtual bool OnAddressRequestCapsule(
-        const AddressRequestCapsule& capsule) = 0;
+        const quiche::AddressRequestCapsule& capsule) = 0;
     virtual bool OnRouteAdvertisementCapsule(
-        const RouteAdvertisementCapsule& capsule) = 0;
+        const quiche::RouteAdvertisementCapsule& capsule) = 0;
     virtual void OnHeadersWritten() = 0;
   };
 
@@ -318,7 +318,7 @@
   QuicByteCount GetMaxDatagramSize() const;
 
   // Writes |capsule| onto the DATA stream.
-  void WriteCapsule(const Capsule& capsule, bool fin = false);
+  void WriteCapsule(const quiche::Capsule& capsule, bool fin = false);
 
   void WriteGreaseCapsule();
 
@@ -452,7 +452,7 @@
   // the sequencer each time new stream data is processed.
   QuicSpdyStreamBodyManager body_manager_;
 
-  std::unique_ptr<CapsuleParser> capsule_parser_;
+  std::unique_ptr<quiche::CapsuleParser> capsule_parser_;
 
   // Sequencer offset keeping track of how much data HttpDecoder has processed.
   // Initial value is zero for fresh streams, or sequencer()->NumBytesConsumed()
diff --git a/quiche/quic/core/http/quic_spdy_stream_test.cc b/quiche/quic/core/http/quic_spdy_stream_test.cc
index 1ab50a0..dc15654 100644
--- a/quiche/quic/core/http/quic_spdy_stream_test.cc
+++ b/quiche/quic/core/http/quic_spdy_stream_test.cc
@@ -15,7 +15,6 @@
 #include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
 #include "quiche/quic/core/crypto/null_encrypter.h"
-#include "quiche/quic/core/http/capsule.h"
 #include "quiche/quic/core/http/http_encoder.h"
 #include "quiche/quic/core/http/quic_spdy_session.h"
 #include "quiche/quic/core/http/spdy_utils.h"
@@ -37,10 +36,13 @@
 #include "quiche/quic/test_tools/quic_spdy_stream_peer.h"
 #include "quiche/quic/test_tools/quic_stream_peer.h"
 #include "quiche/quic/test_tools/quic_test_utils.h"
+#include "quiche/common/capsule.h"
 #include "quiche/common/quiche_ip_address.h"
 #include "quiche/common/quiche_mem_slice_storage.h"
 #include "quiche/common/simple_buffer_allocator.h"
 
+using quiche::Capsule;
+using quiche::IpAddressRange;
 using spdy::Http2HeaderBlock;
 using spdy::kV3HighestPriority;
 using spdy::kV3LowestPriority;
@@ -3195,7 +3197,7 @@
               ElementsAre(SavingHttp3DatagramVisitor::SavedHttp3Datagram{
                   stream_->id(), http_datagram_payload}));
   // Address assign capsule.
-  PrefixWithId ip_prefix_with_id;
+  quiche::PrefixWithId ip_prefix_with_id;
   ip_prefix_with_id.request_id = 1;
   quiche::QuicheIpAddress ip_address;
   ip_address.FromString("::");
diff --git a/quiche/quic/core/http/web_transport_http3.cc b/quiche/quic/core/http/web_transport_http3.cc
index d74071d..91372d5 100644
--- a/quiche/quic/core/http/web_transport_http3.cc
+++ b/quiche/quic/core/http/web_transport_http3.cc
@@ -9,7 +9,6 @@
 
 #include "absl/strings/string_view.h"
 #include "absl/types/optional.h"
-#include "quiche/quic/core/http/capsule.h"
 #include "quiche/quic/core/http/quic_spdy_session.h"
 #include "quiche/quic/core/http/quic_spdy_stream.h"
 #include "quiche/quic/core/quic_data_reader.h"
@@ -20,6 +19,7 @@
 #include "quiche/quic/core/quic_utils.h"
 #include "quiche/quic/core/quic_versions.h"
 #include "quiche/quic/platform/api/quic_bug_tracker.h"
+#include "quiche/common/capsule.h"
 #include "quiche/common/platform/api/quiche_logging.h"
 #include "quiche/web_transport/web_transport.h"
 
@@ -108,7 +108,7 @@
   QuicConnection::ScopedPacketFlusher flusher(
       connect_stream_->spdy_session()->connection());
   connect_stream_->WriteCapsule(
-      Capsule::CloseWebTransportSession(error_code, error_message),
+      quiche::Capsule::CloseWebTransportSession(error_code, error_message),
       /*fin=*/true);
 }
 
diff --git a/quiche/quic/masque/masque_client_bin.cc b/quiche/quic/masque/masque_client_bin.cc
index 7383680..76f984c 100644
--- a/quiche/quic/masque/masque_client_bin.cc
+++ b/quiche/quic/masque/masque_client_bin.cc
@@ -49,6 +49,10 @@
 
 namespace {
 
+using ::quiche::AddressAssignCapsule;
+using ::quiche::AddressRequestCapsule;
+using ::quiche::RouteAdvertisementCapsule;
+
 class MasqueTunSession : public MasqueClientSession::EncapsulatedIpSession,
                          public QuicSocketEventListener {
  public:
diff --git a/quiche/quic/masque/masque_client_session.cc b/quiche/quic/masque/masque_client_session.cc
index e9d6d8b..5367d9e 100644
--- a/quiche/quic/masque/masque_client_session.cc
+++ b/quiche/quic/masque/masque_client_session.cc
@@ -26,6 +26,11 @@
 namespace quic {
 
 namespace {
+
+using ::quiche::AddressAssignCapsule;
+using ::quiche::AddressRequestCapsule;
+using ::quiche::RouteAdvertisementCapsule;
+
 constexpr uint64_t kConnectIpPayloadContextId = 0;
 }
 
diff --git a/quiche/quic/masque/masque_client_session.h b/quiche/quic/masque/masque_client_session.h
index 2b48e49..43703b4 100644
--- a/quiche/quic/masque/masque_client_session.h
+++ b/quiche/quic/masque/masque_client_session.h
@@ -66,11 +66,11 @@
     virtual void CloseIpSession(const std::string& details) = 0;
 
     virtual bool OnAddressAssignCapsule(
-        const AddressAssignCapsule& capsule) = 0;
+        const quiche::AddressAssignCapsule& capsule) = 0;
     virtual bool OnAddressRequestCapsule(
-        const AddressRequestCapsule& capsule) = 0;
+        const quiche::AddressRequestCapsule& capsule) = 0;
     virtual bool OnRouteAdvertisementCapsule(
-        const RouteAdvertisementCapsule& capsule) = 0;
+        const quiche::RouteAdvertisementCapsule& capsule) = 0;
   };
 
   // Takes ownership of |connection|, but not of |crypto_config| or
@@ -186,10 +186,12 @@
                          absl::string_view payload) override;
 
     // From QuicSpdyStream::ConnectIpVisitor.
-    bool OnAddressAssignCapsule(const AddressAssignCapsule& capsule) override;
-    bool OnAddressRequestCapsule(const AddressRequestCapsule& capsule) override;
+    bool OnAddressAssignCapsule(
+        const quiche::AddressAssignCapsule& capsule) override;
+    bool OnAddressRequestCapsule(
+        const quiche::AddressRequestCapsule& capsule) override;
     bool OnRouteAdvertisementCapsule(
-        const RouteAdvertisementCapsule& capsule) override;
+        const quiche::RouteAdvertisementCapsule& capsule) override;
     void OnHeadersWritten() override;
 
    private:
diff --git a/quiche/quic/masque/masque_encapsulated_client_session.cc b/quiche/quic/masque/masque_encapsulated_client_session.cc
index a4d83f6..d9e77ba 100644
--- a/quiche/quic/masque/masque_encapsulated_client_session.cc
+++ b/quiche/quic/masque/masque_encapsulated_client_session.cc
@@ -10,6 +10,10 @@
 
 namespace quic {
 
+using ::quiche::AddressAssignCapsule;
+using ::quiche::AddressRequestCapsule;
+using ::quiche::RouteAdvertisementCapsule;
+
 MasqueEncapsulatedClientSession::MasqueEncapsulatedClientSession(
     const QuicConfig& config, const ParsedQuicVersionVector& supported_versions,
     QuicConnection* connection, const QuicServerId& server_id,
diff --git a/quiche/quic/masque/masque_encapsulated_client_session.h b/quiche/quic/masque/masque_encapsulated_client_session.h
index d50e9b8..323c16d 100644
--- a/quiche/quic/masque/masque_encapsulated_client_session.h
+++ b/quiche/quic/masque/masque_encapsulated_client_session.h
@@ -51,10 +51,12 @@
   // From MasqueClientSession::EncapsulatedIpSession.
   void ProcessIpPacket(absl::string_view packet) override;
   void CloseIpSession(const std::string& details) override;
-  bool OnAddressAssignCapsule(const AddressAssignCapsule& capsule) override;
-  bool OnAddressRequestCapsule(const AddressRequestCapsule& capsule) override;
+  bool OnAddressAssignCapsule(
+      const quiche::AddressAssignCapsule& capsule) override;
+  bool OnAddressRequestCapsule(
+      const quiche::AddressRequestCapsule& capsule) override;
   bool OnRouteAdvertisementCapsule(
-      const RouteAdvertisementCapsule& capsule) override;
+      const quiche::RouteAdvertisementCapsule& capsule) override;
 
   // From QuicSession.
   void OnConnectionClosed(const QuicConnectionCloseFrame& frame,
diff --git a/quiche/quic/masque/masque_server_session.cc b/quiche/quic/masque/masque_server_session.cc
index 2feb48d..493b9f6 100644
--- a/quiche/quic/masque/masque_server_session.cc
+++ b/quiche/quic/masque/masque_server_session.cc
@@ -26,12 +26,21 @@
 #include "quiche/quic/masque/masque_utils.h"
 #include "quiche/quic/platform/api/quic_ip_address.h"
 #include "quiche/quic/tools/quic_url.h"
+#include "quiche/common/capsule.h"
 #include "quiche/common/platform/api/quiche_url_utils.h"
 #include "quiche/common/quiche_ip_address.h"
 
 namespace quic {
 
 namespace {
+
+using ::quiche::AddressAssignCapsule;
+using ::quiche::AddressRequestCapsule;
+using ::quiche::Capsule;
+using ::quiche::IpAddressRange;
+using ::quiche::PrefixWithId;
+using ::quiche::RouteAdvertisementCapsule;
+
 // RAII wrapper for QuicUdpSocketFd.
 class FdWrapper {
  public:
diff --git a/quiche/quic/masque/masque_server_session.h b/quiche/quic/masque/masque_server_session.h
index 77fdc73..082616d 100644
--- a/quiche/quic/masque/masque_server_session.h
+++ b/quiche/quic/masque/masque_server_session.h
@@ -117,10 +117,12 @@
                          absl::string_view payload) override;
 
     // From QuicSpdyStream::ConnectIpVisitor.
-    bool OnAddressAssignCapsule(const AddressAssignCapsule& capsule) override;
-    bool OnAddressRequestCapsule(const AddressRequestCapsule& capsule) override;
+    bool OnAddressAssignCapsule(
+        const quiche::AddressAssignCapsule& capsule) override;
+    bool OnAddressRequestCapsule(
+        const quiche::AddressRequestCapsule& capsule) override;
     bool OnRouteAdvertisementCapsule(
-        const RouteAdvertisementCapsule& capsule) override;
+        const quiche::RouteAdvertisementCapsule& capsule) override;
     void OnHeadersWritten() override;
 
    private:
diff --git a/quiche/quic/test_tools/quic_test_utils.h b/quiche/quic/test_tools/quic_test_utils.h
index 8609d5f..32a16c1 100644
--- a/quiche/quic/test_tools/quic_test_utils.h
+++ b/quiche/quic/test_tools/quic_test_utils.h
@@ -2099,40 +2099,43 @@
 // Implementation of ConnectIpVisitor which saves all received capsules.
 class SavingConnectIpVisitor : public QuicSpdyStream::ConnectIpVisitor {
  public:
-  const std::vector<AddressAssignCapsule>& received_address_assign_capsules()
-      const {
+  const std::vector<quiche::AddressAssignCapsule>&
+  received_address_assign_capsules() const {
     return received_address_assign_capsules_;
   }
-  const std::vector<AddressRequestCapsule>& received_address_request_capsules()
-      const {
+  const std::vector<quiche::AddressRequestCapsule>&
+  received_address_request_capsules() const {
     return received_address_request_capsules_;
   }
-  const std::vector<RouteAdvertisementCapsule>&
+  const std::vector<quiche::RouteAdvertisementCapsule>&
   received_route_advertisement_capsules() const {
     return received_route_advertisement_capsules_;
   }
   bool headers_written() const { return headers_written_; }
 
   // From QuicSpdyStream::ConnectIpVisitor.
-  bool OnAddressAssignCapsule(const AddressAssignCapsule& capsule) override {
+  bool OnAddressAssignCapsule(
+      const quiche::AddressAssignCapsule& capsule) override {
     received_address_assign_capsules_.push_back(capsule);
     return true;
   }
-  bool OnAddressRequestCapsule(const AddressRequestCapsule& capsule) override {
+  bool OnAddressRequestCapsule(
+      const quiche::AddressRequestCapsule& capsule) override {
     received_address_request_capsules_.push_back(capsule);
     return true;
   }
   bool OnRouteAdvertisementCapsule(
-      const RouteAdvertisementCapsule& capsule) override {
+      const quiche::RouteAdvertisementCapsule& capsule) override {
     received_route_advertisement_capsules_.push_back(capsule);
     return true;
   }
   void OnHeadersWritten() override { headers_written_ = true; }
 
  private:
-  std::vector<AddressAssignCapsule> received_address_assign_capsules_;
-  std::vector<AddressRequestCapsule> received_address_request_capsules_;
-  std::vector<RouteAdvertisementCapsule> received_route_advertisement_capsules_;
+  std::vector<quiche::AddressAssignCapsule> received_address_assign_capsules_;
+  std::vector<quiche::AddressRequestCapsule> received_address_request_capsules_;
+  std::vector<quiche::RouteAdvertisementCapsule>
+      received_route_advertisement_capsules_;
   bool headers_written_ = false;
 };