diff --git a/quic/qbone/qbone_packet_processor.cc b/quic/qbone/qbone_packet_processor.cc
index ef78efa..148c75a 100644
--- a/quic/qbone/qbone_packet_processor.cc
+++ b/quic/qbone/qbone_packet_processor.cc
@@ -6,13 +6,13 @@
 
 #include <cstring>
 
+#include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_bug_tracker.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_logging.h"
 #include "net/third_party/quiche/src/quic/qbone/platform/icmp_packet.h"
 #include "net/third_party/quiche/src/quic/qbone/platform/internet_checksum.h"
 #include "net/third_party/quiche/src/quic/qbone/platform/tcp_packet.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_endian.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_string_piece.h"
 
 namespace {
 
@@ -51,12 +51,11 @@
 QbonePacketProcessor::Filter::~Filter() {}
 
 QbonePacketProcessor::ProcessingResult
-QbonePacketProcessor::Filter::FilterPacket(
-    Direction direction,
-    quiche::QuicheStringPiece full_packet,
-    quiche::QuicheStringPiece payload,
-    icmp6_hdr* icmp_header,
-    OutputInterface* output) {
+QbonePacketProcessor::Filter::FilterPacket(Direction direction,
+                                           absl::string_view full_packet,
+                                           absl::string_view payload,
+                                           icmp6_hdr* icmp_header,
+                                           OutputInterface* output) {
   return ProcessingResult::OK;
 }
 
@@ -128,8 +127,7 @@
 
     result = filter_->FilterPacket(
         direction, *packet,
-        quiche::QuicheStringPiece(*transport_data,
-                                  packet->size() - header_size),
+        absl::string_view(*transport_data, packet->size() - header_size),
         icmp_header, output_);
   }
 
@@ -237,32 +235,29 @@
   return ProcessingResult::OK;
 }
 
-void QbonePacketProcessor::SendIcmpResponse(
-    icmp6_hdr* icmp_header,
-    quiche::QuicheStringPiece original_packet,
-    Direction original_direction) {
+void QbonePacketProcessor::SendIcmpResponse(icmp6_hdr* icmp_header,
+                                            absl::string_view original_packet,
+                                            Direction original_direction) {
   in6_addr dst;
   // TODO(b/70339814): ensure this is actually a unicast address.
   memcpy(dst.s6_addr, &original_packet[8], kIPv6AddressSize);
 
-  CreateIcmpPacket(
-      self_ip_, dst, *icmp_header, original_packet,
-      [this, original_direction](quiche::QuicheStringPiece packet) {
-        SendResponse(original_direction, packet);
-      });
+  CreateIcmpPacket(self_ip_, dst, *icmp_header, original_packet,
+                   [this, original_direction](absl::string_view packet) {
+                     SendResponse(original_direction, packet);
+                   });
 }
 
-void QbonePacketProcessor::SendTcpReset(
-    quiche::QuicheStringPiece original_packet,
-    Direction original_direction) {
-  CreateTcpResetPacket(original_packet, [this, original_direction](
-                                            quiche::QuicheStringPiece packet) {
-    SendResponse(original_direction, packet);
-  });
+void QbonePacketProcessor::SendTcpReset(absl::string_view original_packet,
+                                        Direction original_direction) {
+  CreateTcpResetPacket(original_packet,
+                       [this, original_direction](absl::string_view packet) {
+                         SendResponse(original_direction, packet);
+                       });
 }
 
 void QbonePacketProcessor::SendResponse(Direction original_direction,
-                                        quiche::QuicheStringPiece packet) {
+                                        absl::string_view packet) {
   switch (original_direction) {
     case Direction::FROM_OFF_NETWORK:
       output_->SendPacketToClient(packet);
