diff --git a/quic/quic_transport/quic_transport_integration_test.cc b/quic/quic_transport/quic_transport_integration_test.cc
index 57f5380..b8d8eae 100644
--- a/quic/quic_transport/quic_transport_integration_test.cc
+++ b/quic/quic_transport/quic_transport_integration_test.cc
@@ -70,7 +70,8 @@
   QuicTransportClientEndpoint(Simulator* simulator,
                               const std::string& name,
                               const std::string& peer_name,
-                              url::Origin origin)
+                              url::Origin origin,
+                              const std::string& path)
       : QuicTransportEndpointBase(simulator,
                                   name,
                                   peer_name,
@@ -80,7 +81,7 @@
                  nullptr,
                  DefaultQuicConfig(),
                  GetVersions(),
-                 GURL("quic-transport://test.example.com:50000"),
+                 GURL("quic-transport://test.example.com:50000" + path),
                  &crypto_config_,
                  origin,
                  &visitor_) {
@@ -101,7 +102,6 @@
   QuicTransportServerEndpoint(Simulator* simulator,
                               const std::string& name,
                               const std::string& peer_name,
-                              QuicTransportSimpleServerSession::Mode mode,
                               std::vector<url::Origin> accepted_origins)
       : QuicTransportEndpointBase(simulator,
                                   name,
@@ -120,7 +120,6 @@
                  GetVersions(),
                  &crypto_config_,
                  &compressed_certs_cache_,
-                 mode,
                  accepted_origins) {
     session_.Initialize();
   }
@@ -161,11 +160,11 @@
   QuicTransportIntegrationTest()
       : switch_(&simulator_, "Switch", 8, 2 * kBdp) {}
 
-  void CreateDefaultEndpoints(QuicTransportSimpleServerSession::Mode mode) {
+  void CreateDefaultEndpoints(const std::string& path) {
     client_ = std::make_unique<QuicTransportClientEndpoint>(
-        &simulator_, "Client", "Server", GetTestOrigin());
+        &simulator_, "Client", "Server", GetTestOrigin(), path);
     server_ = std::make_unique<QuicTransportServerEndpoint>(
-        &simulator_, "Server", "Client", mode, accepted_origins_);
+        &simulator_, "Server", "Client", accepted_origins_);
   }
 
   void WireUpEndpoints() {
@@ -206,7 +205,7 @@
 };
 
 TEST_F(QuicTransportIntegrationTest, SuccessfulHandshake) {
-  CreateDefaultEndpoints(QuicTransportSimpleServerSession::DISCARD);
+  CreateDefaultEndpoints("/discard");
   WireUpEndpoints();
   RunHandshake();
   EXPECT_TRUE(client_->session()->IsSessionReady());
@@ -215,7 +214,7 @@
 
 TEST_F(QuicTransportIntegrationTest, OriginMismatch) {
   accepted_origins_ = {url::Origin::Create(GURL{"https://wrong-origin.test"})};
-  CreateDefaultEndpoints(QuicTransportSimpleServerSession::DISCARD);
+  CreateDefaultEndpoints("/discard");
   WireUpEndpoints();
   RunHandshake();
   // Wait until the client receives CONNECTION_CLOSE.
@@ -233,7 +232,7 @@
 }
 
 TEST_F(QuicTransportIntegrationTest, SendOutgoingStreams) {
-  CreateDefaultEndpoints(QuicTransportSimpleServerSession::DISCARD);
+  CreateDefaultEndpoints("/discard");
   WireUpEndpoints();
   RunHandshake();
 
@@ -259,7 +258,7 @@
 }
 
 TEST_F(QuicTransportIntegrationTest, EchoBidirectionalStreams) {
-  CreateDefaultEndpoints(QuicTransportSimpleServerSession::ECHO);
+  CreateDefaultEndpoints("/echo");
   WireUpEndpoints();
   RunHandshake();
 
@@ -281,7 +280,7 @@
 }
 
 TEST_F(QuicTransportIntegrationTest, EchoUnidirectionalStreams) {
-  CreateDefaultEndpoints(QuicTransportSimpleServerSession::ECHO);
+  CreateDefaultEndpoints("/echo");
   WireUpEndpoints();
   RunHandshake();
 
diff --git a/quic/tools/quic_transport_simple_server_dispatcher.cc b/quic/tools/quic_transport_simple_server_dispatcher.cc
index 9b1ea04..2302b67 100644
--- a/quic/tools/quic_transport_simple_server_dispatcher.cc
+++ b/quic/tools/quic_transport_simple_server_dispatcher.cc
@@ -22,7 +22,6 @@
     std::unique_ptr<QuicCryptoServerStream::Helper> session_helper,
     std::unique_ptr<QuicAlarmFactory> alarm_factory,
     uint8_t expected_server_connection_id_length,
-    QuicTransportSimpleServerSession::Mode mode,
     std::vector<url::Origin> accepted_origins)
     : QuicDispatcher(config,
                      crypto_config,
@@ -31,7 +30,6 @@
                      std::move(session_helper),
                      std::move(alarm_factory),
                      expected_server_connection_id_length),
-      mode_(mode),
       accepted_origins_(accepted_origins) {}
 
 QuicSession* QuicTransportSimpleServerDispatcher::CreateQuicSession(
@@ -47,7 +45,7 @@
       new QuicTransportSimpleServerSession(
           connection.release(), /*owns_connection=*/true, this, config(),
           GetSupportedVersions(), crypto_config(), compressed_certs_cache(),
-          mode_, accepted_origins_);
+          accepted_origins_);
   session->Initialize();
   return session;
 }
diff --git a/quic/tools/quic_transport_simple_server_dispatcher.h b/quic/tools/quic_transport_simple_server_dispatcher.h
index ea4eb8b..f3e1b47 100644
--- a/quic/tools/quic_transport_simple_server_dispatcher.h
+++ b/quic/tools/quic_transport_simple_server_dispatcher.h
@@ -23,7 +23,6 @@
       std::unique_ptr<QuicCryptoServerStream::Helper> session_helper,
       std::unique_ptr<QuicAlarmFactory> alarm_factory,
       uint8_t expected_server_connection_id_length,
-      QuicTransportSimpleServerSession::Mode mode,
       std::vector<url::Origin> accepted_origins);
 
  protected:
@@ -32,7 +31,6 @@
                                  QuicStringPiece alpn,
                                  const ParsedQuicVersion& version) override;
 
-  QuicTransportSimpleServerSession::Mode mode_;
   std::vector<url::Origin> accepted_origins_;
 };
 
diff --git a/quic/tools/quic_transport_simple_server_session.cc b/quic/tools/quic_transport_simple_server_session.cc
index 40e5af3..9a0a667 100644
--- a/quic/tools/quic_transport_simple_server_session.cc
+++ b/quic/tools/quic_transport_simple_server_session.cc
@@ -133,7 +133,6 @@
     const ParsedQuicVersionVector& supported_versions,
     const QuicCryptoServerConfig* crypto_config,
     QuicCompressedCertsCache* compressed_certs_cache,
-    Mode mode,
     std::vector<url::Origin> accepted_origins)
     : QuicTransportServerSession(connection,
                                  owner,
@@ -144,7 +143,7 @@
                                  this),
       connection_(connection),
       owns_connection_(owns_connection),
-      mode_(mode),
+      mode_(DISCARD),
       accepted_origins_(accepted_origins) {}
 
 QuicTransportSimpleServerSession::~QuicTransportSimpleServerSession() {
@@ -203,8 +202,17 @@
 }
 
 bool QuicTransportSimpleServerSession::ProcessPath(const GURL& url) {
-  QUIC_DLOG(INFO) << "Path requested: " << url;
-  return true;
+  if (url.path() == "/discard") {
+    mode_ = DISCARD;
+    return true;
+  }
+  if (url.path() == "/echo") {
+    mode_ = ECHO;
+    return true;
+  }
+
+  QUIC_DLOG(WARNING) << "Unknown path requested: " << url.path();
+  return false;
 }
 
 void QuicTransportSimpleServerSession::MaybeEchoStreamsBack() {
diff --git a/quic/tools/quic_transport_simple_server_session.h b/quic/tools/quic_transport_simple_server_session.h
index 5857930..aadcdf7 100644
--- a/quic/tools/quic_transport_simple_server_session.h
+++ b/quic/tools/quic_transport_simple_server_session.h
@@ -45,7 +45,6 @@
       const ParsedQuicVersionVector& supported_versions,
       const QuicCryptoServerConfig* crypto_config,
       QuicCompressedCertsCache* compressed_certs_cache,
-      Mode mode,
       std::vector<url::Origin> accepted_origins);
   ~QuicTransportSimpleServerSession();
 
