diff --git a/quiche/quic/core/http/end_to_end_test.cc b/quiche/quic/core/http/end_to_end_test.cc
index fdf0f5b..e2891a9 100644
--- a/quiche/quic/core/http/end_to_end_test.cc
+++ b/quiche/quic/core/http/end_to_end_test.cc
@@ -63,8 +63,8 @@
 #include "quiche/quic/test_tools/quic_test_client.h"
 #include "quiche/quic/test_tools/quic_test_server.h"
 #include "quiche/quic/test_tools/quic_test_utils.h"
-#include "quiche/quic/test_tools/quic_transport_test_tools.h"
 #include "quiche/quic/test_tools/server_thread.h"
+#include "quiche/quic/test_tools/web_transport_test_tools.h"
 #include "quiche/quic/tools/quic_backend_response.h"
 #include "quiche/quic/tools/quic_client.h"
 #include "quiche/quic/tools/quic_memory_cache_backend.h"
@@ -722,16 +722,18 @@
     return session;
   }
 
-  NiceMock<MockClientVisitor>& SetupWebTransportVisitor(
+  NiceMock<MockWebTransportSessionVisitor>& SetupWebTransportVisitor(
       WebTransportHttp3* session) {
-    auto visitor_owned = std::make_unique<NiceMock<MockClientVisitor>>();
-    NiceMock<MockClientVisitor>& visitor = *visitor_owned;
+    auto visitor_owned =
+        std::make_unique<NiceMock<MockWebTransportSessionVisitor>>();
+    NiceMock<MockWebTransportSessionVisitor>& visitor = *visitor_owned;
     session->SetVisitor(std::move(visitor_owned));
     return visitor;
   }
 
   std::string ReadDataFromWebTransportStreamUntilFin(
-      WebTransportStream* stream, MockStreamVisitor* visitor = nullptr) {
+      WebTransportStream* stream,
+      MockWebTransportStreamVisitor* visitor = nullptr) {
     QuicStreamId id = stream->GetStreamId();
     std::string buffer;
 
@@ -744,7 +746,7 @@
     while (true) {
       bool can_read = false;
       if (visitor == nullptr) {
-        auto visitor_owned = std::make_unique<MockStreamVisitor>();
+        auto visitor_owned = std::make_unique<MockWebTransportStreamVisitor>();
         visitor = visitor_owned.get();
         stream->SetVisitor(std::move(visitor_owned));
       }
@@ -6389,13 +6391,15 @@
   WebTransportHttp3* session =
       CreateWebTransportSession("/echo", /*wait_for_server_response=*/true);
   ASSERT_TRUE(session != nullptr);
-  NiceMock<MockClientVisitor>& visitor = SetupWebTransportVisitor(session);
+  NiceMock<MockWebTransportSessionVisitor>& visitor =
+      SetupWebTransportVisitor(session);
 
   WebTransportStream* outgoing_stream =
       session->OpenOutgoingUnidirectionalStream();
   ASSERT_TRUE(outgoing_stream != nullptr);
 
-  auto stream_visitor = std::make_unique<NiceMock<MockStreamVisitor>>();
+  auto stream_visitor =
+      std::make_unique<NiceMock<MockWebTransportStreamVisitor>>();
   bool data_acknowledged = false;
   EXPECT_CALL(*stream_visitor, OnWriteSideInDataRecvdState())
       .WillOnce(Assign(&data_acknowledged, true));
@@ -6434,7 +6438,8 @@
   WebTransportHttp3* session =
       CreateWebTransportSession("/echo", /*wait_for_server_response=*/false);
   ASSERT_TRUE(session != nullptr);
-  NiceMock<MockClientVisitor>& visitor = SetupWebTransportVisitor(session);
+  NiceMock<MockWebTransportSessionVisitor>& visitor =
+      SetupWebTransportVisitor(session);
 
   WebTransportStream* outgoing_stream =
       session->OpenOutgoingUnidirectionalStream();
@@ -6471,8 +6476,9 @@
   WebTransportStream* stream = session->OpenOutgoingBidirectionalStream();
   ASSERT_TRUE(stream != nullptr);
 
-  auto stream_visitor_owned = std::make_unique<NiceMock<MockStreamVisitor>>();
-  MockStreamVisitor* stream_visitor = stream_visitor_owned.get();
+  auto stream_visitor_owned =
+      std::make_unique<NiceMock<MockWebTransportStreamVisitor>>();
+  MockWebTransportStreamVisitor* stream_visitor = stream_visitor_owned.get();
   bool data_acknowledged = false;
   EXPECT_CALL(*stream_visitor, OnWriteSideInDataRecvdState())
       .WillOnce(Assign(&data_acknowledged, true));
@@ -6523,7 +6529,8 @@
   WebTransportHttp3* session =
       CreateWebTransportSession("/echo", /*wait_for_server_response=*/false);
   ASSERT_TRUE(session != nullptr);
-  NiceMock<MockClientVisitor>& visitor = SetupWebTransportVisitor(session);
+  NiceMock<MockWebTransportSessionVisitor>& visitor =
+      SetupWebTransportVisitor(session);
 
   bool stream_received = false;
   EXPECT_CALL(visitor, OnIncomingBidirectionalStreamAvailable())
@@ -6551,7 +6558,8 @@
   WebTransportHttp3* session =
       CreateWebTransportSession("/echo", /*wait_for_server_response=*/true);
   ASSERT_TRUE(session != nullptr);
-  NiceMock<MockClientVisitor>& visitor = SetupWebTransportVisitor(session);
+  NiceMock<MockWebTransportSessionVisitor>& visitor =
+      SetupWebTransportVisitor(session);
 
   quiche::SimpleBufferAllocator allocator;
   for (int i = 0; i < 10; i++) {
@@ -6581,7 +6589,8 @@
       "/echo", /*wait_for_server_response=*/true, &connect_stream);
   ASSERT_TRUE(session != nullptr);
   ASSERT_TRUE(connect_stream != nullptr);
-  NiceMock<MockClientVisitor>& visitor = SetupWebTransportVisitor(session);
+  NiceMock<MockWebTransportSessionVisitor>& visitor =
+      SetupWebTransportVisitor(session);
 
   quiche::SimpleBufferAllocator allocator;
   for (int i = 0; i < 10; i++) {
@@ -6608,7 +6617,8 @@
   WebTransportHttp3* session =
       CreateWebTransportSession("/echo", /*wait_for_server_response=*/true);
   ASSERT_TRUE(session != nullptr);
-  NiceMock<MockClientVisitor>& visitor = SetupWebTransportVisitor(session);
+  NiceMock<MockWebTransportSessionVisitor>& visitor =
+      SetupWebTransportVisitor(session);
 
   WebTransportStream* stream = session->OpenOutgoingBidirectionalStream();
   ASSERT_TRUE(stream != nullptr);
@@ -6639,7 +6649,8 @@
   WebTransportHttp3* session =
       CreateWebTransportSession("/echo", /*wait_for_server_response=*/true);
   ASSERT_TRUE(session != nullptr);
-  NiceMock<MockClientVisitor>& visitor = SetupWebTransportVisitor(session);
+  NiceMock<MockWebTransportSessionVisitor>& visitor =
+      SetupWebTransportVisitor(session);
 
   WebTransportStream* stream = session->OpenOutgoingBidirectionalStream();
   ASSERT_TRUE(stream != nullptr);
@@ -6670,7 +6681,8 @@
   WebTransportHttp3* session = CreateWebTransportSession(
       "/session-close", /*wait_for_server_response=*/true);
   ASSERT_TRUE(session != nullptr);
-  NiceMock<MockClientVisitor>& visitor = SetupWebTransportVisitor(session);
+  NiceMock<MockWebTransportSessionVisitor>& visitor =
+      SetupWebTransportVisitor(session);
 
   WebTransportStream* stream = session->OpenOutgoingUnidirectionalStream();
   ASSERT_TRUE(stream != nullptr);
@@ -6705,7 +6717,8 @@
       CreateWebTransportSession("/resets", /*wait_for_server_response=*/true);
   ASSERT_TRUE(session != nullptr);
 
-  NiceMock<MockClientVisitor>& visitor = SetupWebTransportVisitor(session);
+  NiceMock<MockWebTransportSessionVisitor>& visitor =
+      SetupWebTransportVisitor(session);
   EXPECT_CALL(visitor, OnIncomingUnidirectionalStreamAvailable())
       .WillRepeatedly([this, session]() {
         ReadAllIncomingWebTransportUnidirectionalStreams(session);
diff --git a/quiche/quic/core/quic_path_validator_test.cc b/quiche/quic/core/quic_path_validator_test.cc
index ec2c713..7640b86 100644
--- a/quiche/quic/core/quic_path_validator_test.cc
+++ b/quiche/quic/core/quic_path_validator_test.cc
@@ -16,7 +16,6 @@
 #include "quiche/quic/test_tools/mock_random.h"
 #include "quiche/quic/test_tools/quic_path_validator_peer.h"
 #include "quiche/quic/test_tools/quic_test_utils.h"
-#include "quiche/quic/test_tools/quic_transport_test_tools.h"
 
 using testing::_;
 using testing::Invoke;
diff --git a/quiche/quic/test_tools/quic_transport_test_tools.h b/quiche/quic/test_tools/web_transport_test_tools.h
similarity index 69%
rename from quiche/quic/test_tools/quic_transport_test_tools.h
rename to quiche/quic/test_tools/web_transport_test_tools.h
index 08d87ef..3a4603c 100644
--- a/quiche/quic/test_tools/quic_transport_test_tools.h
+++ b/quiche/quic/test_tools/web_transport_test_tools.h
@@ -2,17 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef QUICHE_QUIC_TEST_TOOLS_QUIC_TRANSPORT_TEST_TOOLS_H_
-#define QUICHE_QUIC_TEST_TOOLS_QUIC_TRANSPORT_TEST_TOOLS_H_
+#ifndef QUICHE_QUIC_TEST_TOOLS_WEB_TRANSPORT_TEST_TOOLS_H_
+#define QUICHE_QUIC_TEST_TOOLS_WEB_TRANSPORT_TEST_TOOLS_H_
 
 #include "quiche/quic/core/web_transport_interface.h"
 #include "quiche/quic/platform/api/quic_test.h"
-#include "quiche/quic/quic_transport/quic_transport_server_session.h"
 
 namespace quic {
 namespace test {
 
-class MockClientVisitor : public WebTransportVisitor {
+class MockWebTransportSessionVisitor : public WebTransportVisitor {
  public:
   MOCK_METHOD(void, OnSessionReady, (const spdy::SpdyHeaderBlock&), (override));
   MOCK_METHOD(void, OnSessionClosed,
@@ -24,13 +23,7 @@
   MOCK_METHOD(void, OnCanCreateNewOutgoingUnidirectionalStream, (), (override));
 };
 
-class MockServerVisitor : public QuicTransportServerSession::ServerVisitor {
- public:
-  MOCK_METHOD(bool, CheckOrigin, (url::Origin), (override));
-  MOCK_METHOD(bool, ProcessPath, (const GURL&), (override));
-};
-
-class MockStreamVisitor : public WebTransportStreamVisitor {
+class MockWebTransportStreamVisitor : public WebTransportStreamVisitor {
  public:
   MOCK_METHOD(void, OnCanRead, (), (override));
   MOCK_METHOD(void, OnCanWrite, (), (override));
@@ -45,4 +38,4 @@
 }  // namespace test
 }  // namespace quic
 
-#endif  // QUICHE_QUIC_TEST_TOOLS_QUIC_TRANSPORT_TEST_TOOLS_H_
+#endif  // QUICHE_QUIC_TEST_TOOLS_WEB_TRANSPORT_TEST_TOOLS_H_
