Call `OnSubscribeAccepted` when adding a listener to `MoqtRelayTrackPublisher`.

The second subscriber to a track was not receiving SUBSCRIBE_OK or objects because this was missing.

PiperOrigin-RevId: 827561493
diff --git a/quiche/quic/moqt/moqt_relay_track_publisher.cc b/quiche/quic/moqt/moqt_relay_track_publisher.cc
index 129d9cd..ef6802e 100644
--- a/quiche/quic/moqt/moqt_relay_track_publisher.cc
+++ b/quiche/quic/moqt/moqt_relay_track_publisher.cc
@@ -50,6 +50,7 @@
   next_location_ = ok_data.largest_location.has_value()
                        ? ok_data.largest_location->Next()
                        : Location(0, 0);
+  got_response_ = true;
   // TODO(martinduke): Handle parameters.
   for (MoqtObjectListener* listener : listeners_) {
     listener->OnSubscribeAccepted();
@@ -288,6 +289,9 @@
     session->SubscribeCurrentObject(track_, this, VersionSpecificParameters());
   }
   listeners_.insert(listener);
+  if (got_response_) {
+    listener->OnSubscribeAccepted();
+  }
 }
 
 void MoqtRelayTrackPublisher::RemoveObjectListener(
diff --git a/quiche/quic/moqt/moqt_relay_track_publisher.h b/quiche/quic/moqt/moqt_relay_track_publisher.h
index 12e74dc..0aa2c0c 100644
--- a/quiche/quic/moqt/moqt_relay_track_publisher.h
+++ b/quiche/quic/moqt/moqt_relay_track_publisher.h
@@ -138,6 +138,7 @@
   };
 
   bool is_closing_ = false;
+  bool got_response_ = false;
   const quic::QuicClock* clock_;
   FullTrackName track_;
   quiche::QuicheWeakPtr<MoqtSessionInterface> upstream_;
diff --git a/quiche/quic/moqt/moqt_relay_track_publisher_test.cc b/quiche/quic/moqt/moqt_relay_track_publisher_test.cc
index 360175f..aaf1d88 100644
--- a/quiche/quic/moqt/moqt_relay_track_publisher_test.cc
+++ b/quiche/quic/moqt/moqt_relay_track_publisher_test.cc
@@ -332,7 +332,15 @@
       .WillOnce(testing::Return(true));
   publisher_.AddObjectListener(&listener_);
   EXPECT_CALL(*session_, SubscribeCurrentObject).Times(0);
-  publisher_.AddObjectListener(&listener_);
+  EXPECT_CALL(listener_, OnSubscribeAccepted).Times(0);
+  MockMoqtObjectListener listener2;
+  publisher_.AddObjectListener(&listener2);
+  EXPECT_CALL(listener_, OnSubscribeAccepted);
+  EXPECT_CALL(listener2, OnSubscribeAccepted);
+  publisher_.OnReply(
+      kTrackName,
+      SubscribeOkData{quic::QuicTimeDelta::Infinite(),
+                      MoqtDeliveryOrder::kAscending, kLargestLocation});
 }
 
 TEST_F(MoqtRelayTrackPublisherTest, OnMalformedObject) {
@@ -369,6 +377,14 @@
   publisher_.OnStreamReset(kTrackName, DataStreamIndex{2, 0});
 }
 
+TEST_F(MoqtRelayTrackPublisherTest, SecondSubscribeAfterOk) {
+  SubscribeAndOk();
+  EXPECT_CALL(*session_, SubscribeCurrentObject).Times(0);
+  MockMoqtObjectListener listener2;
+  EXPECT_CALL(listener2, OnSubscribeAccepted);
+  publisher_.AddObjectListener(&listener2);
+}
+
 }  // namespace
 
 }  // namespace moqt::test