Rename MoqtRequestError to MoqtErrorPair.

REQUEST_ERROR is now a message type, so this change avoids a name collision.

PiperOrigin-RevId: 855343344
diff --git a/quiche/quic/moqt/moqt_integration_test.cc b/quiche/quic/moqt/moqt_integration_test.cc
index e3c05f4..0b2f572 100644
--- a/quiche/quic/moqt/moqt_integration_test.cc
+++ b/quiche/quic/moqt/moqt_integration_test.cc
@@ -94,11 +94,10 @@
                              MockSubscribeRemoteTrackVisitor* visitor) {
     bool received_ok = false;
     EXPECT_CALL(*visitor, OnReply)
-        .WillOnce(
-            [&](const FullTrackName&,
-                std::variant<SubscribeOkData, MoqtRequestError> response) {
-              received_ok = std::holds_alternative<SubscribeOkData>(response);
-            });
+        .WillOnce([&](const FullTrackName&,
+                      std::variant<SubscribeOkData, MoqtErrorPair> response) {
+          received_ok = std::holds_alternative<SubscribeOkData>(response);
+        });
     client_->session()->SubscribeCurrentObject(track_name, visitor,
                                                VersionSpecificParameters());
     bool success =
@@ -113,7 +112,7 @@
   MockSessionCallbacks server_callbacks_;
   MockSubscribeRemoteTrackVisitor subscribe_visitor_;
   testing::MockFunction<void(TrackNamespace track_namespace,
-                             std::optional<MoqtRequestError> error_message)>
+                             std::optional<MoqtErrorPair> error_message)>
       outgoing_publish_namespace_callback_;
   std::unique_ptr<MoqtClientEndpoint> client_;
   std::unique_ptr<MoqtServerEndpoint> server_;
@@ -177,9 +176,8 @@
                    MoqtResponseCallback callback) {
         std::move(callback)(std::nullopt);
       });
-  testing::MockFunction<void(
-      TrackNamespace track_namespace,
-      std::optional<MoqtPublishNamespaceErrorReason> error_message)>
+  testing::MockFunction<void(TrackNamespace track_namespace,
+                             std::optional<MoqtErrorPair> error_message)>
       publish_namespace_callback;
   client_->session()->PublishNamespace(
       TrackNamespace{"foo"}, publish_namespace_callback.AsStdFunction(),
@@ -187,7 +185,7 @@
   bool matches = false;
   EXPECT_CALL(publish_namespace_callback, Call(_, _))
       .WillOnce([&](TrackNamespace track_namespace,
-                    std::optional<MoqtPublishNamespaceErrorReason> error) {
+                    std::optional<MoqtErrorPair> error) {
         matches = true;
         EXPECT_EQ(track_namespace, TrackNamespace{"foo"});
         EXPECT_FALSE(error.has_value());
@@ -221,9 +219,8 @@
                    MoqtResponseCallback callback) {
         std::move(callback)(std::nullopt);
       });
-  testing::MockFunction<void(
-      TrackNamespace track_namespace,
-      std::optional<MoqtPublishNamespaceErrorReason> error_message)>
+  testing::MockFunction<void(TrackNamespace track_namespace,
+                             std::optional<MoqtErrorPair> error_message)>
       publish_namespace_callback;
   client_->session()->PublishNamespace(
       TrackNamespace{"foo"}, publish_namespace_callback.AsStdFunction(),
@@ -231,7 +228,7 @@
   bool matches = false;
   EXPECT_CALL(publish_namespace_callback, Call(_, _))
       .WillOnce([&](TrackNamespace track_namespace,
-                    std::optional<MoqtPublishNamespaceErrorReason> error) {
+                    std::optional<MoqtErrorPair> error) {
         matches = true;
         EXPECT_EQ(track_namespace, TrackNamespace{"foo"});
         EXPECT_FALSE(error.has_value());
@@ -242,7 +239,7 @@
   matches = false;
   EXPECT_CALL(publish_namespace_callback, Call(_, _))
       .WillOnce([&](TrackNamespace track_namespace,
-                    std::optional<MoqtPublishNamespaceErrorReason> error) {
+                    std::optional<MoqtErrorPair> error) {
         matches = true;
         EXPECT_EQ(track_namespace, TrackNamespace{"foo"});
         ASSERT_TRUE(error.has_value());
@@ -273,7 +270,7 @@
   bool matches = false;
   EXPECT_CALL(outgoing_publish_namespace_callback_, Call)
       .WillOnce([&](TrackNamespace track_namespace,
-                    std::optional<MoqtRequestError> error) {
+                    std::optional<MoqtErrorPair> error) {
         EXPECT_EQ(track_namespace, TrackNamespace{"foo"});
         FullTrackName track_name(track_namespace, "/catalog");
         EXPECT_FALSE(error.has_value());
@@ -281,7 +278,7 @@
             track_name, &subscribe_visitor_, VersionSpecificParameters());
       })
       .WillOnce([&](TrackNamespace track_namespace,
-                    std::optional<MoqtRequestError> error) {
+                    std::optional<MoqtErrorPair> error) {
         EXPECT_EQ(track_namespace, TrackNamespace{"foo"});
         EXPECT_TRUE(error.has_value());
       });
@@ -329,7 +326,7 @@
   });
   client_->session()->PublishNamespace(
       TrackNamespace{"test"},
-      [](TrackNamespace, std::optional<MoqtRequestError>) {}, *parameters);
+      [](TrackNamespace, std::optional<MoqtErrorPair>) {}, *parameters);
   bool success = test_harness_.RunUntilWithDefaultTimeout(
       [&]() { return received_subscribe_ok; });
   EXPECT_TRUE(success);
@@ -386,12 +383,11 @@
                                                VersionSpecificParameters());
     std::optional<Location> largest_id;
     EXPECT_CALL(subscribe_visitor_, OnReply)
-        .WillOnce(
-            [&](const FullTrackName&,
-                std::variant<SubscribeOkData, MoqtRequestError> response) {
-              EXPECT_TRUE(std::holds_alternative<SubscribeOkData>(response));
-              largest_id = std::get<SubscribeOkData>(response).largest_location;
-            });
+        .WillOnce([&](const FullTrackName&,
+                      std::variant<SubscribeOkData, MoqtErrorPair> response) {
+          EXPECT_TRUE(std::holds_alternative<SubscribeOkData>(response));
+          largest_id = std::get<SubscribeOkData>(response).largest_location;
+        });
     bool success = test_harness_.RunUntilWithDefaultTimeout([&]() {
       return largest_id.has_value() && *largest_id == Location(0, 2);
     });
@@ -528,9 +524,8 @@
 
 TEST_F(MoqtIntegrationTest, PublishNamespaceFailure) {
   EstablishSession();
-  testing::MockFunction<void(
-      TrackNamespace track_namespace,
-      std::optional<MoqtPublishNamespaceErrorReason> error_message)>
+  testing::MockFunction<void(TrackNamespace track_namespace,
+                             std::optional<MoqtErrorPair> error_message)>
       publish_namespace_callback;
   client_->session()->PublishNamespace(
       TrackNamespace{"foo"}, publish_namespace_callback.AsStdFunction(),
@@ -538,7 +533,7 @@
   bool matches = false;
   EXPECT_CALL(publish_namespace_callback, Call(_, _))
       .WillOnce([&](TrackNamespace track_namespace,
-                    std::optional<MoqtPublishNamespaceErrorReason> error) {
+                    std::optional<MoqtErrorPair> error) {
         matches = true;
         EXPECT_EQ(track_namespace, TrackNamespace{"foo"});
         ASSERT_TRUE(error.has_value());
@@ -570,7 +565,7 @@
       });
   EXPECT_CALL(subscribe_visitor_, OnReply)
       .WillOnce([&](const FullTrackName&,
-                    std::variant<SubscribeOkData, MoqtRequestError> response) {
+                    std::variant<SubscribeOkData, MoqtErrorPair> response) {
         received_ok = std::holds_alternative<SubscribeOkData>(response);
       });
   client_->session()->SubscribeAbsolute(
@@ -601,7 +596,7 @@
       });
   EXPECT_CALL(subscribe_visitor_, OnReply)
       .WillOnce([&](const FullTrackName&,
-                    std::variant<SubscribeOkData, MoqtRequestError> response) {
+                    std::variant<SubscribeOkData, MoqtErrorPair> response) {
         received_ok = std::holds_alternative<SubscribeOkData>(response);
       });
   client_->session()->SubscribeCurrentObject(
@@ -632,7 +627,7 @@
       });
   EXPECT_CALL(subscribe_visitor_, OnReply)
       .WillOnce([&](const FullTrackName&,
-                    std::variant<SubscribeOkData, MoqtRequestError> response) {
+                    std::variant<SubscribeOkData, MoqtErrorPair> response) {
         received_ok = std::holds_alternative<SubscribeOkData>(response);
       });
   client_->session()->SubscribeNextGroup(full_track_name, &subscribe_visitor_,
@@ -648,8 +643,8 @@
   bool received_ok = false;
   EXPECT_CALL(subscribe_visitor_, OnReply)
       .WillOnce([&](const FullTrackName&,
-                    std::variant<SubscribeOkData, MoqtRequestError> response) {
-        received_ok = std::holds_alternative<MoqtRequestError>(response);
+                    std::variant<SubscribeOkData, MoqtErrorPair> response) {
+        received_ok = std::holds_alternative<MoqtErrorPair>(response);
       });
   client_->session()->SubscribeCurrentObject(
       full_track_name, &subscribe_visitor_, VersionSpecificParameters());
@@ -698,8 +693,8 @@
       full_track_name, &subscribe_visitor_, VersionSpecificParameters()));
   EXPECT_CALL(subscribe_visitor_, OnReply)
       .WillOnce([](const FullTrackName&,
-                   std::variant<SubscribeOkData, MoqtRequestError> response) {
-        EXPECT_TRUE(std::holds_alternative<MoqtRequestError>(response));
+                   std::variant<SubscribeOkData, MoqtErrorPair> response) {
+        EXPECT_TRUE(std::holds_alternative<MoqtErrorPair>(response));
       });  // Teardown
 }
 
@@ -730,7 +725,7 @@
       });
   EXPECT_CALL(subscribe_visitor_, OnReply)
       .WillOnce([&](const FullTrackName&,
-                    std::variant<SubscribeOkData, MoqtRequestError>) {
+                    std::variant<SubscribeOkData, MoqtErrorPair>) {
         ack_function(10, 20, quic::QuicTimeDelta::FromMicroseconds(-123));
         ack_function(100, 200, quic::QuicTimeDelta::FromMicroseconds(456));
       });
@@ -779,7 +774,7 @@
   bool received_ok = false;
   EXPECT_CALL(subscribe_visitor_, OnReply)
       .WillOnce([&](const FullTrackName&,
-                    std::variant<SubscribeOkData, MoqtRequestError> response) {
+                    std::variant<SubscribeOkData, MoqtErrorPair> response) {
         received_ok = std::holds_alternative<SubscribeOkData>(response);
       });
   VersionSpecificParameters parameters;
@@ -827,7 +822,7 @@
   bool received_ok = false;
   EXPECT_CALL(subscribe_visitor_, OnReply)
       .WillOnce([&](const FullTrackName&,
-                    std::variant<SubscribeOkData, MoqtRequestError> response) {
+                    std::variant<SubscribeOkData, MoqtErrorPair> response) {
         received_ok = std::holds_alternative<SubscribeOkData>(response);
       });
   VersionSpecificParameters parameters;
@@ -911,7 +906,7 @@
   bool subscribed = false;
   EXPECT_CALL(subscribe_visitor_, OnReply)
       .WillOnce([&](const FullTrackName&,
-                    std::variant<SubscribeOkData, MoqtRequestError>) {
+                    std::variant<SubscribeOkData, MoqtErrorPair>) {
         subscribed = true;
       });
   bool success =
diff --git a/quiche/quic/moqt/moqt_messages.h b/quiche/quic/moqt/moqt_messages.h
index 1ed2b9b..c6816b3 100644
--- a/quiche/quic/moqt/moqt_messages.h
+++ b/quiche/quic/moqt/moqt_messages.h
@@ -384,13 +384,10 @@
   kExpiredAuthToken = 0x12,
 };
 
-struct MoqtRequestError {
+struct MoqtErrorPair {
   RequestErrorCode error_code;
   std::string reason_phrase;
 };
-// TODO(martinduke): These are deprecated. Replace them in the code.
-using MoqtSubscribeErrorReason = MoqtRequestError;
-using MoqtPublishNamespaceErrorReason = MoqtSubscribeErrorReason;
 
 // Location as defined in
 // https://moq-wg.github.io/moq-transport/draft-ietf-moq-transport.html#location-structure
diff --git a/quiche/quic/moqt/moqt_outgoing_queue_test.cc b/quiche/quic/moqt/moqt_outgoing_queue_test.cc
index 53b0833..014999e 100644
--- a/quiche/quic/moqt/moqt_outgoing_queue_test.cc
+++ b/quiche/quic/moqt/moqt_outgoing_queue_test.cc
@@ -98,8 +98,7 @@
               ());
   MOCK_METHOD(void, OnTrackPublisherGone, (), (override));
   MOCK_METHOD(void, OnSubscribeAccepted, (), (override));
-  MOCK_METHOD(void, OnSubscribeRejected, (MoqtSubscribeErrorReason reason),
-              (override));
+  MOCK_METHOD(void, OnSubscribeRejected, (MoqtErrorPair reason), (override));
 };
 
 absl::StatusOr<std::vector<std::string>> FetchToVector(
diff --git a/quiche/quic/moqt/moqt_publisher.h b/quiche/quic/moqt/moqt_publisher.h
index 3ed6a6f..6096799 100644
--- a/quiche/quic/moqt/moqt_publisher.h
+++ b/quiche/quic/moqt/moqt_publisher.h
@@ -31,7 +31,7 @@
   virtual void OnSubscribeAccepted() = 0;
   // Called when the publisher is sure that it cannot serve the subscription.
   // This could happen synchronously or asynchronously.
-  virtual void OnSubscribeRejected(MoqtSubscribeErrorReason reason) = 0;
+  virtual void OnSubscribeRejected(MoqtErrorPair reason) = 0;
 
   // Notifies that a new object is available on the track.  The object payload
   // itself may be retrieved via GetCachedObject method of the associated track
diff --git a/quiche/quic/moqt/moqt_relay_publisher_test.cc b/quiche/quic/moqt/moqt_relay_publisher_test.cc
index b844726..2ee9a8d 100644
--- a/quiche/quic/moqt/moqt_relay_publisher_test.cc
+++ b/quiche/quic/moqt/moqt_relay_publisher_test.cc
@@ -75,10 +75,10 @@
 
 TEST_F(MoqtRelayPublisherTest, PublishNamespaceLifecycle) {
   EXPECT_EQ(publisher_.GetTrack(FullTrackName("foo", "bar")), nullptr);
-  std::optional<MoqtRequestError> response;
+  std::optional<MoqtErrorPair> response;
   publisher_.OnPublishNamespace(
       TrackNamespace({"foo"}), VersionSpecificParameters(), &session_,
-      [&](std::optional<MoqtRequestError> error_response) {
+      [&](std::optional<MoqtErrorPair> error_response) {
         response = error_response;
       });
   EXPECT_EQ(response, std::nullopt);
diff --git a/quiche/quic/moqt/moqt_relay_track_publisher.cc b/quiche/quic/moqt/moqt_relay_track_publisher.cc
index 5ca8496..4b9e9e7 100644
--- a/quiche/quic/moqt/moqt_relay_track_publisher.cc
+++ b/quiche/quic/moqt/moqt_relay_track_publisher.cc
@@ -27,12 +27,12 @@
 
 void MoqtRelayTrackPublisher::OnReply(
     const FullTrackName&,
-    std::variant<SubscribeOkData, MoqtRequestError> response) {
+    std::variant<SubscribeOkData, MoqtErrorPair> response) {
   if (is_closing_) {
     return;
   }
-  if (std::holds_alternative<MoqtRequestError>(response)) {
-    auto request_error = std::get<MoqtRequestError>(response);
+  if (std::holds_alternative<MoqtErrorPair>(response)) {
+    auto request_error = std::get<MoqtErrorPair>(response);
     // Delete upstream_ to avoid sending UNSUBSCRIBE.
     upstream_ = quiche::QuicheWeakPtr<MoqtSessionInterface>();
     // Sessions will delete listeners, causing the track to delete itself.
@@ -301,7 +301,7 @@
     MoqtSessionInterface* session = upstream_.GetIfAvailable();
     if (session == nullptr) {
       // upstream went away, reject the subscribe.
-      listener->OnSubscribeRejected(MoqtRequestError{
+      listener->OnSubscribeRejected(MoqtErrorPair{
           RequestErrorCode::kInternalError,
           "The upstream session was closed before a subscription could be "
           "established."});
diff --git a/quiche/quic/moqt/moqt_relay_track_publisher.h b/quiche/quic/moqt/moqt_relay_track_publisher.h
index 0aa2c0c..7b77829 100644
--- a/quiche/quic/moqt/moqt_relay_track_publisher.h
+++ b/quiche/quic/moqt/moqt_relay_track_publisher.h
@@ -67,9 +67,8 @@
   MoqtRelayTrackPublisher& operator=(MoqtRelayTrackPublisher&&) = default;
 
   // SubscribeVisitor implementation.
-  void OnReply(
-      const FullTrackName& full_track_name,
-      std::variant<SubscribeOkData, MoqtRequestError> response) override;
+  void OnReply(const FullTrackName& full_track_name,
+               std::variant<SubscribeOkData, MoqtErrorPair> response) override;
   // TODO(vasilvv): Implement this if we want to support Object Acks across
   // relays.
   void OnCanAckObjects(MoqtObjectAckFunction /*ack_function*/) override {}
diff --git a/quiche/quic/moqt/moqt_relay_track_publisher_test.cc b/quiche/quic/moqt/moqt_relay_track_publisher_test.cc
index c5add6d..c75c70c 100644
--- a/quiche/quic/moqt/moqt_relay_track_publisher_test.cc
+++ b/quiche/quic/moqt/moqt_relay_track_publisher_test.cc
@@ -28,8 +28,7 @@
 class MockMoqtObjectListener : public MoqtObjectListener {
  public:
   MOCK_METHOD(void, OnSubscribeAccepted, (), (override));
-  MOCK_METHOD(void, OnSubscribeRejected, (MoqtSubscribeErrorReason reason),
-              (override));
+  MOCK_METHOD(void, OnSubscribeRejected, (MoqtErrorPair reason), (override));
   MOCK_METHOD(void, OnNewObjectAvailable,
               (Location sequence, uint64_t subgroup,
                MoqtPriority publisher_priority,
@@ -310,9 +309,8 @@
   EXPECT_CALL(listener_, OnSubscribeRejected).WillOnce([this] {
     publisher_.RemoveObjectListener(&listener_);
   });
-  publisher_.OnReply(
-      kTrackName,
-      MoqtRequestError{RequestErrorCode::kUnauthorized, "Unauthorized"});
+  publisher_.OnReply(kTrackName, MoqtErrorPair{RequestErrorCode::kUnauthorized,
+                                               "Unauthorized"});
   EXPECT_TRUE(track_deleted_);
 }
 
diff --git a/quiche/quic/moqt/moqt_session.cc b/quiche/quic/moqt/moqt_session.cc
index b1c1ef6..9017753 100644
--- a/quiche/quic/moqt/moqt_session.cc
+++ b/quiche/quic/moqt/moqt_session.cc
@@ -325,9 +325,8 @@
   if (outgoing_publish_namespaces_.contains(track_namespace)) {
     std::move(callback)(
         track_namespace,
-        MoqtRequestError{
-            RequestErrorCode::kInternalError,
-            "PUBLISH_NAMESPACE already outstanding for namespace"});
+        MoqtErrorPair{RequestErrorCode::kInternalError,
+                      "PUBLISH_NAMESPACE already outstanding for namespace"});
     return;
   }
   if (next_request_id_ >= peer_max_request_id_) {
@@ -735,8 +734,7 @@
   if (subscribe->ErrorIsAllowed()) {
     subscribe->visitor()->OnReply(
         subscribe->full_track_name(),
-        MoqtRequestError{RequestErrorCode::kNotSupported,
-                         "Subscription closed"});
+        MoqtErrorPair{RequestErrorCode::kNotSupported, "Subscription closed"});
   } else {
     subscribe->visitor()->OnPublishDone(subscribe->full_track_name());
   }
@@ -1169,7 +1167,7 @@
   if (subscribe->visitor() != nullptr) {
     subscribe->visitor()->OnReply(
         subscribe->full_track_name(),
-        MoqtRequestError{message.error_code, message.reason_phrase});
+        MoqtErrorPair{message.error_code, message.reason_phrase});
   }
   if (!session_->is_closing_) {
     // The visitor might have closed the session.
@@ -1236,7 +1234,7 @@
       session_->GetWeakPtr();
   session_->callbacks_.incoming_publish_namespace_callback(
       message.track_namespace, message.parameters,
-      [&](std::optional<MoqtRequestError> error) {
+      [&](std::optional<MoqtErrorPair> error) {
         MoqtSession* session =
             static_cast<MoqtSession*>(session_weakptr.GetIfAvailable());
         if (session == nullptr) {
@@ -1297,7 +1295,7 @@
   }
   std::move(it2->second)(
       track_namespace,
-      MoqtRequestError{message.error_code, std::string(message.error_reason)});
+      MoqtErrorPair{message.error_code, std::string(message.error_reason)});
   session_->outgoing_publish_namespaces_.erase(it2);
 }
 
@@ -1321,7 +1319,7 @@
   }
   std::move(it->second)(
       message.track_namespace,
-      MoqtRequestError{message.error_code, std::string(message.error_reason)});
+      MoqtErrorPair{message.error_code, std::string(message.error_reason)});
   session_->outgoing_publish_namespaces_.erase(it);
 }
 
@@ -1408,7 +1406,7 @@
   }
   (session_->callbacks_.incoming_subscribe_namespace_callback)(
       message.track_namespace, message.parameters,
-      [&](std::optional<MoqtRequestError> error) {
+      [&](std::optional<MoqtErrorPair> error) {
         if (error.has_value()) {
           MoqtSubscribeNamespaceError reply;
           reply.request_id = message.request_id;
@@ -2073,7 +2071,7 @@
 }
 
 void MoqtSession::PublishedSubscription::OnSubscribeRejected(
-    MoqtSubscribeErrorReason reason) {
+    MoqtErrorPair reason) {
   session_->GetControlStream()->SendSubscribeError(
       request_id_, reason.error_code, reason.reason_phrase);
   session_->published_subscriptions_.erase(request_id_);
@@ -2573,8 +2571,8 @@
                                                    std::nullopt, nullptr);
   }
   for (auto& [track_namespace, callback] : outgoing_publish_namespaces_) {
-    callback(track_namespace, MoqtRequestError{RequestErrorCode::kUninterested,
-                                               "Session closed"});
+    callback(track_namespace,
+             MoqtErrorPair{RequestErrorCode::kUninterested, "Session closed"});
   }
   while (!upstream_by_id_.empty()) {
     auto upstream = upstream_by_id_.begin();
diff --git a/quiche/quic/moqt/moqt_session.h b/quiche/quic/moqt/moqt_session.h
index 710e543..8c8f17f 100644
--- a/quiche/quic/moqt/moqt_session.h
+++ b/quiche/quic/moqt/moqt_session.h
@@ -372,7 +372,7 @@
 
     // MoqtObjectListener implementation.
     void OnSubscribeAccepted() override;
-    void OnSubscribeRejected(MoqtSubscribeErrorReason reason) override;
+    void OnSubscribeRejected(MoqtErrorPair reason) override;
     // This is only called for objects that have just arrived.
     void OnNewObjectAvailable(
         Location location, uint64_t subgroup, MoqtPriority publisher_priority,
@@ -648,7 +648,7 @@
       // No class access below this line!
     }
 
-    void OnSubscribeRejected(MoqtSubscribeErrorReason error_reason) override {
+    void OnSubscribeRejected(MoqtErrorPair error_reason) override {
       MoqtTrackStatusError track_status_error;
       track_status_error.request_id = request_id_;
       track_status_error.error_code = error_reason.error_code;
@@ -669,8 +669,8 @@
     void OnGroupAbandoned(uint64_t /*group_id*/) override {}
     void OnTrackPublisherGone() override {
       publisher_ = nullptr;
-      OnSubscribeRejected(MoqtSubscribeErrorReason(
-          RequestErrorCode::kTrackDoesNotExist, "Track publisher gone"));
+      OnSubscribeRejected(MoqtErrorPair(RequestErrorCode::kTrackDoesNotExist,
+                                        "Track publisher gone"));
     }
 
    private:
diff --git a/quiche/quic/moqt/moqt_session_callbacks.h b/quiche/quic/moqt/moqt_session_callbacks.h
index e8a238d..541308a 100644
--- a/quiche/quic/moqt/moqt_session_callbacks.h
+++ b/quiche/quic/moqt/moqt_session_callbacks.h
@@ -20,7 +20,7 @@
 // once; if the argument is nullopt, an OK response was received. Otherwise, an
 // ERROR response was received.
 using MoqtResponseCallback =
-    quiche::SingleUseCallback<void(std::optional<MoqtRequestError>)>;
+    quiche::SingleUseCallback<void(std::optional<MoqtErrorPair>)>;
 
 // Called when the SETUP message from the peer is received.
 using MoqtSessionEstablishedCallback = quiche::SingleUseCallback<void()>;
@@ -59,7 +59,7 @@
   if (callback == nullptr) {
     return;
   }
-  return std::move(callback)(MoqtRequestError{
+  return std::move(callback)(MoqtErrorPair{
       RequestErrorCode::kNotSupported,
       "This endpoint does not support incoming SUBSCRIBE_NAMESPACE messages"});
 };
diff --git a/quiche/quic/moqt/moqt_session_interface.h b/quiche/quic/moqt/moqt_session_interface.h
index 677ba61..3e6736b 100644
--- a/quiche/quic/moqt/moqt_session_interface.h
+++ b/quiche/quic/moqt/moqt_session_interface.h
@@ -41,7 +41,7 @@
   // automatically retry.
   virtual void OnReply(
       const FullTrackName& full_track_name,
-      std::variant<SubscribeOkData, MoqtRequestError> response) = 0;
+      std::variant<SubscribeOkData, MoqtErrorPair> response) = 0;
   // Called when the subscription process is far enough that it is possible to
   // send OBJECT_ACK messages; provides a callback to do so. The callback is
   // valid for as long as the session is valid.
@@ -79,9 +79,8 @@
 // PUBLISH_NAMESPACE state immediately after calling this callback.
 // Alternatively, the application can call PublishNamespaceDone() to delete the
 // state.
-using MoqtOutgoingPublishNamespaceCallback =
-    quiche::MultiUseCallback<void(const TrackNamespace& track_namespace,
-                                  std::optional<MoqtRequestError> error)>;
+using MoqtOutgoingPublishNamespaceCallback = quiche::MultiUseCallback<void(
+    const TrackNamespace& track_namespace, std::optional<MoqtErrorPair> error)>;
 
 using MoqtOutgoingSubscribeNamespaceCallback = quiche::SingleUseCallback<void(
     TrackNamespace track_namespace, std::optional<RequestErrorCode> error,
diff --git a/quiche/quic/moqt/moqt_session_test.cc b/quiche/quic/moqt/moqt_session_test.cc
index 6ec6709..887debc 100644
--- a/quiche/quic/moqt/moqt_session_test.cc
+++ b/quiche/quic/moqt/moqt_session_test.cc
@@ -392,7 +392,7 @@
 
 TEST_F(MoqtSessionTest, PublishNamespaceWithOkAndCancel) {
   testing::MockFunction<void(TrackNamespace track_namespace,
-                             std::optional<MoqtRequestError> error_message)>
+                             std::optional<MoqtErrorPair> error_message)>
       publish_namespace_resolved_callback;
   std::unique_ptr<MoqtControlParserVisitor> stream_input =
       MoqtSessionPeer::CreateControlStream(&session_, &mock_stream_);
@@ -409,7 +409,7 @@
   };
   EXPECT_CALL(publish_namespace_resolved_callback, Call(_, _))
       .WillOnce([&](TrackNamespace track_namespace,
-                    std::optional<MoqtRequestError> error) {
+                    std::optional<MoqtErrorPair> error) {
         EXPECT_EQ(track_namespace, TrackNamespace("foo"));
         EXPECT_FALSE(error.has_value());
       });
@@ -422,7 +422,7 @@
   };
   EXPECT_CALL(publish_namespace_resolved_callback, Call(_, _))
       .WillOnce([&](TrackNamespace track_namespace,
-                    std::optional<MoqtRequestError> error) {
+                    std::optional<MoqtErrorPair> error) {
         EXPECT_EQ(track_namespace, TrackNamespace("foo"));
         ASSERT_TRUE(error.has_value());
         EXPECT_EQ(error->error_code, RequestErrorCode::kInternalError);
@@ -435,7 +435,7 @@
 
 TEST_F(MoqtSessionTest, PublishNamespaceWithOkAndPublishNamespaceDone) {
   testing::MockFunction<void(TrackNamespace track_namespace,
-                             std::optional<MoqtRequestError> error_message)>
+                             std::optional<MoqtErrorPair> error_message)>
       publish_namespace_resolved_callback;
   std::unique_ptr<MoqtControlParserVisitor> stream_input =
       MoqtSessionPeer::CreateControlStream(&session_, &mock_stream_);
@@ -452,7 +452,7 @@
   };
   EXPECT_CALL(publish_namespace_resolved_callback, Call(_, _))
       .WillOnce([&](TrackNamespace track_namespace,
-                    std::optional<MoqtRequestError> error) {
+                    std::optional<MoqtErrorPair> error) {
         EXPECT_EQ(track_namespace, TrackNamespace{"foo"});
         EXPECT_FALSE(error.has_value());
       });
@@ -469,7 +469,7 @@
 
 TEST_F(MoqtSessionTest, PublishNamespaceWithError) {
   testing::MockFunction<void(TrackNamespace track_namespace,
-                             std::optional<MoqtRequestError> error_message)>
+                             std::optional<MoqtErrorPair> error_message)>
       publish_namespace_resolved_callback;
   std::unique_ptr<MoqtControlParserVisitor> stream_input =
       MoqtSessionPeer::CreateControlStream(&session_, &mock_stream_);
@@ -488,7 +488,7 @@
   };
   EXPECT_CALL(publish_namespace_resolved_callback, Call(_, _))
       .WillOnce([&](TrackNamespace track_namespace,
-                    std::optional<MoqtRequestError> error) {
+                    std::optional<MoqtErrorPair> error) {
         EXPECT_EQ(track_namespace, TrackNamespace{"foo"});
         ASSERT_TRUE(error.has_value());
         EXPECT_EQ(error->error_code, RequestErrorCode::kInternalError);
@@ -531,7 +531,7 @@
       mock_stream_,
       Writev(ControlMessageOfType(MoqtMessageType::kSubscribeError), _));
   listener->OnSubscribeRejected(
-      MoqtSubscribeErrorReason(RequestErrorCode::kInternalError, "Test error"));
+      MoqtErrorPair(RequestErrorCode::kInternalError, "Test error"));
   EXPECT_EQ(MoqtSessionPeer::GetSubscription(&session_, kDefaultPeerRequestId),
             nullptr);
 }
@@ -547,8 +547,8 @@
             mock_stream_,
             Writev(ControlMessageOfType(MoqtMessageType::kSubscribeError), _));
         EXPECT_CALL(*track, RemoveObjectListener);
-        listener->OnSubscribeRejected(MoqtSubscribeErrorReason(
-            RequestErrorCode::kInternalError, "Test error"));
+        listener->OnSubscribeRejected(
+            MoqtErrorPair(RequestErrorCode::kInternalError, "Test error"));
       });
   stream_input->OnSubscribeMessage(request);
   EXPECT_EQ(MoqtSessionPeer::GetSubscription(&session_, kDefaultPeerRequestId),
@@ -745,7 +745,7 @@
   };
   EXPECT_CALL(remote_track_visitor_, OnReply)
       .WillOnce([&](const FullTrackName& ftn,
-                    std::variant<SubscribeOkData, MoqtRequestError> response) {
+                    std::variant<SubscribeOkData, MoqtErrorPair> response) {
         EXPECT_EQ(ftn, FullTrackName("foo", "bar"));
         EXPECT_TRUE(std::holds_alternative<SubscribeOkData>(response));
       });
@@ -780,7 +780,7 @@
   };
   EXPECT_CALL(remote_track_visitor_, OnReply)
       .WillOnce([&](const FullTrackName& ftn,
-                    std::variant<SubscribeOkData, MoqtRequestError> response) {
+                    std::variant<SubscribeOkData, MoqtErrorPair> response) {
         EXPECT_EQ(ftn, FullTrackName("foo", "bar"));
         EXPECT_TRUE(std::holds_alternative<SubscribeOkData>(response));
       });
@@ -918,10 +918,10 @@
   };
   EXPECT_CALL(remote_track_visitor_, OnReply)
       .WillOnce([&](const FullTrackName& ftn,
-                    std::variant<SubscribeOkData, MoqtRequestError> response) {
+                    std::variant<SubscribeOkData, MoqtErrorPair> response) {
         EXPECT_EQ(ftn, FullTrackName("foo", "bar"));
-        EXPECT_TRUE(std::holds_alternative<MoqtRequestError>(response) &&
-                    std::get<MoqtRequestError>(response).reason_phrase ==
+        EXPECT_TRUE(std::holds_alternative<MoqtErrorPair>(response) &&
+                    std::get<MoqtErrorPair>(response).reason_phrase ==
                         "deadbeef");
       });
   stream_input->OnSubscribeErrorMessage(error);
@@ -1022,7 +1022,7 @@
       track_namespace,
       *parameters,
   };
-  MoqtRequestError error = {
+  MoqtErrorPair error = {
       RequestErrorCode::kNotSupported,
       "deadbeef",
   };
@@ -2814,7 +2814,7 @@
                    std::optional<VersionSpecificParameters>,
                    MoqtResponseCallback callback) {
         std::move(callback)(
-            MoqtSubscribeErrorReason{RequestErrorCode::kUnauthorized, "foo"});
+            MoqtErrorPair{RequestErrorCode::kUnauthorized, "foo"});
       });
   EXPECT_CALL(
       control_stream,
@@ -3492,7 +3492,7 @@
   session_.PublishNamespace(
       TrackNamespace{"foo"},
       +[](TrackNamespace /*track_namespace*/,
-          std::optional<MoqtRequestError> /*error*/) {},
+          std::optional<MoqtErrorPair> /*error*/) {},
       VersionSpecificParameters());
   EXPECT_FALSE(session_.Fetch(
       FullTrackName{TrackNamespace("foo"), "bar"},
@@ -3558,7 +3558,7 @@
   session_.PublishNamespace(
       TrackNamespace{"foo"},
       +[](TrackNamespace /*track_namespace*/,
-          std::optional<MoqtRequestError> /*error*/) {},
+          std::optional<MoqtErrorPair> /*error*/) {},
       VersionSpecificParameters());
   EXPECT_FALSE(session_.Fetch(
       FullTrackName(TrackNamespace("foo"), "bar"),
@@ -3953,8 +3953,8 @@
             Writev(ControlMessageOfType(MoqtMessageType::kTrackStatusError),
                    _));
         EXPECT_CALL(*track, RemoveObjectListener);
-        listener->OnSubscribeRejected(MoqtSubscribeErrorReason(
-            RequestErrorCode::kInternalError, "Test error"));
+        listener->OnSubscribeRejected(
+            MoqtErrorPair(RequestErrorCode::kInternalError, "Test error"));
         executed_AddObjectListener = true;
       });
   stream_input->OnTrackStatusMessage(track_status);
@@ -3978,7 +3978,7 @@
       Writev(ControlMessageOfType(MoqtMessageType::kTrackStatusError), _));
   EXPECT_CALL(*track, RemoveObjectListener(listener));
   listener->OnSubscribeRejected(
-      MoqtSubscribeErrorReason(RequestErrorCode::kInternalError, "Test error"));
+      MoqtErrorPair(RequestErrorCode::kInternalError, "Test error"));
 }
 
 TEST_F(MoqtSessionTest, FinReportedToVisitor) {
@@ -3998,7 +3998,7 @@
   };
   EXPECT_CALL(remote_track_visitor_, OnReply)
       .WillOnce([&](const FullTrackName& ftn,
-                    std::variant<SubscribeOkData, MoqtRequestError> response) {
+                    std::variant<SubscribeOkData, MoqtErrorPair> response) {
         EXPECT_EQ(ftn, FullTrackName("foo", "bar"));
         EXPECT_TRUE(std::holds_alternative<SubscribeOkData>(response));
       });
@@ -4043,7 +4043,7 @@
   };
   EXPECT_CALL(remote_track_visitor_, OnReply)
       .WillOnce([&](const FullTrackName& ftn,
-                    std::variant<SubscribeOkData, MoqtRequestError> response) {
+                    std::variant<SubscribeOkData, MoqtErrorPair> response) {
         EXPECT_EQ(ftn, FullTrackName("foo", "bar"));
         EXPECT_TRUE(std::holds_alternative<SubscribeOkData>(response));
       });
diff --git a/quiche/quic/moqt/relay_namespace_tree.h b/quiche/quic/moqt/relay_namespace_tree.h
index bdee98e..e755bd0 100644
--- a/quiche/quic/moqt/relay_namespace_tree.h
+++ b/quiche/quic/moqt/relay_namespace_tree.h
@@ -157,7 +157,7 @@
     if (!node->publishers.empty()) {
       subscriber->PublishNamespace(
           track_namespace,
-          [](const TrackNamespace&, std::optional<MoqtRequestError>) {},
+          [](const TrackNamespace&, std::optional<MoqtErrorPair>) {},
           // TODO(martinduke): Add parameters.
           VersionSpecificParameters());
     }
@@ -189,7 +189,7 @@
         if (adding) {
           subscriber->PublishNamespace(
               track_namespace,
-              [](const TrackNamespace&, std::optional<MoqtRequestError>) {},
+              [](const TrackNamespace&, std::optional<MoqtErrorPair>) {},
               // TODO(martinduke): Add parameters.
               VersionSpecificParameters());
         } else {
diff --git a/quiche/quic/moqt/test_tools/moqt_mock_visitor.h b/quiche/quic/moqt/test_tools/moqt_mock_visitor.h
index 7ac2412..164a69e 100644
--- a/quiche/quic/moqt/test_tools/moqt_mock_visitor.h
+++ b/quiche/quic/moqt/test_tools/moqt_mock_visitor.h
@@ -188,7 +188,7 @@
  public:
   MOCK_METHOD(void, OnReply,
               (const FullTrackName& full_track_name,
-               (std::variant<SubscribeOkData, MoqtRequestError> response)),
+               (std::variant<SubscribeOkData, MoqtErrorPair> response)),
               (override));
   MOCK_METHOD(void, OnCanAckObjects, (MoqtObjectAckFunction ack_function),
               (override));
@@ -275,7 +275,7 @@
 class MockMoqtObjectListener : public MoqtObjectListener {
  public:
   MOCK_METHOD(void, OnSubscribeAccepted, (), (override));
-  MOCK_METHOD(void, OnSubscribeRejected, (MoqtRequestError), (override));
+  MOCK_METHOD(void, OnSubscribeRejected, (MoqtErrorPair), (override));
   MOCK_METHOD(void, OnNewObjectAvailable,
               (Location, uint64_t, MoqtPriority, MoqtForwardingPreference),
               (override));
diff --git a/quiche/quic/moqt/test_tools/moqt_simulator.cc b/quiche/quic/moqt/test_tools/moqt_simulator.cc
index 80fac10..7853ca0 100644
--- a/quiche/quic/moqt/test_tools/moqt_simulator.cc
+++ b/quiche/quic/moqt/test_tools/moqt_simulator.cc
@@ -196,10 +196,10 @@
 
 void ObjectReceiver::OnReply(
     const FullTrackName& full_track_name,
-    std::variant<SubscribeOkData, MoqtRequestError> response) {
+    std::variant<SubscribeOkData, MoqtErrorPair> response) {
   QUICHE_CHECK(full_track_name == TrackName());
-  if (std::holds_alternative<MoqtRequestError>(response)) {
-    MoqtRequestError error = std::get<MoqtRequestError>(response);
+  if (std::holds_alternative<MoqtErrorPair>(response)) {
+    MoqtErrorPair error = std::get<MoqtErrorPair>(response);
     QUICHE_CHECK(!error.reason_phrase.empty()) << error.reason_phrase;
   }
 }
diff --git a/quiche/quic/moqt/test_tools/moqt_simulator.h b/quiche/quic/moqt/test_tools/moqt_simulator.h
index af88bb7..d8e8b91 100644
--- a/quiche/quic/moqt/test_tools/moqt_simulator.h
+++ b/quiche/quic/moqt/test_tools/moqt_simulator.h
@@ -155,9 +155,8 @@
                           quic::QuicTimeDelta deadline)
       : clock_(clock), deadline_(deadline) {}
 
-  void OnReply(
-      const FullTrackName& full_track_name,
-      std::variant<SubscribeOkData, MoqtRequestError> response) override;
+  void OnReply(const FullTrackName& full_track_name,
+               std::variant<SubscribeOkData, MoqtErrorPair> response) override;
 
   void OnCanAckObjects(MoqtObjectAckFunction ack_function) override {
     object_ack_function_ = std::move(ack_function);
diff --git a/quiche/quic/moqt/tools/chat_client.cc b/quiche/quic/moqt/tools/chat_client.cc
index c355631..fee47e8 100644
--- a/quiche/quic/moqt/tools/chat_client.cc
+++ b/quiche/quic/moqt/tools/chat_client.cc
@@ -68,7 +68,7 @@
   std::cout << "PUBLISH_NAMESPACE for " << track_namespace.ToString() << "\n";
   if (!track_name.has_value()) {
     std::cout << "PUBLISH_NAMESPACE rejected, invalid namespace\n";
-    std::move(callback)(std::make_optional<MoqtPublishNamespaceErrorReason>(
+    std::move(callback)(std::make_optional<MoqtErrorPair>(
         RequestErrorCode::kTrackDoesNotExist, "Not a subscribed namespace"));
     return;
   }
@@ -185,7 +185,7 @@
 
 void ChatClient::RemoteTrackVisitor::OnReply(
     const FullTrackName& full_track_name,
-    std::variant<SubscribeOkData, MoqtRequestError> response) {
+    std::variant<SubscribeOkData, MoqtErrorPair> response) {
   auto it = client_->other_users_.find(full_track_name);
   if (it == client_->other_users_.end()) {
     std::cout << "Error: received reply for unknown user "
@@ -197,9 +197,9 @@
   if (std::holds_alternative<SubscribeOkData>(response)) {
     std::cout << "ACCEPTED\n";
   } else {
-    auto request_error = std::get<MoqtRequestError>(response);
+    auto request_error = std::get<MoqtErrorPair>(response);
     std::cout << "REJECTED, reason = "
-              << std::get<MoqtRequestError>(response).reason_phrase << "\n";
+              << std::get<MoqtErrorPair>(response).reason_phrase << "\n";
     client_->other_users_.erase(it);
   }
 }
@@ -247,7 +247,7 @@
   session_->set_publisher(&publisher_);
   MoqtOutgoingPublishNamespaceCallback publish_namespace_callback =
       [this](TrackNamespace track_namespace,
-             std::optional<MoqtPublishNamespaceErrorReason> reason) {
+             std::optional<MoqtErrorPair> reason) {
         if (reason.has_value()) {
           std::cout << "PUBLISH_NAMESPACE rejected, " << reason->reason_phrase
                     << "\n";
diff --git a/quiche/quic/moqt/tools/chat_client.h b/quiche/quic/moqt/tools/chat_client.h
index e71baca..a26a7a6 100644
--- a/quiche/quic/moqt/tools/chat_client.h
+++ b/quiche/quic/moqt/tools/chat_client.h
@@ -100,7 +100,7 @@
 
     void OnReply(
         const moqt::FullTrackName& full_track_name,
-        std::variant<SubscribeOkData, MoqtRequestError> response) override;
+        std::variant<SubscribeOkData, MoqtErrorPair> response) override;
 
     void OnCanAckObjects(MoqtObjectAckFunction) override {}
 
diff --git a/quiche/quic/moqt/tools/moqt_ingestion_server_bin.cc b/quiche/quic/moqt/tools/moqt_ingestion_server_bin.cc
index dd7757e..2a61655 100644
--- a/quiche/quic/moqt/tools/moqt_ingestion_server_bin.cc
+++ b/quiche/quic/moqt/tools/moqt_ingestion_server_bin.cc
@@ -129,9 +129,9 @@
           << "Rejected remote publish_namespace as it contained "
              "disallowed characters; namespace: "
           << track_namespace;
-      std::move(callback)(MoqtPublishNamespaceErrorReason{
-          RequestErrorCode::kInternalError,
-          "Track namespace contains disallowed characters"});
+      std::move(callback)(
+          MoqtErrorPair{RequestErrorCode::kInternalError,
+                        "Track namespace contains disallowed characters"});
       return;
     }
 
@@ -151,9 +151,8 @@
       subscribed_namespaces_.erase(it);
       QUICHE_LOG(ERROR) << "Failed to create directory " << directory_path
                         << "; " << status;
-      std::move(callback)(
-          MoqtPublishNamespaceErrorReason{RequestErrorCode::kInternalError,
-                                          "Failed to create output directory"});
+      std::move(callback)(MoqtErrorPair{RequestErrorCode::kInternalError,
+                                        "Failed to create output directory"});
       return;
     }
 
@@ -176,11 +175,11 @@
 
     void OnReply(
         const FullTrackName& full_track_name,
-        std::variant<SubscribeOkData, MoqtRequestError> response) override {
-      if (std::holds_alternative<MoqtRequestError>(response)) {
+        std::variant<SubscribeOkData, MoqtErrorPair> response) override {
+      if (std::holds_alternative<MoqtErrorPair>(response)) {
         QUICHE_LOG(ERROR) << "Failed to subscribe to the peer track "
                           << full_track_name << ": "
-                          << std::get<MoqtRequestError>(response).reason_phrase;
+                          << std::get<MoqtErrorPair>(response).reason_phrase;
       }
     }
 
diff --git a/quiche/quic/moqt/tools/moqt_relay_test.cc b/quiche/quic/moqt/tools/moqt_relay_test.cc
index ddb4928..e50b1f4 100644
--- a/quiche/quic/moqt/tools/moqt_relay_test.cc
+++ b/quiche/quic/moqt/tools/moqt_relay_test.cc
@@ -131,7 +131,7 @@
   // relay_ publishes a namespace, so upstream_ will route to relay_.
   relay_.client_session()->PublishNamespace(
       TrackNamespace({"foo"}),
-      [](TrackNamespace, std::optional<MoqtRequestError>) {},
+      [](TrackNamespace, std::optional<MoqtErrorPair>) {},
       VersionSpecificParameters());
   upstream_.RunOneEvent();
   // There is now an upstream session for "Foo".
@@ -187,7 +187,7 @@
   // Downstream publishes a namespace. It's stored in relay_ but upstream_
   // hasn't been notified.
   downstream_.client_session()->PublishNamespace(
-      foobar, [](TrackNamespace, std::optional<MoqtRequestError>) {},
+      foobar, [](TrackNamespace, std::optional<MoqtErrorPair>) {},
       VersionSpecificParameters());
   relay_.RunOneEvent();
   upstream_.RunOneEvent();
@@ -205,7 +205,7 @@
 
   // Downstream publishes another namespace. Everyone is notified.
   downstream_.client_session()->PublishNamespace(
-      foobaz, [](TrackNamespace, std::optional<MoqtRequestError>) {},
+      foobaz, [](TrackNamespace, std::optional<MoqtErrorPair>) {},
       VersionSpecificParameters());
   relay_.RunOneEvent();
   upstream_.RunOneEvent();