Rename ANNOUNCE* to PUBLISH_NAMESPACE* (draft-14)

PiperOrigin-RevId: 805409434
diff --git a/quiche/quic/moqt/moqt_framer.cc b/quiche/quic/moqt/moqt_framer.cc
index 2858390..4717cf2 100644
--- a/quiche/quic/moqt/moqt_framer.cc
+++ b/quiche/quic/moqt/moqt_framer.cc
@@ -531,46 +531,46 @@
       WireBoolean(message.forward), WireKeyValuePairList(parameters));
 }
 
-quiche::QuicheBuffer MoqtFramer::SerializeAnnounce(
-    const MoqtAnnounce& message) {
+quiche::QuicheBuffer MoqtFramer::SerializePublishNamespace(
+    const MoqtPublishNamespace& message) {
   KeyValuePairList parameters;
   VersionSpecificParametersToKeyValuePairList(message.parameters, parameters);
   if (!ValidateVersionSpecificParameters(parameters,
-                                         MoqtMessageType::kAnnounce)) {
+                                         MoqtMessageType::kPublishNamespace)) {
     QUICHE_BUG(QUICHE_BUG_invalid_parameters)
         << "Serializing invalid MoQT parameters";
     return quiche::QuicheBuffer();
   }
-  return SerializeControlMessage(MoqtMessageType::kAnnounce,
+  return SerializeControlMessage(MoqtMessageType::kPublishNamespace,
                                  WireVarInt62(message.request_id),
                                  WireTrackNamespace(message.track_namespace),
                                  WireKeyValuePairList(parameters));
 }
 
-quiche::QuicheBuffer MoqtFramer::SerializeAnnounceOk(
-    const MoqtAnnounceOk& message) {
-  return SerializeControlMessage(MoqtMessageType::kAnnounceOk,
+quiche::QuicheBuffer MoqtFramer::SerializePublishNamespaceOk(
+    const MoqtPublishNamespaceOk& message) {
+  return SerializeControlMessage(MoqtMessageType::kPublishNamespaceOk,
                                  WireVarInt62(message.request_id));
 }
 
-quiche::QuicheBuffer MoqtFramer::SerializeAnnounceError(
-    const MoqtAnnounceError& message) {
+quiche::QuicheBuffer MoqtFramer::SerializePublishNamespaceError(
+    const MoqtPublishNamespaceError& message) {
   return SerializeControlMessage(
-      MoqtMessageType::kAnnounceError, WireVarInt62(message.request_id),
+      MoqtMessageType::kPublishNamespaceError, WireVarInt62(message.request_id),
       WireVarInt62(message.error_code),
       WireStringWithVarInt62Length(message.error_reason));
 }
 
-quiche::QuicheBuffer MoqtFramer::SerializeUnannounce(
-    const MoqtUnannounce& message) {
-  return SerializeControlMessage(MoqtMessageType::kUnannounce,
+quiche::QuicheBuffer MoqtFramer::SerializePublishNamespaceDone(
+    const MoqtPublishNamespaceDone& message) {
+  return SerializeControlMessage(MoqtMessageType::kPublishNamespaceDone,
                                  WireTrackNamespace(message.track_namespace));
 }
 
-quiche::QuicheBuffer MoqtFramer::SerializeAnnounceCancel(
-    const MoqtAnnounceCancel& message) {
+quiche::QuicheBuffer MoqtFramer::SerializePublishNamespaceCancel(
+    const MoqtPublishNamespaceCancel& message) {
   return SerializeControlMessage(
-      MoqtMessageType::kAnnounceCancel,
+      MoqtMessageType::kPublishNamespaceCancel,
       WireTrackNamespace(message.track_namespace),
       WireVarInt62(message.error_code),
       WireStringWithVarInt62Length(message.error_reason));
diff --git a/quiche/quic/moqt/moqt_framer.h b/quiche/quic/moqt/moqt_framer.h
index 0168758..e5a4a52 100644
--- a/quiche/quic/moqt/moqt_framer.h
+++ b/quiche/quic/moqt/moqt_framer.h
@@ -56,12 +56,16 @@
   quiche::QuicheBuffer SerializePublishDone(const MoqtPublishDone& message);
   quiche::QuicheBuffer SerializeSubscribeUpdate(
       const MoqtSubscribeUpdate& message);
-  quiche::QuicheBuffer SerializeAnnounce(const MoqtAnnounce& message);
-  quiche::QuicheBuffer SerializeAnnounceOk(const MoqtAnnounceOk& message);
-  quiche::QuicheBuffer SerializeAnnounceError(const MoqtAnnounceError& message);
-  quiche::QuicheBuffer SerializeUnannounce(const MoqtUnannounce& message);
-  quiche::QuicheBuffer SerializeAnnounceCancel(
-      const MoqtAnnounceCancel& message);
+  quiche::QuicheBuffer SerializePublishNamespace(
+      const MoqtPublishNamespace& message);
+  quiche::QuicheBuffer SerializePublishNamespaceOk(
+      const MoqtPublishNamespaceOk& message);
+  quiche::QuicheBuffer SerializePublishNamespaceError(
+      const MoqtPublishNamespaceError& message);
+  quiche::QuicheBuffer SerializePublishNamespaceDone(
+      const MoqtPublishNamespaceDone& message);
+  quiche::QuicheBuffer SerializePublishNamespaceCancel(
+      const MoqtPublishNamespaceCancel& message);
   quiche::QuicheBuffer SerializeTrackStatus(const MoqtTrackStatus& message);
   quiche::QuicheBuffer SerializeTrackStatusOk(const MoqtTrackStatusOk& message);
   quiche::QuicheBuffer SerializeTrackStatusError(
diff --git a/quiche/quic/moqt/moqt_framer_test.cc b/quiche/quic/moqt/moqt_framer_test.cc
index a63dfb3..47c2fe2 100644
--- a/quiche/quic/moqt/moqt_framer_test.cc
+++ b/quiche/quic/moqt/moqt_framer_test.cc
@@ -39,11 +39,11 @@
       MoqtMessageType::kSubscribeError,
       MoqtMessageType::kUnsubscribe,
       MoqtMessageType::kPublishDone,
-      MoqtMessageType::kAnnounce,
-      MoqtMessageType::kAnnounceOk,
-      MoqtMessageType::kAnnounceError,
-      MoqtMessageType::kUnannounce,
-      MoqtMessageType::kAnnounceCancel,
+      MoqtMessageType::kPublishNamespace,
+      MoqtMessageType::kPublishNamespaceOk,
+      MoqtMessageType::kPublishNamespaceError,
+      MoqtMessageType::kPublishNamespaceDone,
+      MoqtMessageType::kPublishNamespaceCancel,
       MoqtMessageType::kTrackStatus,
       MoqtMessageType::kTrackStatusOk,
       MoqtMessageType::kTrackStatusError,
@@ -144,25 +144,25 @@
         auto data = std::get<MoqtPublishDone>(structured_data);
         return framer_.SerializePublishDone(data);
       }
-      case MoqtMessageType::kAnnounce: {
-        auto data = std::get<MoqtAnnounce>(structured_data);
-        return framer_.SerializeAnnounce(data);
+      case MoqtMessageType::kPublishNamespace: {
+        auto data = std::get<MoqtPublishNamespace>(structured_data);
+        return framer_.SerializePublishNamespace(data);
       }
-      case moqt::MoqtMessageType::kAnnounceOk: {
-        auto data = std::get<MoqtAnnounceOk>(structured_data);
-        return framer_.SerializeAnnounceOk(data);
+      case moqt::MoqtMessageType::kPublishNamespaceOk: {
+        auto data = std::get<MoqtPublishNamespaceOk>(structured_data);
+        return framer_.SerializePublishNamespaceOk(data);
       }
-      case moqt::MoqtMessageType::kAnnounceError: {
-        auto data = std::get<MoqtAnnounceError>(structured_data);
-        return framer_.SerializeAnnounceError(data);
+      case moqt::MoqtMessageType::kPublishNamespaceError: {
+        auto data = std::get<MoqtPublishNamespaceError>(structured_data);
+        return framer_.SerializePublishNamespaceError(data);
       }
-      case MoqtMessageType::kUnannounce: {
-        auto data = std::get<MoqtUnannounce>(structured_data);
-        return framer_.SerializeUnannounce(data);
+      case MoqtMessageType::kPublishNamespaceDone: {
+        auto data = std::get<MoqtPublishNamespaceDone>(structured_data);
+        return framer_.SerializePublishNamespaceDone(data);
       }
-      case moqt::MoqtMessageType::kAnnounceCancel: {
-        auto data = std::get<MoqtAnnounceCancel>(structured_data);
-        return framer_.SerializeAnnounceCancel(data);
+      case moqt::MoqtMessageType::kPublishNamespaceCancel: {
+        auto data = std::get<MoqtPublishNamespaceCancel>(structured_data);
+        return framer_.SerializePublishNamespaceCancel(data);
       }
       case moqt::MoqtMessageType::kTrackStatus: {
         auto data = std::get<MoqtTrackStatus>(structured_data);
diff --git a/quiche/quic/moqt/moqt_integration_test.cc b/quiche/quic/moqt/moqt_integration_test.cc
index 6eeb973..5c232f9 100644
--- a/quiche/quic/moqt/moqt_integration_test.cc
+++ b/quiche/quic/moqt/moqt_integration_test.cc
@@ -144,23 +144,24 @@
   EXPECT_TRUE(success);
 }
 
-TEST_F(MoqtIntegrationTest, AnnounceSuccessThenUnannounce) {
+TEST_F(MoqtIntegrationTest, PublishNamespaceSuccessThenPublishNamespaceDone) {
   EstablishSession();
   auto parameters = std::make_optional<VersionSpecificParameters>(
       AuthTokenType::kOutOfBand, "foo");
-  EXPECT_CALL(server_callbacks_.incoming_announce_callback,
+  EXPECT_CALL(server_callbacks_.incoming_publish_namespace_callback,
               Call(TrackNamespace{"foo"}, parameters))
       .WillOnce(Return(std::nullopt));
   testing::MockFunction<void(
       TrackNamespace track_namespace,
-      std::optional<MoqtAnnounceErrorReason> error_message)>
-      announce_callback;
-  client_->session()->Announce(TrackNamespace{"foo"},
-                               announce_callback.AsStdFunction(), *parameters);
+      std::optional<MoqtPublishNamespaceErrorReason> error_message)>
+      publish_namespace_callback;
+  client_->session()->PublishNamespace(
+      TrackNamespace{"foo"}, publish_namespace_callback.AsStdFunction(),
+      *parameters);
   bool matches = false;
-  EXPECT_CALL(announce_callback, Call(_, _))
+  EXPECT_CALL(publish_namespace_callback, Call(_, _))
       .WillOnce([&](TrackNamespace track_namespace,
-                    std::optional<MoqtAnnounceErrorReason> error) {
+                    std::optional<MoqtPublishNamespaceErrorReason> error) {
         matches = true;
         EXPECT_EQ(track_namespace, TrackNamespace{"foo"});
         EXPECT_FALSE(error.has_value());
@@ -169,7 +170,7 @@
       test_harness_.RunUntilWithDefaultTimeout([&]() { return matches; });
   EXPECT_TRUE(success);
   matches = false;
-  EXPECT_CALL(server_callbacks_.incoming_announce_callback, Call(_, _))
+  EXPECT_CALL(server_callbacks_.incoming_publish_namespace_callback, Call(_, _))
       .WillOnce([&](TrackNamespace name,
                     std::optional<VersionSpecificParameters> parameters) {
         matches = true;
@@ -177,28 +178,29 @@
         EXPECT_FALSE(parameters.has_value());
         return std::nullopt;
       });
-  client_->session()->Unannounce(TrackNamespace{"foo"});
+  client_->session()->PublishNamespaceDone(TrackNamespace{"foo"});
   success = test_harness_.RunUntilWithDefaultTimeout([&]() { return matches; });
   EXPECT_TRUE(success);
 }
 
-TEST_F(MoqtIntegrationTest, AnnounceSuccessThenCancel) {
+TEST_F(MoqtIntegrationTest, PublishNamespaceSuccessThenCancel) {
   EstablishSession();
   auto parameters = std::make_optional<VersionSpecificParameters>(
       AuthTokenType::kOutOfBand, "foo");
-  EXPECT_CALL(server_callbacks_.incoming_announce_callback,
+  EXPECT_CALL(server_callbacks_.incoming_publish_namespace_callback,
               Call(TrackNamespace{"foo"}, parameters))
       .WillOnce(Return(std::nullopt));
   testing::MockFunction<void(
       TrackNamespace track_namespace,
-      std::optional<MoqtAnnounceErrorReason> error_message)>
-      announce_callback;
-  client_->session()->Announce(TrackNamespace{"foo"},
-                               announce_callback.AsStdFunction(), *parameters);
+      std::optional<MoqtPublishNamespaceErrorReason> error_message)>
+      publish_namespace_callback;
+  client_->session()->PublishNamespace(
+      TrackNamespace{"foo"}, publish_namespace_callback.AsStdFunction(),
+      *parameters);
   bool matches = false;
-  EXPECT_CALL(announce_callback, Call(_, _))
+  EXPECT_CALL(publish_namespace_callback, Call(_, _))
       .WillOnce([&](TrackNamespace track_namespace,
-                    std::optional<MoqtAnnounceErrorReason> error) {
+                    std::optional<MoqtPublishNamespaceErrorReason> error) {
         matches = true;
         EXPECT_EQ(track_namespace, TrackNamespace{"foo"});
         EXPECT_FALSE(error.has_value());
@@ -207,40 +209,41 @@
       test_harness_.RunUntilWithDefaultTimeout([&]() { return matches; });
   EXPECT_TRUE(success);
   matches = false;
-  EXPECT_CALL(announce_callback, Call(_, _))
+  EXPECT_CALL(publish_namespace_callback, Call(_, _))
       .WillOnce([&](TrackNamespace track_namespace,
-                    std::optional<MoqtAnnounceErrorReason> error) {
+                    std::optional<MoqtPublishNamespaceErrorReason> error) {
         matches = true;
         EXPECT_EQ(track_namespace, TrackNamespace{"foo"});
         ASSERT_TRUE(error.has_value());
         EXPECT_EQ(error->error_code, RequestErrorCode::kInternalError);
         EXPECT_EQ(error->reason_phrase, "internal error");
       });
-  server_->session()->CancelAnnounce(TrackNamespace{"foo"},
-                                     RequestErrorCode::kInternalError,
-                                     "internal error");
+  server_->session()->CancelPublishNamespace(TrackNamespace{"foo"},
+                                             RequestErrorCode::kInternalError,
+                                             "internal error");
   success = test_harness_.RunUntilWithDefaultTimeout([&]() { return matches; });
   EXPECT_TRUE(success);
 }
 
-TEST_F(MoqtIntegrationTest, AnnounceSuccessSubscribeInResponse) {
+TEST_F(MoqtIntegrationTest, PublishNamespaceSuccessSubscribeInResponse) {
   EstablishSession();
   auto parameters = std::make_optional<VersionSpecificParameters>(
       AuthTokenType::kOutOfBand, "foo");
-  EXPECT_CALL(server_callbacks_.incoming_announce_callback,
+  EXPECT_CALL(server_callbacks_.incoming_publish_namespace_callback,
               Call(TrackNamespace{"foo"}, parameters))
       .WillOnce(Return(std::nullopt));
   MockSubscribeRemoteTrackVisitor server_visitor;
   testing::MockFunction<void(
       TrackNamespace track_namespace,
-      std::optional<MoqtAnnounceErrorReason> error_message)>
-      announce_callback;
-  client_->session()->Announce(TrackNamespace{"foo"},
-                               announce_callback.AsStdFunction(), *parameters);
+      std::optional<MoqtPublishNamespaceErrorReason> error_message)>
+      publish_namespace_callback;
+  client_->session()->PublishNamespace(
+      TrackNamespace{"foo"}, publish_namespace_callback.AsStdFunction(),
+      *parameters);
   bool matches = false;
-  EXPECT_CALL(announce_callback, Call(_, _))
+  EXPECT_CALL(publish_namespace_callback, Call(_, _))
       .WillOnce([&](TrackNamespace track_namespace,
-                    std::optional<MoqtAnnounceErrorReason> error) {
+                    std::optional<MoqtPublishNamespaceErrorReason> error) {
         EXPECT_EQ(track_namespace, TrackNamespace{"foo"});
         FullTrackName track_name(track_namespace, "/catalog");
         EXPECT_FALSE(error.has_value());
@@ -255,22 +258,23 @@
   EXPECT_TRUE(success);
 }
 
-TEST_F(MoqtIntegrationTest, AnnounceSuccessSendDataInResponse) {
+TEST_F(MoqtIntegrationTest, PublishNamespaceSuccessSendDataInResponse) {
   EstablishSession();
 
-  // Set up the server to subscribe to "data" track for the namespace announce
-  // it receives.
+  // Set up the server to subscribe to "data" track for the namespace
+  // publish_namespace it receives.
   auto parameters = std::make_optional<VersionSpecificParameters>(
       AuthTokenType::kOutOfBand, "foo");
   MockSubscribeRemoteTrackVisitor server_visitor;
-  EXPECT_CALL(server_callbacks_.incoming_announce_callback, Call(_, parameters))
+  EXPECT_CALL(server_callbacks_.incoming_publish_namespace_callback,
+              Call(_, parameters))
       .WillOnce([&](const TrackNamespace& track_namespace,
                     std::optional<VersionSpecificParameters> /*parameters*/) {
         FullTrackName track_name(track_namespace, "data");
         server_->session()->SubscribeAbsolute(
             track_name, /*start_group=*/0, /*start_object=*/0, &server_visitor,
             VersionSpecificParameters());
-        return std::optional<MoqtAnnounceErrorReason>();
+        return std::optional<MoqtPublishNamespaceErrorReason>();
       });
 
   auto queue = std::make_shared<MoqtOutgoingQueue>(
@@ -282,9 +286,9 @@
   EXPECT_CALL(server_visitor, OnReply(_, _, _)).WillOnce([&]() {
     received_subscribe_ok = true;
   });
-  client_->session()->Announce(
+  client_->session()->PublishNamespace(
       TrackNamespace{"test"},
-      [](TrackNamespace, std::optional<MoqtAnnounceErrorReason>) {},
+      [](TrackNamespace, std::optional<MoqtPublishNamespaceErrorReason>) {},
       *parameters);
   bool success = test_harness_.RunUntilWithDefaultTimeout(
       [&]() { return received_subscribe_ok; });
@@ -474,19 +478,19 @@
   EXPECT_EQ(expected, Location(99, 1));
 }
 
-TEST_F(MoqtIntegrationTest, AnnounceFailure) {
+TEST_F(MoqtIntegrationTest, PublishNamespaceFailure) {
   EstablishSession();
   testing::MockFunction<void(
       TrackNamespace track_namespace,
-      std::optional<MoqtAnnounceErrorReason> error_message)>
-      announce_callback;
-  client_->session()->Announce(TrackNamespace{"foo"},
-                               announce_callback.AsStdFunction(),
-                               VersionSpecificParameters());
+      std::optional<MoqtPublishNamespaceErrorReason> error_message)>
+      publish_namespace_callback;
+  client_->session()->PublishNamespace(
+      TrackNamespace{"foo"}, publish_namespace_callback.AsStdFunction(),
+      VersionSpecificParameters());
   bool matches = false;
-  EXPECT_CALL(announce_callback, Call(_, _))
+  EXPECT_CALL(publish_namespace_callback, Call(_, _))
       .WillOnce([&](TrackNamespace track_namespace,
-                    std::optional<MoqtAnnounceErrorReason> error) {
+                    std::optional<MoqtPublishNamespaceErrorReason> error) {
         matches = true;
         EXPECT_EQ(track_namespace, TrackNamespace{"foo"});
         ASSERT_TRUE(error.has_value());
diff --git a/quiche/quic/moqt/moqt_messages.cc b/quiche/quic/moqt/moqt_messages.cc
index c1f5dce..af3cba9 100644
--- a/quiche/quic/moqt/moqt_messages.cc
+++ b/quiche/quic/moqt/moqt_messages.cc
@@ -185,7 +185,7 @@
     MoqtMessageType::kSubscribe,
     MoqtMessageType::kSubscribeUpdate,
     MoqtMessageType::kSubscribeNamespace,
-    MoqtMessageType::kAnnounce,
+    MoqtMessageType::kPublishNamespace,
     MoqtMessageType::kTrackStatus,
     MoqtMessageType::kFetch};
 const std::array<MoqtMessageType, 7> kAllowsDeliveryTimeout = {
@@ -241,22 +241,22 @@
       return "SUBSCRIBE_DONE";
     case MoqtMessageType::kSubscribeUpdate:
       return "SUBSCRIBE_UPDATE";
-    case MoqtMessageType::kAnnounceCancel:
-      return "ANNOUNCE_CANCEL";
+    case MoqtMessageType::kPublishNamespaceCancel:
+      return "PUBLISH_NAMESPACE_CANCEL";
     case MoqtMessageType::kTrackStatus:
       return "TRACK_STATUS";
     case MoqtMessageType::kTrackStatusOk:
       return "TRACK_STATUS_OK";
     case MoqtMessageType::kTrackStatusError:
       return "TRACK_STATUS_ERROR";
-    case MoqtMessageType::kAnnounce:
-      return "ANNOUNCE";
-    case MoqtMessageType::kAnnounceOk:
-      return "ANNOUNCE_OK";
-    case MoqtMessageType::kAnnounceError:
-      return "ANNOUNCE_ERROR";
-    case MoqtMessageType::kUnannounce:
-      return "UNANNOUNCE";
+    case MoqtMessageType::kPublishNamespace:
+      return "PUBLISH_NAMESPACE";
+    case MoqtMessageType::kPublishNamespaceOk:
+      return "PUBLISH_NAMESPACE_OK";
+    case MoqtMessageType::kPublishNamespaceError:
+      return "PUBLISH_NAMESPACE_ERROR";
+    case MoqtMessageType::kPublishNamespaceDone:
+      return "PUBLISH_NAMESPACE_DONE";
     case MoqtMessageType::kGoAway:
       return "GOAWAY";
     case MoqtMessageType::kSubscribeNamespace:
diff --git a/quiche/quic/moqt/moqt_messages.h b/quiche/quic/moqt/moqt_messages.h
index e208d06..2ab3320 100644
--- a/quiche/quic/moqt/moqt_messages.h
+++ b/quiche/quic/moqt/moqt_messages.h
@@ -254,13 +254,13 @@
   kSubscribe = 0x03,
   kSubscribeOk = 0x04,
   kSubscribeError = 0x05,
-  kAnnounce = 0x06,
-  kAnnounceOk = 0x7,
-  kAnnounceError = 0x08,
-  kUnannounce = 0x09,
+  kPublishNamespace = 0x06,
+  kPublishNamespaceOk = 0x7,
+  kPublishNamespaceError = 0x08,
+  kPublishNamespaceDone = 0x09,
   kUnsubscribe = 0x0a,
   kPublishDone = 0x0b,
-  kAnnounceCancel = 0x0c,
+  kPublishNamespaceCancel = 0x0c,
   kTrackStatus = 0x0d,
   kTrackStatusOk = 0x0e,
   kTrackStatusError = 0x0f,
@@ -368,15 +368,16 @@
   bool operator==(const VersionSpecificParameters& other) const = default;
 };
 
-// Used for SUBSCRIBE_ERROR, ANNOUNCE_ERROR, ANNOUNCE_CANCEL,
+// Used for SUBSCRIBE_ERROR, PUBLISH_NAMESPACE_ERROR, PUBLISH_NAMESPACE_CANCEL,
 // SUBSCRIBE_NAMESPACE_ERROR, and FETCH_ERROR.
 enum class QUICHE_EXPORT RequestErrorCode : uint64_t {
   kInternalError = 0x0,
   kUnauthorized = 0x1,
   kTimeout = 0x2,
   kNotSupported = 0x3,
-  kTrackDoesNotExist = 0x4,        // SUBSCRIBE_ERROR and FETCH_ERROR only.
-  kUninterested = 0x4,             // ANNOUNCE_ERROR and ANNOUNCE_CANCEL only.
+  kTrackDoesNotExist = 0x4,  // SUBSCRIBE_ERROR and FETCH_ERROR only.
+  kUninterested =
+      0x4,  // PUBLISH_NAMESPACE_ERROR and PUBLISH_NAMESPACE_CANCEL only.
   kNamespacePrefixUnknown = 0x4,   // SUBSCRIBE_NAMESPACE_ERROR only.
   kInvalidRange = 0x5,             // SUBSCRIBE_ERROR and FETCH_ERROR only.
   kNamespacePrefixOverlap = 0x5,   // SUBSCRIBE_NAMESPACE_ERROR only.
@@ -394,7 +395,7 @@
 };
 // TODO(martinduke): These are deprecated. Replace them in the code.
 using MoqtSubscribeErrorReason = MoqtRequestError;
-using MoqtAnnounceErrorReason = MoqtSubscribeErrorReason;
+using MoqtPublishNamespaceErrorReason = MoqtSubscribeErrorReason;
 
 class TrackNamespace {
  public:
@@ -730,27 +731,27 @@
   VersionSpecificParameters parameters;
 };
 
-struct QUICHE_EXPORT MoqtAnnounce {
+struct QUICHE_EXPORT MoqtPublishNamespace {
   uint64_t request_id;
   TrackNamespace track_namespace;
   VersionSpecificParameters parameters;
 };
 
-struct QUICHE_EXPORT MoqtAnnounceOk {
+struct QUICHE_EXPORT MoqtPublishNamespaceOk {
   uint64_t request_id;
 };
 
-struct QUICHE_EXPORT MoqtAnnounceError {
+struct QUICHE_EXPORT MoqtPublishNamespaceError {
   uint64_t request_id;
   RequestErrorCode error_code;
   std::string error_reason;
 };
 
-struct QUICHE_EXPORT MoqtUnannounce {
+struct QUICHE_EXPORT MoqtPublishNamespaceDone {
   TrackNamespace track_namespace;
 };
 
-struct QUICHE_EXPORT MoqtAnnounceCancel {
+struct QUICHE_EXPORT MoqtPublishNamespaceCancel {
   TrackNamespace track_namespace;
   RequestErrorCode error_code;
   std::string error_reason;
diff --git a/quiche/quic/moqt/moqt_parser.cc b/quiche/quic/moqt/moqt_parser.cc
index afe7e5e..f40dfd2 100644
--- a/quiche/quic/moqt/moqt_parser.cc
+++ b/quiche/quic/moqt/moqt_parser.cc
@@ -238,20 +238,20 @@
     case MoqtMessageType::kSubscribeUpdate:
       bytes_read = ProcessSubscribeUpdate(reader);
       break;
-    case MoqtMessageType::kAnnounce:
-      bytes_read = ProcessAnnounce(reader);
+    case MoqtMessageType::kPublishNamespace:
+      bytes_read = ProcessPublishNamespace(reader);
       break;
-    case MoqtMessageType::kAnnounceOk:
-      bytes_read = ProcessAnnounceOk(reader);
+    case MoqtMessageType::kPublishNamespaceOk:
+      bytes_read = ProcessPublishNamespaceOk(reader);
       break;
-    case MoqtMessageType::kAnnounceError:
-      bytes_read = ProcessAnnounceError(reader);
+    case MoqtMessageType::kPublishNamespaceError:
+      bytes_read = ProcessPublishNamespaceError(reader);
       break;
-    case MoqtMessageType::kUnannounce:
-      bytes_read = ProcessUnannounce(reader);
+    case MoqtMessageType::kPublishNamespaceDone:
+      bytes_read = ProcessPublishNamespaceDone(reader);
       break;
-    case MoqtMessageType::kAnnounceCancel:
-      bytes_read = ProcessAnnounceCancel(reader);
+    case MoqtMessageType::kPublishNamespaceCancel:
+      bytes_read = ProcessPublishNamespaceCancel(reader);
       break;
     case MoqtMessageType::kTrackStatus:
       bytes_read = ProcessTrackStatus(reader);
@@ -581,10 +581,11 @@
   return reader.PreviouslyReadPayload().length();
 }
 
-size_t MoqtControlParser::ProcessAnnounce(quic::QuicDataReader& reader) {
-  MoqtAnnounce announce;
-  if (!reader.ReadVarInt62(&announce.request_id) ||
-      !ReadTrackNamespace(reader, announce.track_namespace)) {
+size_t MoqtControlParser::ProcessPublishNamespace(
+    quic::QuicDataReader& reader) {
+  MoqtPublishNamespace publish_namespace;
+  if (!reader.ReadVarInt62(&publish_namespace.request_id) ||
+      !ReadTrackNamespace(reader, publish_namespace.track_namespace)) {
     return 0;
   }
   KeyValuePairList parameters;
@@ -592,61 +593,67 @@
     return 0;
   }
   if (!ValidateVersionSpecificParameters(parameters,
-                                         MoqtMessageType::kAnnounce)) {
-    ParseError("ANNOUNCE contains invalid parameters");
+                                         MoqtMessageType::kPublishNamespace)) {
+    ParseError("PUBLISH_NAMESPACE contains invalid parameters");
     return 0;
   }
-  if (!KeyValuePairListToVersionSpecificParameters(parameters,
-                                                   announce.parameters)) {
+  if (!KeyValuePairListToVersionSpecificParameters(
+          parameters, publish_namespace.parameters)) {
     return 0;
   }
-  visitor_.OnAnnounceMessage(announce);
+  visitor_.OnPublishNamespaceMessage(publish_namespace);
   return reader.PreviouslyReadPayload().length();
 }
 
-size_t MoqtControlParser::ProcessAnnounceOk(quic::QuicDataReader& reader) {
-  MoqtAnnounceOk announce_ok;
-  if (!reader.ReadVarInt62(&announce_ok.request_id)) {
+size_t MoqtControlParser::ProcessPublishNamespaceOk(
+    quic::QuicDataReader& reader) {
+  MoqtPublishNamespaceOk publish_namespace_ok;
+  if (!reader.ReadVarInt62(&publish_namespace_ok.request_id)) {
     return 0;
   }
-  visitor_.OnAnnounceOkMessage(announce_ok);
+  visitor_.OnPublishNamespaceOkMessage(publish_namespace_ok);
   return reader.PreviouslyReadPayload().length();
 }
 
-size_t MoqtControlParser::ProcessAnnounceError(quic::QuicDataReader& reader) {
-  MoqtAnnounceError announce_error;
+size_t MoqtControlParser::ProcessPublishNamespaceError(
+    quic::QuicDataReader& reader) {
+  MoqtPublishNamespaceError publish_namespace_error;
   uint64_t error_code;
-  if (!reader.ReadVarInt62(&announce_error.request_id) ||
+  if (!reader.ReadVarInt62(&publish_namespace_error.request_id) ||
       !reader.ReadVarInt62(&error_code) ||
-      !reader.ReadStringVarInt62(announce_error.error_reason)) {
+      !reader.ReadStringVarInt62(publish_namespace_error.error_reason)) {
     return 0;
   }
-  announce_error.error_code = static_cast<RequestErrorCode>(error_code);
-  visitor_.OnAnnounceErrorMessage(announce_error);
+  publish_namespace_error.error_code =
+      static_cast<RequestErrorCode>(error_code);
+  visitor_.OnPublishNamespaceErrorMessage(publish_namespace_error);
   return reader.PreviouslyReadPayload().length();
 }
 
-size_t MoqtControlParser::ProcessUnannounce(quic::QuicDataReader& reader) {
-  MoqtUnannounce unannounce;
-  if (!ReadTrackNamespace(reader, unannounce.track_namespace)) {
+size_t MoqtControlParser::ProcessPublishNamespaceDone(
+    quic::QuicDataReader& reader) {
+  MoqtPublishNamespaceDone unpublish_namespace;
+  if (!ReadTrackNamespace(reader, unpublish_namespace.track_namespace)) {
     return 0;
   }
-  visitor_.OnUnannounceMessage(unannounce);
+  visitor_.OnPublishNamespaceDoneMessage(unpublish_namespace);
   return reader.PreviouslyReadPayload().length();
 }
 
-size_t MoqtControlParser::ProcessAnnounceCancel(quic::QuicDataReader& reader) {
-  MoqtAnnounceCancel announce_cancel;
-  if (!ReadTrackNamespace(reader, announce_cancel.track_namespace)) {
+size_t MoqtControlParser::ProcessPublishNamespaceCancel(
+    quic::QuicDataReader& reader) {
+  MoqtPublishNamespaceCancel publish_namespace_cancel;
+  if (!ReadTrackNamespace(reader, publish_namespace_cancel.track_namespace)) {
     return 0;
   }
   uint64_t error_code;
   if (!reader.ReadVarInt62(&error_code) ||
-      !reader.ReadStringVarInt62(announce_cancel.error_reason)) {
+      !reader.ReadStringVarInt62(publish_namespace_cancel.error_reason)) {
     return 0;
   }
-  announce_cancel.error_code = static_cast<RequestErrorCode>(error_code);
-  visitor_.OnAnnounceCancelMessage(announce_cancel);
+  publish_namespace_cancel.error_code =
+      static_cast<RequestErrorCode>(error_code);
+  visitor_.OnPublishNamespaceCancelMessage(publish_namespace_cancel);
   return reader.PreviouslyReadPayload().length();
 }
 
@@ -674,9 +681,9 @@
 
 size_t MoqtControlParser::ProcessSubscribeNamespace(
     quic::QuicDataReader& reader) {
-  MoqtSubscribeNamespace subscribe_announces;
-  if (!reader.ReadVarInt62(&subscribe_announces.request_id) ||
-      !ReadTrackNamespace(reader, subscribe_announces.track_namespace)) {
+  MoqtSubscribeNamespace subscribe_namespace;
+  if (!reader.ReadVarInt62(&subscribe_namespace.request_id) ||
+      !ReadTrackNamespace(reader, subscribe_namespace.track_namespace)) {
     return 0;
   }
   KeyValuePairList parameters;
@@ -689,10 +696,10 @@
     return 0;
   }
   if (!KeyValuePairListToVersionSpecificParameters(
-          parameters, subscribe_announces.parameters)) {
+          parameters, subscribe_namespace.parameters)) {
     return 0;
   }
-  visitor_.OnSubscribeNamespaceMessage(subscribe_announces);
+  visitor_.OnSubscribeNamespaceMessage(subscribe_namespace);
   return reader.PreviouslyReadPayload().length();
 }
 
diff --git a/quiche/quic/moqt/moqt_parser.h b/quiche/quic/moqt/moqt_parser.h
index e10beb9..8ee32cb 100644
--- a/quiche/quic/moqt/moqt_parser.h
+++ b/quiche/quic/moqt/moqt_parser.h
@@ -41,11 +41,16 @@
   virtual void OnUnsubscribeMessage(const MoqtUnsubscribe& message) = 0;
   virtual void OnPublishDoneMessage(const MoqtPublishDone& message) = 0;
   virtual void OnSubscribeUpdateMessage(const MoqtSubscribeUpdate& message) = 0;
-  virtual void OnAnnounceMessage(const MoqtAnnounce& message) = 0;
-  virtual void OnAnnounceOkMessage(const MoqtAnnounceOk& message) = 0;
-  virtual void OnAnnounceErrorMessage(const MoqtAnnounceError& message) = 0;
-  virtual void OnUnannounceMessage(const MoqtUnannounce& message) = 0;
-  virtual void OnAnnounceCancelMessage(const MoqtAnnounceCancel& message) = 0;
+  virtual void OnPublishNamespaceMessage(
+      const MoqtPublishNamespace& message) = 0;
+  virtual void OnPublishNamespaceOkMessage(
+      const MoqtPublishNamespaceOk& message) = 0;
+  virtual void OnPublishNamespaceErrorMessage(
+      const MoqtPublishNamespaceError& message) = 0;
+  virtual void OnPublishNamespaceDoneMessage(
+      const MoqtPublishNamespaceDone& message) = 0;
+  virtual void OnPublishNamespaceCancelMessage(
+      const MoqtPublishNamespaceCancel& message) = 0;
   virtual void OnTrackStatusMessage(const MoqtTrackStatus& message) = 0;
   virtual void OnTrackStatusOkMessage(const MoqtTrackStatusOk& message) = 0;
   virtual void OnTrackStatusErrorMessage(
@@ -128,11 +133,11 @@
   size_t ProcessUnsubscribe(quic::QuicDataReader& reader);
   size_t ProcessPublishDone(quic::QuicDataReader& reader);
   size_t ProcessSubscribeUpdate(quic::QuicDataReader& reader);
-  size_t ProcessAnnounce(quic::QuicDataReader& reader);
-  size_t ProcessAnnounceOk(quic::QuicDataReader& reader);
-  size_t ProcessAnnounceError(quic::QuicDataReader& reader);
-  size_t ProcessUnannounce(quic::QuicDataReader& reader);
-  size_t ProcessAnnounceCancel(quic::QuicDataReader& reader);
+  size_t ProcessPublishNamespace(quic::QuicDataReader& reader);
+  size_t ProcessPublishNamespaceOk(quic::QuicDataReader& reader);
+  size_t ProcessPublishNamespaceError(quic::QuicDataReader& reader);
+  size_t ProcessPublishNamespaceDone(quic::QuicDataReader& reader);
+  size_t ProcessPublishNamespaceCancel(quic::QuicDataReader& reader);
   size_t ProcessTrackStatus(quic::QuicDataReader& reader);
   size_t ProcessTrackStatusOk(quic::QuicDataReader& reader);
   size_t ProcessTrackStatusError(quic::QuicDataReader& reader);
diff --git a/quiche/quic/moqt/moqt_parser_test.cc b/quiche/quic/moqt/moqt_parser_test.cc
index eaee5c4..9b70469 100644
--- a/quiche/quic/moqt/moqt_parser_test.cc
+++ b/quiche/quic/moqt/moqt_parser_test.cc
@@ -38,14 +38,14 @@
     MoqtMessageType::kSubscribeUpdate,
     MoqtMessageType::kUnsubscribe,
     MoqtMessageType::kPublishDone,
-    MoqtMessageType::kAnnounceCancel,
     MoqtMessageType::kTrackStatus,
     MoqtMessageType::kTrackStatusOk,
     MoqtMessageType::kTrackStatusError,
-    MoqtMessageType::kAnnounce,
-    MoqtMessageType::kAnnounceOk,
-    MoqtMessageType::kAnnounceError,
-    MoqtMessageType::kUnannounce,
+    MoqtMessageType::kPublishNamespace,
+    MoqtMessageType::kPublishNamespaceOk,
+    MoqtMessageType::kPublishNamespaceError,
+    MoqtMessageType::kPublishNamespaceDone,
+    MoqtMessageType::kPublishNamespaceCancel,
     MoqtMessageType::kClientSetup,
     MoqtMessageType::kServerSetup,
     MoqtMessageType::kGoAway,
@@ -955,35 +955,38 @@
   EXPECT_EQ(visitor_.parsing_error_code_, MoqtError::kProtocolViolation);
 }
 
-TEST_F(MoqtMessageSpecificTest, AnnounceAuthorizationTokenTwice) {
+TEST_F(MoqtMessageSpecificTest, PublishNamespaceAuthorizationTokenTwice) {
   webtransport::test::InMemoryStream stream(/*stream_id=*/0);
   MoqtControlParser parser(kWebTrans, &stream, visitor_);
-  char announce[] = {
+  char publish_namespace[] = {
       0x06, 0x00, 0x15, 0x02, 0x01, 0x03, 0x66,
       0x6f, 0x6f,                                // track_namespace = "foo"
       0x02,                                      // 2 params
       0x03, 0x05, 0x03, 0x00, 0x62, 0x61, 0x72,  // authorization = "bar"
       0x03, 0x05, 0x03, 0x00, 0x62, 0x61, 0x72,  // authorization = "bar"
   };
-  stream.Receive(absl::string_view(announce, sizeof(announce)), false);
+  stream.Receive(
+      absl::string_view(publish_namespace, sizeof(publish_namespace)), false);
   parser.ReadAndDispatchMessages();
   EXPECT_EQ(visitor_.messages_received_, 1);
 }
 
-TEST_F(MoqtMessageSpecificTest, AnnounceHasDeliveryTimeout) {
+TEST_F(MoqtMessageSpecificTest, PublishNamespaceHasDeliveryTimeout) {
   webtransport::test::InMemoryStream stream(/*stream_id=*/0);
   MoqtControlParser parser(kWebTrans, &stream, visitor_);
-  char announce[] = {
+  char publish_namespace[] = {
       0x06, 0x00, 0x11, 0x02, 0x01, 0x03, 0x66,
       0x6f, 0x6f,                                // track_namespace = "foo"
       0x02,                                      // 2 params
       0x03, 0x05, 0x03, 0x00, 0x62, 0x61, 0x72,  // authorization_info = "bar"
       0x02, 0x67, 0x10,                          // delivery_timeout = 10000
   };
-  stream.Receive(absl::string_view(announce, sizeof(announce)), false);
+  stream.Receive(
+      absl::string_view(publish_namespace, sizeof(publish_namespace)), false);
   parser.ReadAndDispatchMessages();
   EXPECT_EQ(visitor_.messages_received_, 0);
-  EXPECT_EQ(visitor_.parsing_error_, "ANNOUNCE contains invalid parameters");
+  EXPECT_EQ(visitor_.parsing_error_,
+            "PUBLISH_NAMESPACE contains invalid parameters");
   EXPECT_EQ(visitor_.parsing_error_code_, MoqtError::kProtocolViolation);
 }
 
@@ -1477,22 +1480,25 @@
 }
 
 // All messages with TrackNamespace use ReadTrackNamespace too check this. Use
-// ANNOUNCE.
+// PUBLISH_NAMESPACE.
 TEST_F(MoqtMessageSpecificTest, NamespaceTooSmall) {
   webtransport::test::InMemoryStream stream(/*stream_id=*/0);
   MoqtControlParser parser(kRawQuic, &stream, visitor_);
-  char announce[7] = {
+  char publish_namespace[7] = {
       0x06, 0x00, 0x04, 0x02,  // request_id = 2
       0x01, 0x00,              // one empty namespace element
       0x00,                    // no parameters
   };
-  stream.Receive(absl::string_view(announce, sizeof(announce)), false);
+  stream.Receive(
+      absl::string_view(publish_namespace, sizeof(publish_namespace)), false);
   parser.ReadAndDispatchMessages();
   EXPECT_EQ(visitor_.messages_received_, 1);
   EXPECT_EQ(visitor_.parsing_error_, std::nullopt);
-  --announce[2];  // Remove one element.
-  --announce[4];
-  stream.Receive(absl::string_view(announce, sizeof(announce) - 1), false);
+  --publish_namespace[2];  // Remove one element.
+  --publish_namespace[4];
+  stream.Receive(
+      absl::string_view(publish_namespace, sizeof(publish_namespace) - 1),
+      false);
   parser.ReadAndDispatchMessages();
   EXPECT_EQ(visitor_.messages_received_, 1);
   EXPECT_EQ(visitor_.parsing_error_, "Invalid number of namespace elements");
@@ -1501,18 +1507,21 @@
 TEST_F(MoqtMessageSpecificTest, NamespaceTooLarge) {
   webtransport::test::InMemoryStream stream(/*stream_id=*/0);
   MoqtControlParser parser(kRawQuic, &stream, visitor_);
-  char announce[39] = {
+  char publish_namespace[39] = {
       0x06, 0x00, 0x23, 0x02,  // type, length = 35, request_id = 2
       0x20,                    // 32 namespace elements. This is the maximum.
   };
   // 32 empty namespace elements + no parameters.
-  stream.Receive(absl::string_view(announce, sizeof(announce) - 1), false);
+  stream.Receive(
+      absl::string_view(publish_namespace, sizeof(publish_namespace) - 1),
+      false);
   parser.ReadAndDispatchMessages();
   EXPECT_EQ(visitor_.messages_received_, 1);
   EXPECT_EQ(visitor_.parsing_error_, std::nullopt);
-  ++announce[2];  // Add one element.
-  ++announce[4];
-  stream.Receive(absl::string_view(announce, sizeof(announce)), false);
+  ++publish_namespace[2];  // Add one element.
+  ++publish_namespace[4];
+  stream.Receive(
+      absl::string_view(publish_namespace, sizeof(publish_namespace)), false);
   parser.ReadAndDispatchMessages();
   EXPECT_EQ(visitor_.messages_received_, 1);
   EXPECT_EQ(visitor_.parsing_error_, "Invalid number of namespace elements");
diff --git a/quiche/quic/moqt/moqt_session.cc b/quiche/quic/moqt/moqt_session.cc
index 783a0cf..e0dbc62 100644
--- a/quiche/quic/moqt/moqt_session.cc
+++ b/quiche/quic/moqt/moqt_session.cc
@@ -277,7 +277,7 @@
                     << peer_max_request_id_;
     return false;
   }
-  if (outgoing_subscribe_announces_.contains(track_namespace)) {
+  if (outgoing_subscribe_namespaces_.contains(track_namespace)) {
     std::move(callback)(
         track_namespace, RequestErrorCode::kInternalError,
         "SUBSCRIBE_NAMESPACE already outstanding for namespace");
@@ -291,15 +291,15 @@
   SendControlMessage(framer_.SerializeSubscribeNamespace(message));
   QUIC_DLOG(INFO) << ENDPOINT << "Sent SUBSCRIBE_NAMESPACE message for "
                   << message.track_namespace;
-  pending_outgoing_subscribe_announces_[message.request_id] =
+  pending_outgoing_subscribe_namespaces_[message.request_id] =
       PendingSubscribeNamespaceData{track_namespace, std::move(callback)};
-  outgoing_subscribe_announces_.emplace(track_namespace);
+  outgoing_subscribe_namespaces_.emplace(track_namespace);
   return true;
 }
 
 bool MoqtSession::UnsubscribeNamespace(TrackNamespace track_namespace) {
   QUICHE_DCHECK(track_namespace.IsValid());
-  if (!outgoing_subscribe_announces_.contains(track_namespace)) {
+  if (!outgoing_subscribe_namespaces_.contains(track_namespace)) {
     return false;
   }
   MoqtUnsubscribeNamespace message;
@@ -307,19 +307,21 @@
   SendControlMessage(framer_.SerializeUnsubscribeNamespace(message));
   QUIC_DLOG(INFO) << ENDPOINT << "Sent UNSUBSCRIBE_NAMESPACE message for "
                   << message.track_namespace;
-  outgoing_subscribe_announces_.erase(track_namespace);
+  outgoing_subscribe_namespaces_.erase(track_namespace);
   return true;
 }
 
-void MoqtSession::Announce(TrackNamespace track_namespace,
-                           MoqtOutgoingAnnounceCallback announce_callback,
-                           VersionSpecificParameters parameters) {
+void MoqtSession::PublishNamespace(
+    TrackNamespace track_namespace,
+    MoqtOutgoingPublishNamespaceCallback publish_namespace_callback,
+    VersionSpecificParameters parameters) {
   QUICHE_DCHECK(track_namespace.IsValid());
-  if (outgoing_announces_.contains(track_namespace)) {
-    std::move(announce_callback)(
+  if (outgoing_publish_namespaces_.contains(track_namespace)) {
+    std::move(publish_namespace_callback)(
         track_namespace,
-        MoqtAnnounceErrorReason{RequestErrorCode::kInternalError,
-                                "ANNOUNCE already outstanding for namespace"});
+        MoqtPublishNamespaceErrorReason{
+            RequestErrorCode::kInternalError,
+            "PUBLISH_NAMESPACE already outstanding for namespace"});
     return;
   }
   if (next_request_id_ >= peer_max_request_id_) {
@@ -330,51 +332,54 @@
       SendControlMessage(framer_.SerializeRequestsBlocked(requests_blocked));
       last_requests_blocked_sent_ = peer_max_request_id_;
     }
-    QUIC_DLOG(INFO) << ENDPOINT << "Tried to send ANNOUNCE with ID "
+    QUIC_DLOG(INFO) << ENDPOINT << "Tried to send PUBLISH_NAMESPACE with ID "
                     << next_request_id_
                     << " which is greater than the maximum ID "
                     << peer_max_request_id_;
     return;
   }
   if (received_goaway_ || sent_goaway_) {
-    QUIC_DLOG(INFO) << ENDPOINT << "Tried to send ANNOUNCE after GOAWAY";
+    QUIC_DLOG(INFO) << ENDPOINT
+                    << "Tried to send PUBLISH_NAMESPACE after GOAWAY";
     return;
   }
-  MoqtAnnounce message;
+  MoqtPublishNamespace message;
   message.request_id = next_request_id_;
   next_request_id_ += 2;
   message.track_namespace = track_namespace;
   message.parameters = parameters;
-  SendControlMessage(framer_.SerializeAnnounce(message));
-  QUIC_DLOG(INFO) << ENDPOINT << "Sent ANNOUNCE message for "
+  SendControlMessage(framer_.SerializePublishNamespace(message));
+  QUIC_DLOG(INFO) << ENDPOINT << "Sent PUBLISH_NAMESPACE message for "
                   << message.track_namespace;
-  pending_outgoing_announces_[message.request_id] = track_namespace;
-  outgoing_announces_[track_namespace] = std::move(announce_callback);
+  pending_outgoing_publish_namespaces_[message.request_id] = track_namespace;
+  outgoing_publish_namespaces_[track_namespace] =
+      std::move(publish_namespace_callback);
 }
 
-bool MoqtSession::Unannounce(TrackNamespace track_namespace) {
+bool MoqtSession::PublishNamespaceDone(TrackNamespace track_namespace) {
   QUICHE_DCHECK(track_namespace.IsValid());
-  auto it = outgoing_announces_.find(track_namespace);
-  if (it == outgoing_announces_.end()) {
-    return false;  // Could have been destroyed by ANNOUNCE_CANCEL.
+  auto it = outgoing_publish_namespaces_.find(track_namespace);
+  if (it == outgoing_publish_namespaces_.end()) {
+    return false;  // Could have been destroyed by PUBLISH_NAMESPACE_CANCEL.
   }
-  MoqtUnannounce message;
+  MoqtPublishNamespaceDone message;
   message.track_namespace = track_namespace;
-  SendControlMessage(framer_.SerializeUnannounce(message));
-  QUIC_DLOG(INFO) << ENDPOINT << "Sent UNANNOUNCE message for "
+  SendControlMessage(framer_.SerializePublishNamespaceDone(message));
+  QUIC_DLOG(INFO) << ENDPOINT << "Sent PUBLISH_NAMESPACE_DONE message for "
                   << message.track_namespace;
-  outgoing_announces_.erase(it);
+  outgoing_publish_namespaces_.erase(it);
   return true;
 }
 
-void MoqtSession::CancelAnnounce(TrackNamespace track_namespace,
-                                 RequestErrorCode code,
-                                 absl::string_view reason) {
+void MoqtSession::CancelPublishNamespace(TrackNamespace track_namespace,
+                                         RequestErrorCode code,
+                                         absl::string_view reason) {
   QUICHE_DCHECK(track_namespace.IsValid());
-  MoqtAnnounceCancel message{track_namespace, code, std::string(reason)};
+  MoqtPublishNamespaceCancel message{track_namespace, code,
+                                     std::string(reason)};
 
-  SendControlMessage(framer_.SerializeAnnounceCancel(message));
-  QUIC_DLOG(INFO) << ENDPOINT << "Sent ANNOUNCE_CANCEL message for "
+  SendControlMessage(framer_.SerializePublishNamespaceCancel(message));
+  QUIC_DLOG(INFO) << ENDPOINT << "Sent PUBLISH_NAMESPACE_CANCEL message for "
                   << message.track_namespace << " with reason " << reason;
 }
 
@@ -1193,98 +1198,104 @@
   it->second->set_delivery_timeout(message.parameters.delivery_timeout);
 }
 
-void MoqtSession::ControlStream::OnAnnounceMessage(
-    const MoqtAnnounce& message) {
+void MoqtSession::ControlStream::OnPublishNamespaceMessage(
+    const MoqtPublishNamespace& message) {
   if (!session_->ValidateRequestId(message.request_id)) {
     return;
   }
   if (session_->sent_goaway_) {
-    QUIC_DLOG(INFO) << ENDPOINT << "Received an ANNOUNCE after GOAWAY";
-    MoqtAnnounceError error;
+    QUIC_DLOG(INFO) << ENDPOINT << "Received a PUBLISH_NAMESPACE after GOAWAY";
+    MoqtPublishNamespaceError error;
     error.request_id = message.request_id;
     error.error_code = RequestErrorCode::kUnauthorized;
-    error.error_reason = "ANNOUNCE after GOAWAY";
-    SendOrBufferMessage(session_->framer_.SerializeAnnounceError(error));
+    error.error_reason = "PUBLISH_NAMESPACE after GOAWAY";
+    SendOrBufferMessage(
+        session_->framer_.SerializePublishNamespaceError(error));
     return;
   }
-  std::optional<MoqtAnnounceErrorReason> error =
-      session_->callbacks_.incoming_announce_callback(message.track_namespace,
-                                                      message.parameters);
+  std::optional<MoqtPublishNamespaceErrorReason> error =
+      session_->callbacks_.incoming_publish_namespace_callback(
+          message.track_namespace, message.parameters);
   if (error.has_value()) {
-    MoqtAnnounceError reply;
+    MoqtPublishNamespaceError reply;
     reply.request_id = message.request_id;
     reply.error_code = error->error_code;
     reply.error_reason = error->reason_phrase;
-    SendOrBufferMessage(session_->framer_.SerializeAnnounceError(reply));
+    SendOrBufferMessage(
+        session_->framer_.SerializePublishNamespaceError(reply));
     return;
   }
-  MoqtAnnounceOk ok;
+  MoqtPublishNamespaceOk ok;
   ok.request_id = message.request_id;
-  SendOrBufferMessage(session_->framer_.SerializeAnnounceOk(ok));
+  SendOrBufferMessage(session_->framer_.SerializePublishNamespaceOk(ok));
 }
 
-// Do not enforce that there is only one of OK or ERROR per ANNOUNCE. Upon
-// ERROR, we immediately destroy the state.
-void MoqtSession::ControlStream::OnAnnounceOkMessage(
-    const MoqtAnnounceOk& message) {
-  auto it = session_->pending_outgoing_announces_.find(message.request_id);
-  if (it == session_->pending_outgoing_announces_.end()) {
+// Do not enforce that there is only one of OK or ERROR per PUBLISH_NAMESPACE.
+// Upon ERROR, we immediately destroy the state.
+void MoqtSession::ControlStream::OnPublishNamespaceOkMessage(
+    const MoqtPublishNamespaceOk& message) {
+  auto it =
+      session_->pending_outgoing_publish_namespaces_.find(message.request_id);
+  if (it == session_->pending_outgoing_publish_namespaces_.end()) {
     session_->Error(MoqtError::kProtocolViolation,
-                    "Received ANNOUNCE_OK for unknown request_id");
+                    "Received PUBLISH_NAMESPACE_OK for unknown request_id");
     return;
   }
   TrackNamespace track_namespace = it->second;
-  session_->pending_outgoing_announces_.erase(it);
-  auto callback_it = session_->outgoing_announces_.find(track_namespace);
-  if (callback_it == session_->outgoing_announces_.end()) {
-    // It might have already been destroyed due to UNANNOUNCE.
+  session_->pending_outgoing_publish_namespaces_.erase(it);
+  auto callback_it =
+      session_->outgoing_publish_namespaces_.find(track_namespace);
+  if (callback_it == session_->outgoing_publish_namespaces_.end()) {
+    // It might have already been destroyed due to PUBLISH_NAMESPACE_DONE.
     return;
   }
   std::move(callback_it->second)(track_namespace, std::nullopt);
 }
 
-void MoqtSession::ControlStream::OnAnnounceErrorMessage(
-    const MoqtAnnounceError& message) {
-  auto it = session_->pending_outgoing_announces_.find(message.request_id);
-  if (it == session_->pending_outgoing_announces_.end()) {
+void MoqtSession::ControlStream::OnPublishNamespaceErrorMessage(
+    const MoqtPublishNamespaceError& message) {
+  auto it =
+      session_->pending_outgoing_publish_namespaces_.find(message.request_id);
+  if (it == session_->pending_outgoing_publish_namespaces_.end()) {
     session_->Error(MoqtError::kProtocolViolation,
-                    "Received ANNOUNCE_ERROR for unknown request_id");
+                    "Received PUBLISH_NAMESPACE_ERROR for unknown request_id");
     return;
   }
   TrackNamespace track_namespace = it->second;
-  session_->pending_outgoing_announces_.erase(it);
-  auto it2 = session_->outgoing_announces_.find(track_namespace);
-  if (it2 == session_->outgoing_announces_.end()) {
-    return;  // State might have been destroyed due to UNANNOUNCE.
+  session_->pending_outgoing_publish_namespaces_.erase(it);
+  auto it2 = session_->outgoing_publish_namespaces_.find(track_namespace);
+  if (it2 == session_->outgoing_publish_namespaces_.end()) {
+    return;  // State might have been destroyed due to PUBLISH_NAMESPACE_DONE.
   }
   std::move(it2->second)(
       track_namespace,
-      MoqtAnnounceErrorReason{message.error_code,
-                              std::string(message.error_reason)});
-  session_->outgoing_announces_.erase(it2);
+      MoqtPublishNamespaceErrorReason{message.error_code,
+                                      std::string(message.error_reason)});
+  session_->outgoing_publish_namespaces_.erase(it2);
 }
 
-void MoqtSession::ControlStream::OnUnannounceMessage(
-    const MoqtUnannounce& message) {
-  session_->callbacks_.incoming_announce_callback(message.track_namespace,
-                                                  std::nullopt);
+void MoqtSession::ControlStream::OnPublishNamespaceDoneMessage(
+    const MoqtPublishNamespaceDone& message) {
+  session_->callbacks_.incoming_publish_namespace_callback(
+      message.track_namespace, std::nullopt);
 }
 
-void MoqtSession::ControlStream::OnAnnounceCancelMessage(
-    const MoqtAnnounceCancel& message) {
+void MoqtSession::ControlStream::OnPublishNamespaceCancelMessage(
+    const MoqtPublishNamespaceCancel& message) {
   // The spec currently says that if a later SUBSCRIBE arrives for this
   // namespace, that SHOULD be a session error. I'm hoping that via Issue #557,
   // this will go away. Regardless, a SHOULD will not compel the session to keep
   // state forever, so there is no support for this requirement.
-  auto it = session_->outgoing_announces_.find(message.track_namespace);
-  if (it == session_->outgoing_announces_.end()) {
-    return;  // State might have been destroyed due to UNANNOUNCE.
+  auto it =
+      session_->outgoing_publish_namespaces_.find(message.track_namespace);
+  if (it == session_->outgoing_publish_namespaces_.end()) {
+    return;  // State might have been destroyed due to PUBLISH_NAMESPACE_DONE.
   }
   std::move(it->second)(
       message.track_namespace,
-      MoqtAnnounceErrorReason{message.error_code,
-                              std::string(message.error_reason)});
-  session_->outgoing_announces_.erase(it);
+      MoqtPublishNamespaceErrorReason{message.error_code,
+                                      std::string(message.error_reason)});
+  session_->outgoing_publish_namespaces_.erase(it);
 }
 
 void MoqtSession::ControlStream::OnTrackStatusMessage(
@@ -1355,7 +1366,7 @@
         session_->framer_.SerializeSubscribeNamespaceError(error));
     return;
   }
-  if (!session_->incoming_subscribe_announces_.AddNamespace(
+  if (!session_->incoming_subscribe_namespace_.AddNamespace(
           message.track_namespace)) {
     QUIC_DLOG(INFO) << ENDPOINT << "Received a SUBSCRIBE_NAMESPACE for "
                     << message.track_namespace
@@ -1369,7 +1380,7 @@
     return;
   }
   std::optional<MoqtSubscribeErrorReason> result =
-      session_->callbacks_.incoming_subscribe_announces_callback(
+      session_->callbacks_.incoming_subscribe_namespace_callback(
           message.track_namespace, message.parameters);
   if (result.has_value()) {
     MoqtSubscribeNamespaceError error;
@@ -1378,7 +1389,7 @@
     error.error_reason = result->reason_phrase;
     SendOrBufferMessage(
         session_->framer_.SerializeSubscribeNamespaceError(error));
-    session_->incoming_subscribe_announces_.RemoveNamespace(
+    session_->incoming_subscribe_namespace_.RemoveNamespace(
         message.track_namespace);
     return;
   }
@@ -1390,21 +1401,21 @@
 void MoqtSession::ControlStream::OnSubscribeNamespaceOkMessage(
     const MoqtSubscribeNamespaceOk& message) {
   auto it =
-      session_->pending_outgoing_subscribe_announces_.find(message.request_id);
-  if (it == session_->pending_outgoing_subscribe_announces_.end()) {
+      session_->pending_outgoing_subscribe_namespaces_.find(message.request_id);
+  if (it == session_->pending_outgoing_subscribe_namespaces_.end()) {
     session_->Error(MoqtError::kProtocolViolation,
                     "Received SUBSCRIBE_NAMESPACE_OK for unknown request_id");
     return;  // UNSUBSCRIBE_NAMESPACE may already have deleted the entry.
   }
   std::move(it->second.callback)(it->second.track_namespace, std::nullopt, "");
-  session_->pending_outgoing_subscribe_announces_.erase(it);
+  session_->pending_outgoing_subscribe_namespaces_.erase(it);
 }
 
 void MoqtSession::ControlStream::OnSubscribeNamespaceErrorMessage(
     const MoqtSubscribeNamespaceError& message) {
   auto it =
-      session_->pending_outgoing_subscribe_announces_.find(message.request_id);
-  if (it == session_->pending_outgoing_subscribe_announces_.end()) {
+      session_->pending_outgoing_subscribe_namespaces_.find(message.request_id);
+  if (it == session_->pending_outgoing_subscribe_namespaces_.end()) {
     session_->Error(
         MoqtError::kProtocolViolation,
         "Received SUBSCRIBE_NAMESPACE_ERROR for unknown request_id");
@@ -1412,17 +1423,17 @@
   }
   std::move(it->second.callback)(it->second.track_namespace, message.error_code,
                                  absl::string_view(message.error_reason));
-  session_->outgoing_subscribe_announces_.erase(it->second.track_namespace);
-  session_->pending_outgoing_subscribe_announces_.erase(it);
+  session_->outgoing_subscribe_namespaces_.erase(it->second.track_namespace);
+  session_->pending_outgoing_subscribe_namespaces_.erase(it);
 }
 
 void MoqtSession::ControlStream::OnUnsubscribeNamespaceMessage(
     const MoqtUnsubscribeNamespace& message) {
   // MoqtSession keeps no state here, so just tell the application.
   std::optional<MoqtSubscribeErrorReason> result =
-      session_->callbacks_.incoming_subscribe_announces_callback(
+      session_->callbacks_.incoming_subscribe_namespace_callback(
           message.track_namespace, std::nullopt);
-  session_->incoming_subscribe_announces_.RemoveNamespace(
+  session_->incoming_subscribe_namespace_.RemoveNamespace(
       message.track_namespace);
 }
 
diff --git a/quiche/quic/moqt/moqt_session.h b/quiche/quic/moqt/moqt_session.h
index 407a5c7..55a67cf 100644
--- a/quiche/quic/moqt/moqt_session.h
+++ b/quiche/quic/moqt/moqt_session.h
@@ -101,18 +101,22 @@
                           VersionSpecificParameters parameters);
   bool UnsubscribeNamespace(TrackNamespace track_namespace);
 
-  // Send an ANNOUNCE message for |track_namespace|, and call
-  // |announce_callback| when the response arrives. Will fail immediately if
-  // there is already an unresolved ANNOUNCE for that namespace.
-  void Announce(TrackNamespace track_namespace,
-                MoqtOutgoingAnnounceCallback announce_callback,
-                VersionSpecificParameters parameters);
-  // Returns true if message was sent, false if there is no ANNOUNCE to cancel.
-  bool Unannounce(TrackNamespace track_namespace);
+  // Send a PUBLISH_NAMESPACE message for |track_namespace|, and call
+  // |publish_namespace_callback| when the response arrives. Will fail
+  // immediately if there is already an unresolved PUBLISH_NAMESPACE for that
+  // namespace.
+  void PublishNamespace(
+      TrackNamespace track_namespace,
+      MoqtOutgoingPublishNamespaceCallback publish_namespace_callback,
+      VersionSpecificParameters parameters);
+  // Returns true if message was sent, false if there is no PUBLISH_NAMESPACE to
+  // cancel.
+  bool PublishNamespaceDone(TrackNamespace track_namespace);
   // Allows the subscriber to declare it will not subscribe to |track_namespace|
   // anymore.
-  void CancelAnnounce(TrackNamespace track_namespace, RequestErrorCode code,
-                      absl::string_view reason_phrase);
+  void CancelPublishNamespace(TrackNamespace track_namespace,
+                              RequestErrorCode code,
+                              absl::string_view reason_phrase);
 
   // MoqtSessionInterface implementation.
   MoqtSessionCallbacks& callbacks() override { return callbacks_; }
@@ -232,11 +236,16 @@
     // There is no state to update for SUBSCRIBE_DONE.
     void OnPublishDoneMessage(const MoqtPublishDone& /*message*/) override;
     void OnSubscribeUpdateMessage(const MoqtSubscribeUpdate& message) override;
-    void OnAnnounceMessage(const MoqtAnnounce& message) override;
-    void OnAnnounceOkMessage(const MoqtAnnounceOk& message) override;
-    void OnAnnounceErrorMessage(const MoqtAnnounceError& message) override;
-    void OnUnannounceMessage(const MoqtUnannounce& message) override;
-    void OnAnnounceCancelMessage(const MoqtAnnounceCancel& message) override;
+    void OnPublishNamespaceMessage(
+        const MoqtPublishNamespace& message) override;
+    void OnPublishNamespaceOkMessage(
+        const MoqtPublishNamespaceOk& message) override;
+    void OnPublishNamespaceErrorMessage(
+        const MoqtPublishNamespaceError& message) override;
+    void OnPublishNamespaceDoneMessage(
+        const MoqtPublishNamespaceDone& /*message*/) override;
+    void OnPublishNamespaceCancelMessage(
+        const MoqtPublishNamespaceCancel& message) override;
     void OnTrackStatusMessage(const MoqtTrackStatus& message) override;
     void OnTrackStatusOkMessage(const MoqtTrackStatusOk& /*message*/) override {
     }
@@ -830,25 +839,26 @@
   absl::flat_hash_map<FullTrackName, MoqtPublishingMonitorInterface*>
       monitoring_interfaces_for_published_tracks_;
 
-  // Outgoing ANNOUNCE for which no OK or ERROR has been received.
-  absl::flat_hash_map<uint64_t, TrackNamespace> pending_outgoing_announces_;
-  // All outgoing ANNOUNCE.
-  absl::flat_hash_map<TrackNamespace, MoqtOutgoingAnnounceCallback>
-      outgoing_announces_;
+  // Outgoing PUBLISH_NAMESPACE for which no OK or ERROR has been received.
+  absl::flat_hash_map<uint64_t, TrackNamespace>
+      pending_outgoing_publish_namespaces_;
+  // All outgoing PUBLISH_NAMESPACE.
+  absl::flat_hash_map<TrackNamespace, MoqtOutgoingPublishNamespaceCallback>
+      outgoing_publish_namespaces_;
 
   // The value is nullptr after OK or ERROR is received. The entry is deleted
   // when sending UNSUBSCRIBE_NAMESPACE, to make sure the application doesn't
-  // unsubscribe from something that it isn't subscribed to. ANNOUNCEs that
-  // result from this subscription use incoming_announce_callback.
+  // unsubscribe from something that it isn't subscribed to. PUBLISH_NAMESPACEs
+  // that result from this subscription use incoming_publish_namespace_callback.
   struct PendingSubscribeNamespaceData {
     TrackNamespace track_namespace;
     MoqtOutgoingSubscribeNamespaceCallback callback;
   };
   absl::flat_hash_map<uint64_t, PendingSubscribeNamespaceData>
-      pending_outgoing_subscribe_announces_;
-  absl::flat_hash_set<TrackNamespace> outgoing_subscribe_announces_;
+      pending_outgoing_subscribe_namespaces_;
+  absl::flat_hash_set<TrackNamespace> outgoing_subscribe_namespaces_;
   // It's an error if the namespaces overlap, so keep track of them.
-  NamespaceTree incoming_subscribe_announces_;
+  NamespaceTree incoming_subscribe_namespace_;
 
   // The minimum request ID the peer can use that is monotonically increasing.
   uint64_t next_incoming_request_id_ = 0;
diff --git a/quiche/quic/moqt/moqt_session_callbacks.h b/quiche/quic/moqt/moqt_session_callbacks.h
index cc0a35c..f104de0 100644
--- a/quiche/quic/moqt/moqt_session_callbacks.h
+++ b/quiche/quic/moqt/moqt_session_callbacks.h
@@ -29,10 +29,11 @@
 // Called from the session destructor.
 using MoqtSessionDeletedCallback = quiche::SingleUseCallback<void()>;
 
-// Called whenever an ANNOUNCE or UNANNOUNCE message is received from the peer.
-// ANNOUNCE sets a value for |parameters|, UNANNOUNCE does not.
-using MoqtIncomingAnnounceCallback =
-    quiche::MultiUseCallback<std::optional<MoqtAnnounceErrorReason>(
+// Called whenever a PUBLISH_NAMESPACE or PUBLISH_NAMESPACE_DONE message is
+// received from the peer. PUBLISH_NAMESPACE sets a value for |parameters|,
+// PUBLISH_NAMESPACE_DONE does not.
+using MoqtIncomingPublishNamespaceCallback =
+    quiche::MultiUseCallback<std::optional<MoqtPublishNamespaceErrorReason>(
         const TrackNamespace& track_namespace,
         const std::optional<VersionSpecificParameters>& parameters)>;
 
@@ -46,12 +47,13 @@
         const TrackNamespace& track_namespace,
         std::optional<VersionSpecificParameters> parameters)>;
 
-inline std::optional<MoqtAnnounceErrorReason> DefaultIncomingAnnounceCallback(
+inline std::optional<MoqtPublishNamespaceErrorReason>
+DefaultIncomingPublishNamespaceCallback(
     const TrackNamespace& /*track_namespace*/,
     std::optional<VersionSpecificParameters> /*parameters*/) {
-  return std::optional(MoqtAnnounceErrorReason{
+  return std::optional(MoqtPublishNamespaceErrorReason{
       RequestErrorCode::kNotSupported,
-      "This endpoint does not accept incoming ANNOUNCE messages"});
+      "This endpoint does not accept incoming PUBLISH_NAMESPACE messages"});
 };
 
 inline std::optional<MoqtSubscribeErrorReason>
@@ -72,9 +74,9 @@
       +[](absl::string_view) {};
   MoqtSessionDeletedCallback session_deleted_callback = +[] {};
 
-  MoqtIncomingAnnounceCallback incoming_announce_callback =
-      DefaultIncomingAnnounceCallback;
-  MoqtIncomingSubscribeNamespaceCallback incoming_subscribe_announces_callback =
+  MoqtIncomingPublishNamespaceCallback incoming_publish_namespace_callback =
+      DefaultIncomingPublishNamespaceCallback;
+  MoqtIncomingSubscribeNamespaceCallback incoming_subscribe_namespace_callback =
       DefaultIncomingSubscribeNamespaceCallback;
   const quic::QuicClock* clock = quic::QuicDefaultClock::Get();
 };
diff --git a/quiche/quic/moqt/moqt_session_interface.h b/quiche/quic/moqt/moqt_session_interface.h
index b60439d..cc2b51c 100644
--- a/quiche/quic/moqt/moqt_session_interface.h
+++ b/quiche/quic/moqt/moqt_session_interface.h
@@ -63,17 +63,18 @@
 using FetchResponseCallback =
     quiche::SingleUseCallback<void(std::unique_ptr<MoqtFetchTask> fetch_task)>;
 
-// TODO(martinduke): MoqtOutgoingAnnounceCallback and
+// TODO(martinduke): MoqtOutgoingPublishNamespaceCallback and
 // MoqtOutgoingSubscribeNamespaceCallback are deprecated. Remove.
 
-// If |error_message| is nullopt, this is triggered by an ANNOUNCE_OK.
-// Otherwise, it is triggered by ANNOUNCE_ERROR or ANNOUNCE_CANCEL. For
-// ERROR or CANCEL, MoqtSession is deleting all ANNOUNCE state immediately
-// after calling this callback. Alternatively, the application can call
-// Unannounce() to delete the state.
-using MoqtOutgoingAnnounceCallback = quiche::MultiUseCallback<void(
+// If |error_message| is nullopt, this is triggered by a PUBLISH_NAMESPACE_OK.
+// Otherwise, it is triggered by PUBLISH_NAMESPACE_ERROR or
+// PUBLISH_NAMESPACE_CANCEL. For ERROR or CANCEL, MoqtSession is deleting all
+// PUBLISH_NAMESPACE state immediately after calling this callback.
+// Alternatively, the application can call PublishNamespaceDone() to delete the
+// state.
+using MoqtOutgoingPublishNamespaceCallback = quiche::MultiUseCallback<void(
     TrackNamespace track_namespace,
-    std::optional<MoqtAnnounceErrorReason> error)>;
+    std::optional<MoqtPublishNamespaceErrorReason> error)>;
 
 using MoqtOutgoingSubscribeNamespaceCallback = quiche::SingleUseCallback<void(
     TrackNamespace track_namespace, std::optional<RequestErrorCode> error,
@@ -83,7 +84,7 @@
  public:
   virtual ~MoqtSessionInterface() = default;
 
-  // TODO: move ANNOUNCE logic here.
+  // TODO: move PUBLISH_NAMESPACE logic here.
 
   // Callbacks for session-level events.
   virtual MoqtSessionCallbacks& callbacks() = 0;
@@ -159,8 +160,8 @@
   // TODO(martinduke): Add an API for absolute joining fetch.
 
   // TODO: Add SubscribeNamespace, UnsubscribeNamespace method.
-  // TODO: Add Announce, Unannounce method.
-  // TODO: Add AnnounceCancel method.
+  // TODO: Add PublishNamespace, PublishNamespaceDone method.
+  // TODO: Add PublishNamespaceCancel method.
   // TODO: Add TrackStatusRequest method.
   // TODO: Add SubscribeUpdate, PublishDone method.
 
diff --git a/quiche/quic/moqt/moqt_session_test.cc b/quiche/quic/moqt/moqt_session_test.cc
index 5a62fb0..348e2c7 100644
--- a/quiche/quic/moqt/moqt_session_test.cc
+++ b/quiche/quic/moqt/moqt_session_test.cc
@@ -154,8 +154,8 @@
         .WillByDefault(Return(MoqtForwardingPreference::kSubgroup));
   }
 
-  // The publisher receives SUBSCRIBE and synchronously announces it will
-  // publish objects.
+  // The publisher receives SUBSCRIBE and synchronously publishes namespaces it
+  // supports.
   MoqtObjectListener* ReceiveSubscribeSynchronousOk(
       MockTrackPublisher* publisher, MoqtSubscribe& subscribe,
       MoqtControlParserVisitor* control_parser, uint64_t track_alias = 0) {
@@ -384,112 +384,116 @@
   stream_input->OnPublishMessage(publish);
 }
 
-TEST_F(MoqtSessionTest, AnnounceWithOkAndCancel) {
+TEST_F(MoqtSessionTest, PublishNamespaceWithOkAndCancel) {
   testing::MockFunction<void(
       TrackNamespace track_namespace,
-      std::optional<MoqtAnnounceErrorReason> error_message)>
-      announce_resolved_callback;
+      std::optional<MoqtPublishNamespaceErrorReason> error_message)>
+      publish_namespace_resolved_callback;
   std::unique_ptr<MoqtControlParserVisitor> stream_input =
       MoqtSessionPeer::CreateControlStream(&session_, &mock_stream_);
   EXPECT_CALL(mock_session_, GetStreamById(_)).WillOnce(Return(&mock_stream_));
-  EXPECT_CALL(mock_stream_,
-              Writev(ControlMessageOfType(MoqtMessageType::kAnnounce), _));
-  session_.Announce(TrackNamespace("foo"),
-                    announce_resolved_callback.AsStdFunction(),
-                    VersionSpecificParameters());
+  EXPECT_CALL(
+      mock_stream_,
+      Writev(ControlMessageOfType(MoqtMessageType::kPublishNamespace), _));
+  session_.PublishNamespace(TrackNamespace("foo"),
+                            publish_namespace_resolved_callback.AsStdFunction(),
+                            VersionSpecificParameters());
 
-  MoqtAnnounceOk ok = {
+  MoqtPublishNamespaceOk ok = {
       /*request_id=*/0,
   };
-  EXPECT_CALL(announce_resolved_callback, Call(_, _))
+  EXPECT_CALL(publish_namespace_resolved_callback, Call(_, _))
       .WillOnce([&](TrackNamespace track_namespace,
-                    std::optional<MoqtAnnounceErrorReason> error) {
+                    std::optional<MoqtPublishNamespaceErrorReason> error) {
         EXPECT_EQ(track_namespace, TrackNamespace("foo"));
         EXPECT_FALSE(error.has_value());
       });
-  stream_input->OnAnnounceOkMessage(ok);
+  stream_input->OnPublishNamespaceOkMessage(ok);
 
-  MoqtAnnounceCancel cancel = {
+  MoqtPublishNamespaceCancel cancel = {
       TrackNamespace("foo"),
       RequestErrorCode::kInternalError,
       /*error_reason=*/"Test error",
   };
-  EXPECT_CALL(announce_resolved_callback, Call(_, _))
+  EXPECT_CALL(publish_namespace_resolved_callback, Call(_, _))
       .WillOnce([&](TrackNamespace track_namespace,
-                    std::optional<MoqtAnnounceErrorReason> error) {
+                    std::optional<MoqtPublishNamespaceErrorReason> error) {
         EXPECT_EQ(track_namespace, TrackNamespace("foo"));
         ASSERT_TRUE(error.has_value());
         EXPECT_EQ(error->error_code, RequestErrorCode::kInternalError);
         EXPECT_EQ(error->reason_phrase, "Test error");
       });
-  stream_input->OnAnnounceCancelMessage(cancel);
+  stream_input->OnPublishNamespaceCancelMessage(cancel);
   // State is gone.
-  EXPECT_FALSE(session_.Unannounce(TrackNamespace("foo")));
+  EXPECT_FALSE(session_.PublishNamespaceDone(TrackNamespace("foo")));
 }
 
-TEST_F(MoqtSessionTest, AnnounceWithOkAndUnannounce) {
+TEST_F(MoqtSessionTest, PublishNamespaceWithOkAndPublishNamespaceDone) {
   testing::MockFunction<void(
       TrackNamespace track_namespace,
-      std::optional<MoqtAnnounceErrorReason> error_message)>
-      announce_resolved_callback;
+      std::optional<MoqtPublishNamespaceErrorReason> error_message)>
+      publish_namespace_resolved_callback;
   std::unique_ptr<MoqtControlParserVisitor> stream_input =
       MoqtSessionPeer::CreateControlStream(&session_, &mock_stream_);
   EXPECT_CALL(mock_session_, GetStreamById(_)).WillOnce(Return(&mock_stream_));
-  EXPECT_CALL(mock_stream_,
-              Writev(ControlMessageOfType(MoqtMessageType::kAnnounce), _));
-  session_.Announce(TrackNamespace{"foo"},
-                    announce_resolved_callback.AsStdFunction(),
-                    VersionSpecificParameters());
+  EXPECT_CALL(
+      mock_stream_,
+      Writev(ControlMessageOfType(MoqtMessageType::kPublishNamespace), _));
+  session_.PublishNamespace(TrackNamespace{"foo"},
+                            publish_namespace_resolved_callback.AsStdFunction(),
+                            VersionSpecificParameters());
 
-  MoqtAnnounceOk ok = {
+  MoqtPublishNamespaceOk ok = {
       /*request_id=*/0,
   };
-  EXPECT_CALL(announce_resolved_callback, Call(_, _))
+  EXPECT_CALL(publish_namespace_resolved_callback, Call(_, _))
       .WillOnce([&](TrackNamespace track_namespace,
-                    std::optional<MoqtAnnounceErrorReason> error) {
+                    std::optional<MoqtPublishNamespaceErrorReason> error) {
         EXPECT_EQ(track_namespace, TrackNamespace{"foo"});
         EXPECT_FALSE(error.has_value());
       });
-  stream_input->OnAnnounceOkMessage(ok);
+  stream_input->OnPublishNamespaceOkMessage(ok);
 
   EXPECT_CALL(mock_session_, GetStreamById(_)).WillOnce(Return(&mock_stream_));
-  EXPECT_CALL(mock_stream_,
-              Writev(ControlMessageOfType(MoqtMessageType::kUnannounce), _));
-  session_.Unannounce(TrackNamespace{"foo"});
+  EXPECT_CALL(
+      mock_stream_,
+      Writev(ControlMessageOfType(MoqtMessageType::kPublishNamespaceDone), _));
+  session_.PublishNamespaceDone(TrackNamespace{"foo"});
   // State is gone.
-  EXPECT_FALSE(session_.Unannounce(TrackNamespace{"foo"}));
+  EXPECT_FALSE(session_.PublishNamespaceDone(TrackNamespace{"foo"}));
 }
 
-TEST_F(MoqtSessionTest, AnnounceWithError) {
+TEST_F(MoqtSessionTest, PublishNamespaceWithError) {
   testing::MockFunction<void(
       TrackNamespace track_namespace,
-      std::optional<MoqtAnnounceErrorReason> error_message)>
-      announce_resolved_callback;
+      std::optional<MoqtPublishNamespaceErrorReason> error_message)>
+      publish_namespace_resolved_callback;
   std::unique_ptr<MoqtControlParserVisitor> stream_input =
       MoqtSessionPeer::CreateControlStream(&session_, &mock_stream_);
   EXPECT_CALL(mock_session_, GetStreamById(_)).WillOnce(Return(&mock_stream_));
-  EXPECT_CALL(mock_stream_,
-              Writev(ControlMessageOfType(MoqtMessageType::kAnnounce), _));
-  session_.Announce(TrackNamespace{"foo"},
-                    announce_resolved_callback.AsStdFunction(),
-                    VersionSpecificParameters());
+  EXPECT_CALL(
+      mock_stream_,
+      Writev(ControlMessageOfType(MoqtMessageType::kPublishNamespace), _));
+  session_.PublishNamespace(TrackNamespace{"foo"},
+                            publish_namespace_resolved_callback.AsStdFunction(),
+                            VersionSpecificParameters());
 
-  MoqtAnnounceError error = {
+  MoqtPublishNamespaceError error = {
       /*request_id=*/0,
       /*error_code=*/RequestErrorCode::kInternalError,
       /*reason_phrase=*/"Test error",
   };
-  EXPECT_CALL(announce_resolved_callback, Call(_, _))
+  EXPECT_CALL(publish_namespace_resolved_callback, Call(_, _))
       .WillOnce([&](TrackNamespace track_namespace,
-                    std::optional<MoqtAnnounceErrorReason> error) {
+                    std::optional<MoqtPublishNamespaceErrorReason> error) {
         EXPECT_EQ(track_namespace, TrackNamespace{"foo"});
         ASSERT_TRUE(error.has_value());
         EXPECT_EQ(error->error_code, RequestErrorCode::kInternalError);
         EXPECT_EQ(error->reason_phrase, "Test error");
       });
-  stream_input->OnAnnounceErrorMessage(error);
+  stream_input->OnPublishNamespaceErrorMessage(error);
   // State is gone.
-  EXPECT_FALSE(session_.Unannounce(TrackNamespace{"foo"}));
+  EXPECT_FALSE(session_.PublishNamespaceDone(TrackNamespace{"foo"}));
 }
 
 TEST_F(MoqtSessionTest, AsynchronousSubscribeReturnsOk) {
@@ -940,88 +944,89 @@
   EXPECT_EQ(MoqtSessionPeer::remote_track(&session_, 2), nullptr);
 }
 
-TEST_F(MoqtSessionTest, ReplyToAnnounceWithOkThenUnannounce) {
+TEST_F(MoqtSessionTest, ReplyToPublishNamespaceWithOkThenPublishNamespaceDone) {
   TrackNamespace track_namespace{"foo"};
   std::unique_ptr<MoqtControlParserVisitor> stream_input =
       MoqtSessionPeer::CreateControlStream(&session_, &mock_stream_);
   auto parameters = std::make_optional<VersionSpecificParameters>(
       AuthTokenType::kOutOfBand, "foo");
-  MoqtAnnounce announce = {
+  MoqtPublishNamespace publish_namespace = {
       kDefaultPeerRequestId,
       track_namespace,
       *parameters,
   };
-  EXPECT_CALL(session_callbacks_.incoming_announce_callback,
+  EXPECT_CALL(session_callbacks_.incoming_publish_namespace_callback,
               Call(track_namespace, parameters))
       .WillOnce(Return(std::nullopt));
-  EXPECT_CALL(
-      mock_stream_,
-      Writev(SerializedControlMessage(MoqtAnnounceOk{kDefaultPeerRequestId}),
-             _));
-  stream_input->OnAnnounceMessage(announce);
-  MoqtUnannounce unannounce = {
+  EXPECT_CALL(mock_stream_,
+              Writev(SerializedControlMessage(
+                         MoqtPublishNamespaceOk{kDefaultPeerRequestId}),
+                     _));
+  stream_input->OnPublishNamespaceMessage(publish_namespace);
+  MoqtPublishNamespaceDone unpublish_namespace = {
       track_namespace,
   };
-  EXPECT_CALL(session_callbacks_.incoming_announce_callback,
+  EXPECT_CALL(session_callbacks_.incoming_publish_namespace_callback,
               Call(track_namespace, std::optional<VersionSpecificParameters>()))
       .WillOnce(Return(std::nullopt));
-  stream_input->OnUnannounceMessage(unannounce);
+  stream_input->OnPublishNamespaceDoneMessage(unpublish_namespace);
 }
 
-TEST_F(MoqtSessionTest, ReplyToAnnounceWithOkThenAnnounceCancel) {
+TEST_F(MoqtSessionTest,
+       ReplyToPublishNamespaceWithOkThenPublishNamespaceCancel) {
   TrackNamespace track_namespace{"foo"};
 
   std::unique_ptr<MoqtControlParserVisitor> stream_input =
       MoqtSessionPeer::CreateControlStream(&session_, &mock_stream_);
   auto parameters = std::make_optional<VersionSpecificParameters>(
       AuthTokenType::kOutOfBand, "foo");
-  MoqtAnnounce announce = {
+  MoqtPublishNamespace publish_namespace = {
       kDefaultPeerRequestId,
       track_namespace,
       *parameters,
   };
-  EXPECT_CALL(session_callbacks_.incoming_announce_callback,
+  EXPECT_CALL(session_callbacks_.incoming_publish_namespace_callback,
               Call(track_namespace, parameters))
       .WillOnce(Return(std::nullopt));
-  EXPECT_CALL(
-      mock_stream_,
-      Writev(SerializedControlMessage(MoqtAnnounceOk{kDefaultPeerRequestId}),
-             _));
-  stream_input->OnAnnounceMessage(announce);
   EXPECT_CALL(mock_stream_,
-              Writev(SerializedControlMessage(MoqtAnnounceCancel{
+              Writev(SerializedControlMessage(
+                         MoqtPublishNamespaceOk{kDefaultPeerRequestId}),
+                     _));
+  stream_input->OnPublishNamespaceMessage(publish_namespace);
+  EXPECT_CALL(mock_stream_,
+              Writev(SerializedControlMessage(MoqtPublishNamespaceCancel{
                          track_namespace, RequestErrorCode::kInternalError,
                          "deadbeef"}),
                      _));
-  session_.CancelAnnounce(track_namespace, RequestErrorCode::kInternalError,
-                          "deadbeef");
+  session_.CancelPublishNamespace(track_namespace,
+                                  RequestErrorCode::kInternalError, "deadbeef");
 }
 
-TEST_F(MoqtSessionTest, ReplyToAnnounceWithError) {
+TEST_F(MoqtSessionTest, ReplyToPublishNamespaceWithError) {
   TrackNamespace track_namespace{"foo"};
 
   std::unique_ptr<MoqtControlParserVisitor> stream_input =
       MoqtSessionPeer::CreateControlStream(&session_, &mock_stream_);
   auto parameters = std::make_optional<VersionSpecificParameters>(
       AuthTokenType::kOutOfBand, "foo");
-  MoqtAnnounce announce = {
+  MoqtPublishNamespace publish_namespace = {
       kDefaultPeerRequestId,
       track_namespace,
       *parameters,
   };
-  MoqtAnnounceErrorReason error = {
+  MoqtPublishNamespaceErrorReason error = {
       RequestErrorCode::kNotSupported,
       "deadbeef",
   };
-  EXPECT_CALL(session_callbacks_.incoming_announce_callback,
+  EXPECT_CALL(session_callbacks_.incoming_publish_namespace_callback,
               Call(track_namespace, parameters))
       .WillOnce(Return(error));
   EXPECT_CALL(
       mock_stream_,
-      Writev(SerializedControlMessage(MoqtAnnounceError{
+      Writev(SerializedControlMessage(MoqtPublishNamespaceError{
                  kDefaultPeerRequestId, error.error_code, error.reason_phrase}),
              _));
-  stream_input->OnAnnounceMessage(announce);
+  stream_input->OnPublishNamespaceMessage(publish_namespace);
 }
 
 TEST_F(MoqtSessionTest, SubscribeNamespaceLifeCycle) {
@@ -2741,7 +2746,7 @@
   TrackNamespace track_namespace = TrackNamespace{"foo"};
   auto parameters = std::make_optional<VersionSpecificParameters>(
       AuthTokenType::kOutOfBand, "foo");
-  MoqtSubscribeNamespace announces = {
+  MoqtSubscribeNamespace publish_namespaces = {
       /*request_id=*/1,
       track_namespace,
       *parameters,
@@ -2749,27 +2754,27 @@
   webtransport::test::MockStream control_stream;
   std::unique_ptr<MoqtControlParserVisitor> stream_input =
       MoqtSessionPeer::CreateControlStream(&session_, &control_stream);
-  EXPECT_CALL(session_callbacks_.incoming_subscribe_announces_callback,
+  EXPECT_CALL(session_callbacks_.incoming_subscribe_namespace_callback,
               Call(_, parameters))
       .WillOnce(Return(std::nullopt));
   EXPECT_CALL(
       control_stream,
       Writev(ControlMessageOfType(MoqtMessageType::kSubscribeNamespaceOk), _));
-  stream_input->OnSubscribeNamespaceMessage(announces);
-  MoqtUnsubscribeNamespace unsubscribe_announces = {
+  stream_input->OnSubscribeNamespaceMessage(publish_namespaces);
+  MoqtUnsubscribeNamespace ununsubscribe_namespaces = {
       TrackNamespace{"foo"},
   };
-  EXPECT_CALL(session_callbacks_.incoming_subscribe_announces_callback,
+  EXPECT_CALL(session_callbacks_.incoming_subscribe_namespace_callback,
               Call(track_namespace, std::optional<VersionSpecificParameters>()))
       .WillOnce(Return(std::nullopt));
-  stream_input->OnUnsubscribeNamespaceMessage(unsubscribe_announces);
+  stream_input->OnUnsubscribeNamespaceMessage(ununsubscribe_namespaces);
 }
 
 TEST_F(MoqtSessionTest, IncomingSubscribeNamespaceWithError) {
   TrackNamespace track_namespace{"foo"};
   auto parameters = std::make_optional<VersionSpecificParameters>(
       AuthTokenType::kOutOfBand, "foo");
-  MoqtSubscribeNamespace announces = {
+  MoqtSubscribeNamespace publish_namespaces = {
       /*request_id=*/1,
       track_namespace,
       *parameters,
@@ -2777,7 +2782,7 @@
   webtransport::test::MockStream control_stream;
   std::unique_ptr<MoqtControlParserVisitor> stream_input =
       MoqtSessionPeer::CreateControlStream(&session_, &control_stream);
-  EXPECT_CALL(session_callbacks_.incoming_subscribe_announces_callback,
+  EXPECT_CALL(session_callbacks_.incoming_subscribe_namespace_callback,
               Call(_, parameters))
       .WillOnce(Return(
           MoqtSubscribeErrorReason{RequestErrorCode::kUnauthorized, "foo"}));
@@ -2785,24 +2790,24 @@
       control_stream,
       Writev(ControlMessageOfType(MoqtMessageType::kSubscribeNamespaceError),
              _));
-  stream_input->OnSubscribeNamespaceMessage(announces);
+  stream_input->OnSubscribeNamespaceMessage(publish_namespaces);
 
   // Try again, to verify that it was purged from the tree.
-  announces.request_id += 2;
-  EXPECT_CALL(session_callbacks_.incoming_subscribe_announces_callback,
+  publish_namespaces.request_id += 2;
+  EXPECT_CALL(session_callbacks_.incoming_subscribe_namespace_callback,
               Call(_, parameters))
       .WillOnce(Return(std::nullopt));
   EXPECT_CALL(
       control_stream,
       Writev(ControlMessageOfType(MoqtMessageType::kSubscribeNamespaceOk), _));
-  stream_input->OnSubscribeNamespaceMessage(announces);
+  stream_input->OnSubscribeNamespaceMessage(publish_namespaces);
 }
 
 TEST_F(MoqtSessionTest, IncomingSubscribeNamespaceWithPrefixOverlap) {
   TrackNamespace track_namespace{"foo"};
   auto parameters = std::make_optional<VersionSpecificParameters>(
       AuthTokenType::kOutOfBand, "foo");
-  MoqtSubscribeNamespace announces = {
+  MoqtSubscribeNamespace publish_namespaces = {
       /*request_id=*/1,
       track_namespace,
       *parameters,
@@ -2810,41 +2815,41 @@
   webtransport::test::MockStream control_stream;
   std::unique_ptr<MoqtControlParserVisitor> stream_input =
       MoqtSessionPeer::CreateControlStream(&session_, &control_stream);
-  EXPECT_CALL(session_callbacks_.incoming_subscribe_announces_callback,
+  EXPECT_CALL(session_callbacks_.incoming_subscribe_namespace_callback,
               Call(_, parameters))
       .WillOnce(Return(std::nullopt));
   EXPECT_CALL(
       control_stream,
       Writev(ControlMessageOfType(MoqtMessageType::kSubscribeNamespaceOk), _));
-  stream_input->OnSubscribeNamespaceMessage(announces);
+  stream_input->OnSubscribeNamespaceMessage(publish_namespaces);
 
   // Overlapping request is rejected.
-  announces.request_id += 2;
-  announces.track_namespace = TrackNamespace{"foo", "bar"};
+  publish_namespaces.request_id += 2;
+  publish_namespaces.track_namespace = TrackNamespace{"foo", "bar"};
   EXPECT_CALL(
       control_stream,
       Writev(ControlMessageOfType(MoqtMessageType::kSubscribeNamespaceError),
              _));
-  stream_input->OnSubscribeNamespaceMessage(announces);
+  stream_input->OnSubscribeNamespaceMessage(publish_namespaces);
 
   // Remove the subscription. Now a later one will work.
-  MoqtUnsubscribeNamespace unsubscribe_announces = {
+  MoqtUnsubscribeNamespace ununsubscribe_namespaces = {
       TrackNamespace{"foo"},
   };
-  EXPECT_CALL(session_callbacks_.incoming_subscribe_announces_callback,
+  EXPECT_CALL(session_callbacks_.incoming_subscribe_namespace_callback,
               Call(track_namespace, std::optional<VersionSpecificParameters>()))
       .WillOnce(Return(std::nullopt));
-  stream_input->OnUnsubscribeNamespaceMessage(unsubscribe_announces);
+  stream_input->OnUnsubscribeNamespaceMessage(ununsubscribe_namespaces);
 
   // Try again, it will work.
-  announces.request_id += 2;
-  EXPECT_CALL(session_callbacks_.incoming_subscribe_announces_callback,
+  publish_namespaces.request_id += 2;
+  EXPECT_CALL(session_callbacks_.incoming_subscribe_namespace_callback,
               Call(_, parameters))
       .WillOnce(Return(std::nullopt));
   EXPECT_CALL(
       control_stream,
       Writev(ControlMessageOfType(MoqtMessageType::kSubscribeNamespaceOk), _));
-  stream_input->OnSubscribeNamespaceMessage(announces);
+  stream_input->OnSubscribeNamespaceMessage(publish_namespaces);
 }
 
 TEST_F(MoqtSessionTest, FetchThenOkThenCancel) {
@@ -3411,10 +3416,10 @@
           std::optional<RequestErrorCode> /*error*/,
           absl::string_view /*reason*/) {},
       VersionSpecificParameters()));
-  session_.Announce(
+  session_.PublishNamespace(
       TrackNamespace{"foo"},
       +[](TrackNamespace /*track_namespace*/,
-          std::optional<MoqtAnnounceErrorReason> /*error*/) {},
+          std::optional<MoqtPublishNamespaceErrorReason> /*error*/) {},
       VersionSpecificParameters());
   EXPECT_FALSE(session_.Fetch(
       FullTrackName{TrackNamespace("foo"), "bar"},
@@ -3445,10 +3450,11 @@
       mock_stream_,
       Writev(ControlMessageOfType(MoqtMessageType::kSubscribeError), _));
   stream_input->OnSubscribeMessage(DefaultSubscribe());
-  EXPECT_CALL(mock_stream_,
-              Writev(ControlMessageOfType(MoqtMessageType::kAnnounceError), _));
-  stream_input->OnAnnounceMessage(
-      MoqtAnnounce(3, TrackNamespace("foo"), VersionSpecificParameters()));
+  EXPECT_CALL(
+      mock_stream_,
+      Writev(ControlMessageOfType(MoqtMessageType::kPublishNamespaceError), _));
+  stream_input->OnPublishNamespaceMessage(MoqtPublishNamespace(
+      3, TrackNamespace("foo"), VersionSpecificParameters()));
   EXPECT_CALL(mock_stream_,
               Writev(ControlMessageOfType(MoqtMessageType::kFetchError), _));
   MoqtFetch fetch = DefaultFetch();
@@ -3465,7 +3471,7 @@
       mock_stream_,
       Writev(ControlMessageOfType(MoqtMessageType::kTrackStatusError), _));
   stream_input->OnTrackStatusMessage(track_status);
-  // Block all outgoing SUBSCRIBE, ANNOUNCE, GOAWAY,etc.
+  // Block all outgoing SUBSCRIBE, PUBLISH_NAMESPACE, GOAWAY,etc.
   EXPECT_CALL(mock_stream_, Writev).Times(0);
   MockSubscribeRemoteTrackVisitor remote_track_visitor;
   EXPECT_FALSE(session_.SubscribeCurrentObject(
@@ -3477,10 +3483,10 @@
           std::optional<RequestErrorCode> /*error*/,
           absl::string_view /*reason*/) {},
       VersionSpecificParameters()));
-  session_.Announce(
+  session_.PublishNamespace(
       TrackNamespace{"foo"},
       +[](TrackNamespace /*track_namespace*/,
-          std::optional<MoqtAnnounceErrorReason> /*error*/) {},
+          std::optional<MoqtPublishNamespaceErrorReason> /*error*/) {},
       VersionSpecificParameters());
   EXPECT_FALSE(session_.Fetch(
       FullTrackName(TrackNamespace("foo"), "bar"),
diff --git a/quiche/quic/moqt/test_tools/moqt_framer_utils.cc b/quiche/quic/moqt/test_tools/moqt_framer_utils.cc
index 8643c12..6073b87 100644
--- a/quiche/quic/moqt/test_tools/moqt_framer_utils.cc
+++ b/quiche/quic/moqt/test_tools/moqt_framer_utils.cc
@@ -50,20 +50,20 @@
   quiche::QuicheBuffer operator()(const MoqtSubscribeUpdate& message) {
     return framer.SerializeSubscribeUpdate(message);
   }
-  quiche::QuicheBuffer operator()(const MoqtAnnounce& message) {
-    return framer.SerializeAnnounce(message);
+  quiche::QuicheBuffer operator()(const MoqtPublishNamespace& message) {
+    return framer.SerializePublishNamespace(message);
   }
-  quiche::QuicheBuffer operator()(const MoqtAnnounceOk& message) {
-    return framer.SerializeAnnounceOk(message);
+  quiche::QuicheBuffer operator()(const MoqtPublishNamespaceOk& message) {
+    return framer.SerializePublishNamespaceOk(message);
   }
-  quiche::QuicheBuffer operator()(const MoqtAnnounceError& message) {
-    return framer.SerializeAnnounceError(message);
+  quiche::QuicheBuffer operator()(const MoqtPublishNamespaceError& message) {
+    return framer.SerializePublishNamespaceError(message);
   }
-  quiche::QuicheBuffer operator()(const MoqtUnannounce& message) {
-    return framer.SerializeUnannounce(message);
+  quiche::QuicheBuffer operator()(const MoqtPublishNamespaceDone& message) {
+    return framer.SerializePublishNamespaceDone(message);
   }
-  quiche::QuicheBuffer operator()(const MoqtAnnounceCancel& message) {
-    return framer.SerializeAnnounceCancel(message);
+  quiche::QuicheBuffer operator()(const MoqtPublishNamespaceCancel& message) {
+    return framer.SerializePublishNamespaceCancel(message);
   }
   quiche::QuicheBuffer operator()(const MoqtTrackStatus& message) {
     return framer.SerializeTrackStatus(message);
@@ -153,19 +153,21 @@
   void OnSubscribeUpdateMessage(const MoqtSubscribeUpdate& message) {
     frames_.push_back(message);
   }
-  void OnAnnounceMessage(const MoqtAnnounce& message) {
+  void OnPublishNamespaceMessage(const MoqtPublishNamespace& message) {
     frames_.push_back(message);
   }
-  void OnAnnounceOkMessage(const MoqtAnnounceOk& message) {
+  void OnPublishNamespaceOkMessage(const MoqtPublishNamespaceOk& message) {
     frames_.push_back(message);
   }
-  void OnAnnounceErrorMessage(const MoqtAnnounceError& message) {
+  void OnPublishNamespaceErrorMessage(
+      const MoqtPublishNamespaceError& message) {
     frames_.push_back(message);
   }
-  void OnUnannounceMessage(const MoqtUnannounce& message) {
+  void OnPublishNamespaceDoneMessage(const MoqtPublishNamespaceDone& message) {
     frames_.push_back(message);
   }
-  void OnAnnounceCancelMessage(const MoqtAnnounceCancel& message) {
+  void OnPublishNamespaceCancelMessage(
+      const MoqtPublishNamespaceCancel& message) {
     frames_.push_back(message);
   }
   void OnTrackStatusMessage(const MoqtTrackStatus& message) {
diff --git a/quiche/quic/moqt/test_tools/moqt_framer_utils.h b/quiche/quic/moqt/test_tools/moqt_framer_utils.h
index b0e05d7..57e0d5b 100644
--- a/quiche/quic/moqt/test_tools/moqt_framer_utils.h
+++ b/quiche/quic/moqt/test_tools/moqt_framer_utils.h
@@ -28,9 +28,9 @@
 using MoqtGenericFrame = std::variant<
     MoqtClientSetup, MoqtServerSetup, MoqtSubscribe, MoqtSubscribeOk,
     MoqtSubscribeError, MoqtUnsubscribe, MoqtPublishDone, MoqtSubscribeUpdate,
-    MoqtAnnounce, MoqtAnnounceOk, MoqtAnnounceError, MoqtUnannounce,
-    MoqtAnnounceCancel, MoqtTrackStatus, MoqtTrackStatusOk,
-    MoqtTrackStatusError, MoqtGoAway, MoqtSubscribeNamespace,
+    MoqtPublishNamespace, MoqtPublishNamespaceOk, MoqtPublishNamespaceError,
+    MoqtPublishNamespaceDone, MoqtPublishNamespaceCancel, MoqtTrackStatus,
+    MoqtTrackStatusOk, MoqtTrackStatusError, MoqtGoAway, MoqtSubscribeNamespace,
     MoqtSubscribeNamespaceOk, MoqtSubscribeNamespaceError,
     MoqtUnsubscribeNamespace, MoqtMaxRequestId, MoqtFetch, MoqtFetchCancel,
     MoqtFetchOk, MoqtFetchError, MoqtRequestsBlocked, MoqtPublish,
diff --git a/quiche/quic/moqt/test_tools/moqt_parser_test_visitor.h b/quiche/quic/moqt/test_tools/moqt_parser_test_visitor.h
index be6f3b2..6998d98 100644
--- a/quiche/quic/moqt/test_tools/moqt_parser_test_visitor.h
+++ b/quiche/quic/moqt/test_tools/moqt_parser_test_visitor.h
@@ -66,19 +66,23 @@
   void OnPublishDoneMessage(const MoqtPublishDone& message) override {
     OnControlMessage(message);
   }
-  void OnAnnounceMessage(const MoqtAnnounce& message) override {
+  void OnPublishNamespaceMessage(const MoqtPublishNamespace& message) override {
     OnControlMessage(message);
   }
-  void OnAnnounceOkMessage(const MoqtAnnounceOk& message) override {
+  void OnPublishNamespaceOkMessage(
+      const MoqtPublishNamespaceOk& message) override {
     OnControlMessage(message);
   }
-  void OnAnnounceErrorMessage(const MoqtAnnounceError& message) override {
+  void OnPublishNamespaceErrorMessage(
+      const MoqtPublishNamespaceError& message) override {
     OnControlMessage(message);
   }
-  void OnUnannounceMessage(const MoqtUnannounce& message) override {
+  void OnPublishNamespaceDoneMessage(
+      const MoqtPublishNamespaceDone& message) override {
     OnControlMessage(message);
   }
-  void OnAnnounceCancelMessage(const MoqtAnnounceCancel& message) override {
+  void OnPublishNamespaceCancelMessage(
+      const MoqtPublishNamespaceCancel& message) override {
     OnControlMessage(message);
   }
   void OnTrackStatusMessage(const MoqtTrackStatus& message) override {
diff --git a/quiche/quic/moqt/test_tools/moqt_simulator_harness.cc b/quiche/quic/moqt/test_tools/moqt_simulator_harness.cc
index 9c743eb..b124720 100644
--- a/quiche/quic/moqt/test_tools/moqt_simulator_harness.cc
+++ b/quiche/quic/moqt/test_tools/moqt_simulator_harness.cc
@@ -39,7 +39,7 @@
 MoqtSessionCallbacks CreateCallbacks(quic::simulator::Simulator* simulator) {
   return MoqtSessionCallbacks(
       +[] {}, +[](absl::string_view) {}, +[](absl::string_view) {}, +[] {},
-      DefaultIncomingAnnounceCallback,
+      DefaultIncomingPublishNamespaceCallback,
       DefaultIncomingSubscribeNamespaceCallback, simulator->GetClock());
 }
 }  // namespace
diff --git a/quiche/quic/moqt/test_tools/moqt_test_message.h b/quiche/quic/moqt/test_tools/moqt_test_message.h
index 13126e4..2af6e2b 100644
--- a/quiche/quic/moqt/test_tools/moqt_test_message.h
+++ b/quiche/quic/moqt/test_tools/moqt_test_message.h
@@ -69,16 +69,18 @@
  public:
   virtual ~TestMessageBase() = default;
 
-  using MessageStructuredData = std::variant<
-      MoqtClientSetup, MoqtServerSetup, MoqtObject, MoqtSubscribe,
-      MoqtSubscribeOk, MoqtSubscribeError, MoqtUnsubscribe, MoqtPublishDone,
-      MoqtSubscribeUpdate, MoqtAnnounce, MoqtAnnounceOk, MoqtAnnounceError,
-      MoqtUnannounce, MoqtAnnounceCancel, MoqtTrackStatus, MoqtTrackStatusOk,
-      MoqtTrackStatusError, MoqtGoAway, MoqtSubscribeNamespace,
-      MoqtSubscribeNamespaceOk, MoqtSubscribeNamespaceError,
-      MoqtUnsubscribeNamespace, MoqtMaxRequestId, MoqtFetch, MoqtFetchCancel,
-      MoqtFetchOk, MoqtFetchError, MoqtRequestsBlocked, MoqtPublish,
-      MoqtPublishOk, MoqtPublishError, MoqtObjectAck>;
+  using MessageStructuredData =
+      std::variant<MoqtClientSetup, MoqtServerSetup, MoqtObject, MoqtSubscribe,
+                   MoqtSubscribeOk, MoqtSubscribeError, MoqtUnsubscribe,
+                   MoqtPublishDone, MoqtSubscribeUpdate, MoqtPublishNamespace,
+                   MoqtPublishNamespaceOk, MoqtPublishNamespaceError,
+                   MoqtPublishNamespaceDone, MoqtPublishNamespaceCancel,
+                   MoqtTrackStatus, MoqtTrackStatusOk, MoqtTrackStatusError,
+                   MoqtGoAway, MoqtSubscribeNamespace, MoqtSubscribeNamespaceOk,
+                   MoqtSubscribeNamespaceError, MoqtUnsubscribeNamespace,
+                   MoqtMaxRequestId, MoqtFetch, MoqtFetchCancel, MoqtFetchOk,
+                   MoqtFetchError, MoqtRequestsBlocked, MoqtPublish,
+                   MoqtPublishOk, MoqtPublishError, MoqtObjectAck>;
 
   // The total actual size of the message.
   size_t total_message_size() const { return wire_image_size_; }
@@ -969,24 +971,24 @@
   };
 };
 
-class QUICHE_NO_EXPORT AnnounceMessage : public TestMessageBase {
+class QUICHE_NO_EXPORT PublishNamespaceMessage : public TestMessageBase {
  public:
-  AnnounceMessage() : TestMessageBase() {
+  PublishNamespaceMessage() : TestMessageBase() {
     SetWireImage(raw_packet_, sizeof(raw_packet_));
   }
 
   bool EqualFieldValues(MessageStructuredData& values) const override {
-    auto cast = std::get<MoqtAnnounce>(values);
-    if (cast.request_id != announce_.request_id) {
-      QUIC_LOG(INFO) << "ANNOUNCE request ID mismatch";
+    auto cast = std::get<MoqtPublishNamespace>(values);
+    if (cast.request_id != publish_namespace_.request_id) {
+      QUIC_LOG(INFO) << "PUBLISH_NAMESPACE request ID mismatch";
       return false;
     }
-    if (cast.track_namespace != announce_.track_namespace) {
-      QUIC_LOG(INFO) << "ANNOUNCE track namespace mismatch";
+    if (cast.track_namespace != publish_namespace_.track_namespace) {
+      QUIC_LOG(INFO) << "PUBLISH_NAMESPACE track namespace mismatch";
       return false;
     }
-    if (cast.parameters != announce_.parameters) {
-      QUIC_LOG(INFO) << "ANNOUNCE parameter mismatch";
+    if (cast.parameters != publish_namespace_.parameters) {
+      QUIC_LOG(INFO) << "PUBLISH_NAMESPACE parameter mismatch";
       return false;
     }
     return true;
@@ -995,7 +997,7 @@
   void ExpandVarints() override { ExpandVarintsImpl("vvv---vvv-----"); }
 
   MessageStructuredData structured_data() const override {
-    return TestMessageBase::MessageStructuredData(announce_);
+    return TestMessageBase::MessageStructuredData(publish_namespace_);
   }
 
  private:
@@ -1006,23 +1008,23 @@
       0x03, 0x05, 0x03, 0x00, 0x62, 0x61, 0x72,  // authorization_tag = "bar"
   };
 
-  MoqtAnnounce announce_ = {
+  MoqtPublishNamespace publish_namespace_ = {
       /*request_id=*/2,
       TrackNamespace{"foo"},
       VersionSpecificParameters(AuthTokenType::kOutOfBand, "bar"),
   };
 };
 
-class QUICHE_NO_EXPORT AnnounceOkMessage : public TestMessageBase {
+class QUICHE_NO_EXPORT PublishNamespaceOkMessage : public TestMessageBase {
  public:
-  AnnounceOkMessage() : TestMessageBase() {
+  PublishNamespaceOkMessage() : TestMessageBase() {
     SetWireImage(raw_packet_, sizeof(raw_packet_));
   }
 
   bool EqualFieldValues(MessageStructuredData& values) const override {
-    auto cast = std::get<MoqtAnnounceOk>(values);
-    if (cast.request_id != announce_ok_.request_id) {
-      QUIC_LOG(INFO) << "ANNOUNCE OK MESSAGE request ID mismatch";
+    auto cast = std::get<MoqtPublishNamespaceOk>(values);
+    if (cast.request_id != publish_namespace_ok_.request_id) {
+      QUIC_LOG(INFO) << "PUBLISH_NAMESPACE OK MESSAGE request ID mismatch";
       return false;
     }
     return true;
@@ -1031,7 +1033,7 @@
   void ExpandVarints() override { ExpandVarintsImpl("v"); }
 
   MessageStructuredData structured_data() const override {
-    return TestMessageBase::MessageStructuredData(announce_ok_);
+    return TestMessageBase::MessageStructuredData(publish_namespace_ok_);
   }
 
  private:
@@ -1039,29 +1041,29 @@
       0x07, 0x00, 0x01, 0x01,  // request_id = 1
   };
 
-  MoqtAnnounceOk announce_ok_ = {
+  MoqtPublishNamespaceOk publish_namespace_ok_ = {
       /*request_id=*/1,
   };
 };
 
-class QUICHE_NO_EXPORT AnnounceErrorMessage : public TestMessageBase {
+class QUICHE_NO_EXPORT PublishNamespaceErrorMessage : public TestMessageBase {
  public:
-  AnnounceErrorMessage() : TestMessageBase() {
+  PublishNamespaceErrorMessage() : TestMessageBase() {
     SetWireImage(raw_packet_, sizeof(raw_packet_));
   }
 
   bool EqualFieldValues(MessageStructuredData& values) const override {
-    auto cast = std::get<MoqtAnnounceError>(values);
-    if (cast.request_id != announce_error_.request_id) {
-      QUIC_LOG(INFO) << "ANNOUNCE_ERROR request ID mismatch";
+    auto cast = std::get<MoqtPublishNamespaceError>(values);
+    if (cast.request_id != publish_namespace_error_.request_id) {
+      QUIC_LOG(INFO) << "PUBLISH_NAMESPACE_ERROR request ID mismatch";
       return false;
     }
-    if (cast.error_code != announce_error_.error_code) {
-      QUIC_LOG(INFO) << "ANNOUNCE_ERROR error code mismatch";
+    if (cast.error_code != publish_namespace_error_.error_code) {
+      QUIC_LOG(INFO) << "PUBLISH_NAMESPACE_ERROR error code mismatch";
       return false;
     }
-    if (cast.error_reason != announce_error_.error_reason) {
-      QUIC_LOG(INFO) << "ANNOUNCE_ERROR error reason mismatch";
+    if (cast.error_reason != publish_namespace_error_.error_reason) {
+      QUIC_LOG(INFO) << "PUBLISH_NAMESPACE_ERROR error reason mismatch";
       return false;
     }
     return true;
@@ -1070,7 +1072,7 @@
   void ExpandVarints() override { ExpandVarintsImpl("vvv---"); }
 
   MessageStructuredData structured_data() const override {
-    return TestMessageBase::MessageStructuredData(announce_error_);
+    return TestMessageBase::MessageStructuredData(publish_namespace_error_);
   }
 
  private:
@@ -1080,23 +1082,23 @@
       0x03, 0x62, 0x61, 0x72,  // reason_phrase = "bar"
   };
 
-  MoqtAnnounceError announce_error_ = {
+  MoqtPublishNamespaceError publish_namespace_error_ = {
       /*request_id=*/1,
       RequestErrorCode::kNotSupported,
       /*reason_phrase=*/"bar",
   };
 };
 
-class QUICHE_NO_EXPORT UnannounceMessage : public TestMessageBase {
+class QUICHE_NO_EXPORT PublishNamespaceDoneMessage : public TestMessageBase {
  public:
-  UnannounceMessage() : TestMessageBase() {
+  PublishNamespaceDoneMessage() : TestMessageBase() {
     SetWireImage(raw_packet_, sizeof(raw_packet_));
   }
 
   bool EqualFieldValues(MessageStructuredData& values) const override {
-    auto cast = std::get<MoqtUnannounce>(values);
-    if (cast.track_namespace != unannounce_.track_namespace) {
-      QUIC_LOG(INFO) << "UNANNOUNCE track namespace mismatch";
+    auto cast = std::get<MoqtPublishNamespaceDone>(values);
+    if (cast.track_namespace != publish_namespace_done_.track_namespace) {
+      QUIC_LOG(INFO) << "PUBLISH_NAMESPACE_DONE track namespace mismatch";
       return false;
     }
     return true;
@@ -1105,7 +1107,7 @@
   void ExpandVarints() override { ExpandVarintsImpl("vv---"); }
 
   MessageStructuredData structured_data() const override {
-    return TestMessageBase::MessageStructuredData(unannounce_);
+    return TestMessageBase::MessageStructuredData(publish_namespace_done_);
   }
 
  private:
@@ -1113,29 +1115,29 @@
       0x09, 0x00, 0x05, 0x01, 0x03, 0x66, 0x6f, 0x6f,  // track_namespace
   };
 
-  MoqtUnannounce unannounce_ = {
+  MoqtPublishNamespaceDone publish_namespace_done_ = {
       TrackNamespace("foo"),
   };
 };
 
-class QUICHE_NO_EXPORT AnnounceCancelMessage : public TestMessageBase {
+class QUICHE_NO_EXPORT PublishNamespaceCancelMessage : public TestMessageBase {
  public:
-  AnnounceCancelMessage() : TestMessageBase() {
+  PublishNamespaceCancelMessage() : TestMessageBase() {
     SetWireImage(raw_packet_, sizeof(raw_packet_));
   }
 
   bool EqualFieldValues(MessageStructuredData& values) const override {
-    auto cast = std::get<MoqtAnnounceCancel>(values);
-    if (cast.track_namespace != announce_cancel_.track_namespace) {
-      QUIC_LOG(INFO) << "ANNOUNCE CANCEL track namespace mismatch";
+    auto cast = std::get<MoqtPublishNamespaceCancel>(values);
+    if (cast.track_namespace != publish_namespace_cancel_.track_namespace) {
+      QUIC_LOG(INFO) << "PUBLISH_NAMESPACE CANCEL track namespace mismatch";
       return false;
     }
-    if (cast.error_code != announce_cancel_.error_code) {
-      QUIC_LOG(INFO) << "ANNOUNCE CANCEL error code mismatch";
+    if (cast.error_code != publish_namespace_cancel_.error_code) {
+      QUIC_LOG(INFO) << "PUBLISH_NAMESPACE CANCEL error code mismatch";
       return false;
     }
-    if (cast.error_reason != announce_cancel_.error_reason) {
-      QUIC_LOG(INFO) << "ANNOUNCE CANCEL reason phrase mismatch";
+    if (cast.error_reason != publish_namespace_cancel_.error_reason) {
+      QUIC_LOG(INFO) << "PUBLISH_NAMESPACE CANCEL reason phrase mismatch";
       return false;
     }
     return true;
@@ -1144,7 +1146,7 @@
   void ExpandVarints() override { ExpandVarintsImpl("vv---vv---"); }
 
   MessageStructuredData structured_data() const override {
-    return TestMessageBase::MessageStructuredData(announce_cancel_);
+    return TestMessageBase::MessageStructuredData(publish_namespace_cancel_);
   }
 
  private:
@@ -1155,7 +1157,7 @@
       0x03, 0x62, 0x61, 0x72,  // error_reason = "bar"
   };
 
-  MoqtAnnounceCancel announce_cancel_ = {
+  MoqtPublishNamespaceCancel publish_namespace_cancel_ = {
       TrackNamespace("foo"),
       RequestErrorCode::kNotSupported,
       /*error_reason=*/"bar",
@@ -2061,16 +2063,16 @@
       return std::make_unique<PublishDoneMessage>();
     case MoqtMessageType::kSubscribeUpdate:
       return std::make_unique<SubscribeUpdateMessage>();
-    case MoqtMessageType::kAnnounce:
-      return std::make_unique<AnnounceMessage>();
-    case MoqtMessageType::kAnnounceOk:
-      return std::make_unique<AnnounceOkMessage>();
-    case MoqtMessageType::kAnnounceError:
-      return std::make_unique<AnnounceErrorMessage>();
-    case MoqtMessageType::kUnannounce:
-      return std::make_unique<UnannounceMessage>();
-    case MoqtMessageType::kAnnounceCancel:
-      return std::make_unique<AnnounceCancelMessage>();
+    case MoqtMessageType::kPublishNamespace:
+      return std::make_unique<PublishNamespaceMessage>();
+    case MoqtMessageType::kPublishNamespaceOk:
+      return std::make_unique<PublishNamespaceOkMessage>();
+    case MoqtMessageType::kPublishNamespaceError:
+      return std::make_unique<PublishNamespaceErrorMessage>();
+    case MoqtMessageType::kPublishNamespaceDone:
+      return std::make_unique<PublishNamespaceDoneMessage>();
+    case MoqtMessageType::kPublishNamespaceCancel:
+      return std::make_unique<PublishNamespaceCancelMessage>();
     case MoqtMessageType::kTrackStatus:
       return std::make_unique<TrackStatusMessage>();
     case MoqtMessageType::kTrackStatusOk:
diff --git a/quiche/quic/moqt/tools/chat_client.cc b/quiche/quic/moqt/tools/chat_client.cc
index 1bfb70e..ab6f73c 100644
--- a/quiche/quic/moqt/tools/chat_client.cc
+++ b/quiche/quic/moqt/tools/chat_client.cc
@@ -27,6 +27,7 @@
 #include "quiche/quic/moqt/moqt_priority.h"
 #include "quiche/quic/moqt/moqt_publisher.h"
 #include "quiche/quic/moqt/moqt_session.h"
+#include "quiche/quic/moqt/moqt_session_interface.h"
 #include "quiche/quic/moqt/tools/moq_chat.h"
 #include "quiche/quic/moqt/tools/moqt_client.h"
 #include "quiche/quic/platform/api/quic_default_proof_providers.h"
@@ -39,35 +40,37 @@
 
 namespace moqt::moq_chat {
 
-std::optional<MoqtAnnounceErrorReason> ChatClient::OnIncomingAnnounce(
+std::optional<MoqtPublishNamespaceErrorReason>
+ChatClient::OnIncomingPublishNamespace(
     const moqt::TrackNamespace& track_namespace,
     std::optional<VersionSpecificParameters> parameters) {
   if (track_namespace == GetUserNamespace(my_track_name_)) {
-    // Ignore ANNOUNCE for my own track.
-    return std::optional<MoqtAnnounceErrorReason>();
+    // Ignore PUBLISH_NAMESPACE for my own track.
+    return std::optional<MoqtPublishNamespaceErrorReason>();
   }
   std::optional<FullTrackName> track_name = ConstructTrackNameFromNamespace(
       track_namespace, GetChatId(my_track_name_));
   if (!parameters.has_value()) {
-    std::cout << "UNANNOUNCE for " << track_namespace.ToString() << "\n";
+    std::cout << "PUBLISH_NAMESPACE_DONE for " << track_namespace.ToString()
+              << "\n";
     if (track_name.has_value() && other_users_.contains(*track_name)) {
       session_->Unsubscribe(*track_name);
       other_users_.erase(*track_name);
     }
     return std::nullopt;
   }
-  std::cout << "ANNOUNCE for " << track_namespace.ToString() << "\n";
+  std::cout << "PUBLISH_NAMESPACE for " << track_namespace.ToString() << "\n";
   if (!track_name.has_value()) {
-    std::cout << "ANNOUNCE rejected, invalid namespace\n";
-    return std::make_optional<MoqtAnnounceErrorReason>(
+    std::cout << "PUBLISH_NAMESPACE rejected, invalid namespace\n";
+    return std::make_optional<MoqtPublishNamespaceErrorReason>(
         RequestErrorCode::kTrackDoesNotExist, "Not a subscribed namespace");
   }
   if (other_users_.contains(*track_name)) {
-    std::cout << "Duplicate ANNOUNCE, send OK and ignore\n";
+    std::cout << "Duplicate PUBLISH_NAMESPACE, send OK and ignore\n";
     return std::nullopt;
   }
   if (GetUsername(my_track_name_) == GetUsername(*track_name)) {
-    std::cout << "ANNOUNCE for a previous instance of my track, "
+    std::cout << "PUBLISH_NAMESPACE for a previous instance of my track, "
                  "do not subscribe\n";
     return std::nullopt;
   }
@@ -78,7 +81,7 @@
     ++subscribes_to_make_;
     other_users_.emplace(*track_name);
   }
-  return std::nullopt;  // Send ANNOUNCE_OK.
+  return std::nullopt;  // Send PUBLISH_NAMESPACE_OK.
 }
 
 ChatClient::ChatClient(const quic::QuicServerId& server_id,
@@ -128,8 +131,8 @@
   session_callbacks_.session_deleted_callback = [this]() {
     session_ = nullptr;
   };
-  session_callbacks_.incoming_announce_callback =
-      absl::bind_front(&ChatClient::OnIncomingAnnounce, this);
+  session_callbacks_.incoming_publish_namespace_callback =
+      absl::bind_front(&ChatClient::OnIncomingPublishNamespace, this);
   interface_->Initialize(
       [this](absl::string_view input_message) {
         OnTerminalLineInput(input_message);
@@ -150,9 +153,9 @@
     return;
   }
   if (input_message == "/exit") {
-    // Clean teardown of SUBSCRIBE_NAMESPACE, ANNOUNCE, SUBSCRIBE.
+    // Clean teardown of SUBSCRIBE_NAMESPACE, PUBLISH_NAMESPACE, SUBSCRIBE.
     session_->UnsubscribeNamespace(GetChatNamespace(my_track_name_));
-    session_->Unannounce(GetUserNamespace(my_track_name_));
+    session_->PublishNamespaceDone(GetUserNamespace(my_track_name_));
     for (const auto& track_name : other_users_) {
       session_->Unsubscribe(track_name);
     }
@@ -205,7 +208,7 @@
   client_->WriteToOutput(GetUsername(*it), object);
 }
 
-bool ChatClient::AnnounceAndSubscribeNamespace() {
+bool ChatClient::PublishNamespaceAndSubscribeNamespace() {
   session_ = client_->session();
   if (session_ == nullptr) {
     std::cout << "Failed to connect.\n";
@@ -217,26 +220,29 @@
       my_track_name_, MoqtForwardingPreference::kSubgroup);
   publisher_.Add(queue_);
   session_->set_publisher(&publisher_);
-  MoqtOutgoingAnnounceCallback announce_callback =
+  MoqtOutgoingPublishNamespaceCallback publish_namespace_callback =
       [this](TrackNamespace track_namespace,
-             std::optional<MoqtAnnounceErrorReason> reason) {
+             std::optional<MoqtPublishNamespaceErrorReason> reason) {
         if (reason.has_value()) {
-          std::cout << "ANNOUNCE rejected, " << reason->reason_phrase << "\n";
-          session_->Error(MoqtError::kInternalError, "Local ANNOUNCE rejected");
+          std::cout << "PUBLISH_NAMESPACE rejected, " << reason->reason_phrase
+                    << "\n";
+          session_->Error(MoqtError::kInternalError,
+                          "Local PUBLISH_NAMESPACE rejected");
           return;
         }
-        std::cout << "ANNOUNCE for " << track_namespace.ToString()
+        std::cout << "PUBLISH_NAMESPACE for " << track_namespace.ToString()
                   << " accepted\n";
         return;
       };
   std::cout << "Announcing " << GetUserNamespace(my_track_name_).ToString()
             << "\n";
-  session_->Announce(GetUserNamespace(my_track_name_),
-                     std::move(announce_callback), VersionSpecificParameters());
+  session_->PublishNamespace(GetUserNamespace(my_track_name_),
+                             std::move(publish_namespace_callback),
+                             VersionSpecificParameters());
 
-  // Send SUBSCRIBE_ANNOUNCE. Pop 3 levels of namespace to get to {moq-chat,
-  // chat-id}
-  MoqtOutgoingSubscribeNamespaceCallback subscribe_announces_callback =
+  // Send SUBSCRIBE_NAMESPACE. Pop 3 levels of namespace to get to
+  // {moq-chat, chat-id}
+  MoqtOutgoingSubscribeNamespaceCallback subscribe_namespace_callback =
       [this](TrackNamespace track_namespace,
              std::optional<RequestErrorCode> error, absl::string_view reason) {
         if (error.has_value()) {
@@ -252,7 +258,7 @@
   VersionSpecificParameters parameters(
       AuthTokenType::kOutOfBand, std::string(GetUsername(my_track_name_)));
   session_->SubscribeNamespace(GetChatNamespace(my_track_name_),
-                               std::move(subscribe_announces_callback),
+                               std::move(subscribe_namespace_callback),
                                parameters);
 
   while (session_is_open_ && is_syncing()) {
diff --git a/quiche/quic/moqt/tools/chat_client.h b/quiche/quic/moqt/tools/chat_client.h
index fcb9981..85becbf 100644
--- a/quiche/quic/moqt/tools/chat_client.h
+++ b/quiche/quic/moqt/tools/chat_client.h
@@ -112,7 +112,7 @@
   };
 
   // Returns false on error.
-  bool AnnounceAndSubscribeNamespace();
+  bool PublishNamespaceAndSubscribeNamespace();
 
   bool session_is_open() const { return session_is_open_; }
 
@@ -126,8 +126,8 @@
 
  private:
   void RunEventLoop() { event_loop_->RunEventLoopOnce(kChatEventLoopDuration); }
-  // Callback for incoming announces.
-  std::optional<MoqtAnnounceErrorReason> OnIncomingAnnounce(
+  // Callback for incoming publish_namespaces.
+  std::optional<MoqtPublishNamespaceErrorReason> OnIncomingPublishNamespace(
       const moqt::TrackNamespace& track_namespace,
       std::optional<VersionSpecificParameters> parameters);
 
@@ -150,7 +150,7 @@
   absl::flat_hash_set<FullTrackName> other_users_;
   int subscribes_to_make_ = 0;
 
-  // Related to subscriptions/announces
+  // Related to subscriptions/publish_namespaces
   // TODO: One for each subscribe
   RemoteTrackVisitor remote_track_visitor_;
 
diff --git a/quiche/quic/moqt/tools/chat_client_bin.cc b/quiche/quic/moqt/tools/chat_client_bin.cc
index e627ea4..c391c8c 100644
--- a/quiche/quic/moqt/tools/chat_client_bin.cc
+++ b/quiche/quic/moqt/tools/chat_client_bin.cc
@@ -152,7 +152,7 @@
   if (!client.Connect(path)) {
     return 1;
   }
-  if (!client.AnnounceAndSubscribeNamespace()) {
+  if (!client.PublishNamespaceAndSubscribeNamespace()) {
     return 1;
   }
   client.IoLoop();
diff --git a/quiche/quic/moqt/tools/chat_server.cc b/quiche/quic/moqt/tools/chat_server.cc
index 4c64466..fa7d5d4 100644
--- a/quiche/quic/moqt/tools/chat_server.cc
+++ b/quiche/quic/moqt/tools/chat_server.cc
@@ -26,32 +26,34 @@
 
 namespace moqt::moq_chat {
 
-std::optional<MoqtAnnounceErrorReason>
-ChatServer::ChatServerSessionHandler::OnIncomingAnnounce(
+std::optional<MoqtPublishNamespaceErrorReason>
+ChatServer::ChatServerSessionHandler::OnIncomingPublishNamespace(
     const moqt::TrackNamespace& track_namespace,
     std::optional<VersionSpecificParameters> parameters) {
   if (track_name_.has_value() &&
       GetUserNamespace(*track_name_) != track_namespace) {
     // ChatServer only supports one track per client session at a time. Return
-    // ANNOUNCE_OK and exit.
+    // PUBLISH_NAMESPACE_OK and exit.
     return std::nullopt;
   }
-  // Accept the ANNOUNCE regardless of the chat_id.
+  // Accept the PUBLISH_NAMESPACE regardless of the chat_id.
   track_name_ = ConstructTrackNameFromNamespace(track_namespace,
                                                 GetChatId(track_namespace));
   if (!track_name_.has_value()) {
-    std::cout << "Malformed ANNOUNCE namespace\n";
-    return MoqtAnnounceErrorReason(RequestErrorCode::kTrackDoesNotExist,
-                                   "Not a valid namespace for this chat.");
+    std::cout << "Malformed PUBLISH_NAMESPACE namespace\n";
+    return MoqtPublishNamespaceErrorReason(
+        RequestErrorCode::kTrackDoesNotExist,
+        "Not a valid namespace for this chat.");
   }
   if (!parameters.has_value()) {
-    std::cout << "Received UNANNOUNCE for " << track_namespace.ToString()
-              << "\n";
+    std::cout << "Received PUBLISH_NAMESPACE_DONE for "
+              << track_namespace.ToString() << "\n";
     server_->DeleteUser(*track_name_);
     track_name_.reset();
     return std::nullopt;
   }
-  std::cout << "Received ANNOUNCE for " << track_namespace.ToString() << "\n";
+  std::cout << "Received PUBLISH_NAMESPACE for " << track_namespace.ToString()
+            << "\n";
   session_->SubscribeCurrentObject(*track_name_,
                                    server_->remote_track_visitor(),
                                    moqt::VersionSpecificParameters());
@@ -59,11 +61,11 @@
   return std::nullopt;
 }
 
-void ChatServer::ChatServerSessionHandler::OnOutgoingAnnounceReply(
+void ChatServer::ChatServerSessionHandler::OnOutgoingPublishNamespaceReply(
     TrackNamespace track_namespace,
-    std::optional<MoqtAnnounceErrorReason> error_message) {
+    std::optional<MoqtPublishNamespaceErrorReason> error_message) {
   // Log the result; the server doesn't really care.
-  std::cout << "ANNOUNCE for " << track_namespace.ToString();
+  std::cout << "PUBLISH_NAMESPACE for " << track_namespace.ToString();
   if (error_message.has_value()) {
     std::cout << " failed with error: " << error_message->reason_phrase << "\n";
   } else {
@@ -74,8 +76,8 @@
 ChatServer::ChatServerSessionHandler::ChatServerSessionHandler(
     MoqtSession* session, ChatServer* server)
     : session_(session), server_(server) {
-  session_->callbacks().incoming_announce_callback = absl::bind_front(
-      &ChatServer::ChatServerSessionHandler::OnIncomingAnnounce, this);
+  session_->callbacks().incoming_publish_namespace_callback = absl::bind_front(
+      &ChatServer::ChatServerSessionHandler::OnIncomingPublishNamespace, this);
   session_->callbacks().session_terminated_callback =
       [this](absl::string_view error_message) {
         std::cout << "Session terminated, reason = " << error_message << "\n";
@@ -84,7 +86,7 @@
           server_->DeleteUser(*track_name_);
         }
       };
-  session_->callbacks().incoming_subscribe_announces_callback =
+  session_->callbacks().incoming_subscribe_namespace_callback =
       [this](const moqt::TrackNamespace& chat_namespace,
              std::optional<VersionSpecificParameters> parameters) {
         if (parameters.has_value()) {
@@ -104,19 +106,19 @@
         if (!parameters.has_value()) {
           return std::optional<MoqtSubscribeErrorReason>();
         }
-        // Send all ANNOUNCE.
+        // Send all PUBLISH_NAMESPACE.
         for (auto& [track_name, queue] : server_->user_queues_) {
-          std::cout << "Sending ANNOUNCE for "
+          std::cout << "Sending PUBLISH_NAMESPACE for "
                     << GetUserNamespace(track_name).ToString() << "\n";
           if (track_name_.has_value() &&
               GetUsername(*track_name_) == GetUsername(track_name)) {
-            // Don't ANNOUNCE a client to itself.
+            // Don't PUBLISH_NAMESPACE a client to itself.
             continue;
           }
-          session_->Announce(
+          session_->PublishNamespace(
               GetUserNamespace(track_name),
               absl::bind_front(&ChatServer::ChatServerSessionHandler::
-                                   OnOutgoingAnnounceReply,
+                                   OnOutgoingPublishNamespaceReply,
                                this),
               moqt::VersionSpecificParameters());
         }
@@ -202,7 +204,7 @@
       MoqtDeliveryOrder::kAscending, quic::QuicTime::Infinite());
   publisher_.Add(user_queues_[track_name]);
   for (auto& session : sessions_) {
-    session.AnnounceIfSubscribed(track_name.track_namespace());
+    session.PublishNamespaceIfSubscribed(track_name.track_namespace());
   }
 }
 
@@ -216,7 +218,7 @@
   publisher_.Delete(track_name);
   TrackNamespace track_namespace = GetUserNamespace(track_name);
   for (auto& session : sessions_) {
-    session.UnannounceIfSubscribed(track_namespace);
+    session.PublishNamespaceDoneIfSubscribed(track_namespace);
   }
   if (user_queues_.empty()) {
     std::cout << "No more users!\n";
diff --git a/quiche/quic/moqt/tools/chat_server.h b/quiche/quic/moqt/tools/chat_server.h
index 468845f..971e49e 100644
--- a/quiche/quic/moqt/tools/chat_server.h
+++ b/quiche/quic/moqt/tools/chat_server.h
@@ -64,14 +64,14 @@
       it_ = it;
     }
 
-    void AnnounceIfSubscribed(TrackNamespace track_namespace) {
+    void PublishNamespaceIfSubscribed(TrackNamespace track_namespace) {
       for (const TrackNamespace& subscribed_namespace :
            subscribed_namespaces_) {
         if (track_namespace.InNamespace(subscribed_namespace)) {
-          session_->Announce(
+          session_->PublishNamespace(
               track_namespace,
               absl::bind_front(&ChatServer::ChatServerSessionHandler::
-                                   OnOutgoingAnnounceReply,
+                                   OnOutgoingPublishNamespaceReply,
                                this),
               VersionSpecificParameters());
           return;
@@ -79,24 +79,24 @@
       }
     }
 
-    void UnannounceIfSubscribed(TrackNamespace track_namespace) {
+    void PublishNamespaceDoneIfSubscribed(TrackNamespace track_namespace) {
       for (const TrackNamespace& subscribed_namespace :
            subscribed_namespaces_) {
         if (track_namespace.InNamespace(subscribed_namespace)) {
-          session_->Unannounce(track_namespace);
+          session_->PublishNamespaceDone(track_namespace);
           return;
         }
       }
     }
 
    private:
-    // Callback for incoming announces.
-    std::optional<MoqtAnnounceErrorReason> OnIncomingAnnounce(
+    // Callback for incoming publish_namespaces.
+    std::optional<MoqtPublishNamespaceErrorReason> OnIncomingPublishNamespace(
         const moqt::TrackNamespace& track_namespace,
         std::optional<VersionSpecificParameters> parameters);
-    void OnOutgoingAnnounceReply(
+    void OnOutgoingPublishNamespaceReply(
         TrackNamespace track_namespace,
-        std::optional<MoqtAnnounceErrorReason> error_message);
+        std::optional<MoqtPublishNamespaceErrorReason> error_message);
 
     MoqtSession* session_;  // Not owned.
     // This design assumes that each server has exactly one username, although
diff --git a/quiche/quic/moqt/tools/moq_chat.h b/quiche/quic/moqt/tools/moq_chat.h
index 9d43814..ea40a84 100644
--- a/quiche/quic/moqt/tools/moq_chat.h
+++ b/quiche/quic/moqt/tools/moq_chat.h
@@ -44,7 +44,7 @@
 std::optional<FullTrackName> ConstructTrackNameFromNamespace(
     const TrackNamespace& track_namespace, absl::string_view chat_id);
 
-// Strips "chat" from the end of |track_name| to use in ANNOUNCE.
+// Strips "chat" from the end of |track_name| to use in PUBLISH_NAMESPACE.
 const TrackNamespace& GetUserNamespace(const FullTrackName& track_name);
 
 // Returns {"moq-chat", chat-id}, useful for SUBSCRIBE_NAMESPACE.
diff --git a/quiche/quic/moqt/tools/moq_chat_end_to_end_test.cc b/quiche/quic/moqt/tools/moq_chat_end_to_end_test.cc
index f808d47..0527dfe 100644
--- a/quiche/quic/moqt/tools/moq_chat_end_to_end_test.cc
+++ b/quiche/quic/moqt/tools/moq_chat_end_to_end_test.cc
@@ -96,8 +96,8 @@
 TEST_F(MoqChatEndToEndTest, EndToEndTest) {
   EXPECT_TRUE(client1_->Connect(moqt::moq_chat::kWebtransPath));
   EXPECT_TRUE(client2_->Connect(moqt::moq_chat::kWebtransPath));
-  EXPECT_TRUE(client1_->AnnounceAndSubscribeNamespace());
-  EXPECT_TRUE(client2_->AnnounceAndSubscribeNamespace());
+  EXPECT_TRUE(client1_->PublishNamespaceAndSubscribeNamespace());
+  EXPECT_TRUE(client2_->PublishNamespaceAndSubscribeNamespace());
   SendAndWaitForOutput(interface1_, interface2_, "client1", "Hello");
   SendAndWaitForOutput(interface2_, interface1_, "client2", "Hi");
   SendAndWaitForOutput(interface1_, interface2_, "client1", "How are you?");
@@ -113,8 +113,8 @@
 TEST_F(MoqChatEndToEndTest, LeaveAndRejoin) {
   EXPECT_TRUE(client1_->Connect(moqt::moq_chat::kWebtransPath));
   EXPECT_TRUE(client2_->Connect(moqt::moq_chat::kWebtransPath));
-  EXPECT_TRUE(client1_->AnnounceAndSubscribeNamespace());
-  EXPECT_TRUE(client2_->AnnounceAndSubscribeNamespace());
+  EXPECT_TRUE(client1_->PublishNamespaceAndSubscribeNamespace());
+  EXPECT_TRUE(client2_->PublishNamespaceAndSubscribeNamespace());
   SendAndWaitForOutput(interface1_, interface2_, "client1", "Hello");
   SendAndWaitForOutput(interface2_, interface1_, "client2", "Hi");
 
@@ -136,7 +136,7 @@
       std::move(if1bptr), "test_chat", "client1", "device1",
       server_.moqt_server().quic_server().event_loop());
   EXPECT_TRUE(client1_->Connect(moqt::moq_chat::kWebtransPath));
-  EXPECT_TRUE(client1_->AnnounceAndSubscribeNamespace());
+  EXPECT_TRUE(client1_->PublishNamespaceAndSubscribeNamespace());
   SendAndWaitForOutput(interface1b_, interface2_, "client1", "Hello again");
   SendAndWaitForOutput(interface2_, interface1b_, "client2", "Hi again");
 }
diff --git a/quiche/quic/moqt/tools/moqt_ingestion_server_bin.cc b/quiche/quic/moqt/tools/moqt_ingestion_server_bin.cc
index 8fd51fe..c59955f 100644
--- a/quiche/quic/moqt/tools/moqt_ingestion_server_bin.cc
+++ b/quiche/quic/moqt/tools/moqt_ingestion_server_bin.cc
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 // moqt_ingestion_server is a simple command-line utility that accepts incoming
-// ANNOUNCE messages and records them into a file.
+// PUBLISH_NAMESPACE messages and records them into a file.
 
 #include <sys/stat.h>
 
@@ -112,21 +112,24 @@
   explicit MoqtIngestionHandler(MoqtSession* session,
                                 absl::string_view output_root)
       : session_(session), output_root_(output_root) {
-    session_->callbacks().incoming_announce_callback =
-        absl::bind_front(&MoqtIngestionHandler::OnAnnounceReceived, this);
+    session_->callbacks().incoming_publish_namespace_callback =
+        absl::bind_front(&MoqtIngestionHandler::OnPublishNamespaceReceived,
+                         this);
   }
 
-  // TODO(martinduke): Handle when |announce| is false (UNANNOUNCE).
-  std::optional<MoqtAnnounceErrorReason> OnAnnounceReceived(
+  // TODO(martinduke): Handle when |publish_namespace| is false
+  // (PUBLISH_NAMESPACE_DONE).
+  std::optional<MoqtPublishNamespaceErrorReason> OnPublishNamespaceReceived(
       TrackNamespace track_namespace,
       std::optional<VersionSpecificParameters> /*parameters*/) {
     if (!IsValidTrackNamespace(track_namespace) &&
         !quiche::GetQuicheCommandLineFlag(
             FLAGS_allow_invalid_track_namespaces)) {
-      QUICHE_DLOG(WARNING) << "Rejected remote announce as it contained "
-                              "disallowed characters; namespace: "
-                           << track_namespace;
-      return MoqtAnnounceErrorReason{
+      QUICHE_DLOG(WARNING)
+          << "Rejected remote publish_namespace as it contained "
+             "disallowed characters; namespace: "
+          << track_namespace;
+      return MoqtPublishNamespaceErrorReason{
           RequestErrorCode::kInternalError,
           "Track namespace contains disallowed characters"};
     }
@@ -146,8 +149,9 @@
       subscribed_namespaces_.erase(it);
       QUICHE_LOG(ERROR) << "Failed to create directory " << directory_path
                         << "; " << status;
-      return MoqtAnnounceErrorReason{RequestErrorCode::kInternalError,
-                                     "Failed to create output directory"};
+      return MoqtPublishNamespaceErrorReason{
+          RequestErrorCode::kInternalError,
+          "Failed to create output directory"};
     }
 
     std::string track_list = quiche::GetQuicheCommandLineFlag(FLAGS_tracks);
diff --git a/quiche/quic/moqt/tools/moqt_mock_visitor.h b/quiche/quic/moqt/tools/moqt_mock_visitor.h
index 1dbc446..ac1571d 100644
--- a/quiche/quic/moqt/tools/moqt_mock_visitor.h
+++ b/quiche/quic/moqt/tools/moqt_mock_visitor.h
@@ -12,13 +12,14 @@
 #include <variant>
 
 #include "absl/status/status.h"
-#include "absl/status/statusor.h"
 #include "absl/strings/string_view.h"
 #include "quiche/quic/core/quic_time.h"
 #include "quiche/quic/moqt/moqt_messages.h"
+#include "quiche/quic/moqt/moqt_object.h"
 #include "quiche/quic/moqt/moqt_priority.h"
 #include "quiche/quic/moqt/moqt_publisher.h"
 #include "quiche/quic/moqt/moqt_session.h"
+#include "quiche/quic/moqt/moqt_session_callbacks.h"
 #include "quiche/quic/moqt/moqt_track.h"
 #include "quiche/common/platform/api/quiche_test.h"
 
@@ -29,17 +30,17 @@
   testing::MockFunction<void(absl::string_view)> goaway_received_callback;
   testing::MockFunction<void(absl::string_view)> session_terminated_callback;
   testing::MockFunction<void()> session_deleted_callback;
-  testing::MockFunction<std::optional<MoqtAnnounceErrorReason>(
+  testing::MockFunction<std::optional<MoqtPublishNamespaceErrorReason>(
       const TrackNamespace&, std::optional<VersionSpecificParameters>)>
-      incoming_announce_callback;
+      incoming_publish_namespace_callback;
   testing::MockFunction<std::optional<MoqtSubscribeErrorReason>(
       TrackNamespace, std::optional<VersionSpecificParameters>)>
-      incoming_subscribe_announces_callback;
+      incoming_subscribe_namespace_callback;
 
   MockSessionCallbacks() {
-    ON_CALL(incoming_announce_callback, Call(testing::_, testing::_))
-        .WillByDefault(DefaultIncomingAnnounceCallback);
-    ON_CALL(incoming_subscribe_announces_callback, Call(testing::_, testing::_))
+    ON_CALL(incoming_publish_namespace_callback, Call(testing::_, testing::_))
+        .WillByDefault(DefaultIncomingPublishNamespaceCallback);
+    ON_CALL(incoming_subscribe_namespace_callback, Call(testing::_, testing::_))
         .WillByDefault(DefaultIncomingSubscribeNamespaceCallback);
   }
 
@@ -49,8 +50,8 @@
         goaway_received_callback.AsStdFunction(),
         session_terminated_callback.AsStdFunction(),
         session_deleted_callback.AsStdFunction(),
-        incoming_announce_callback.AsStdFunction(),
-        incoming_subscribe_announces_callback.AsStdFunction()};
+        incoming_publish_namespace_callback.AsStdFunction(),
+        incoming_subscribe_namespace_callback.AsStdFunction()};
   }
 };