Clarify NetworkControl interface: result of each function must be used

Bug: None
Change-Id: Iff93513d36ed60d2c1bcbabb4dd5f8716e40d183
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/157860
Reviewed-by: Sebastian Jansson <srte@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29558}
diff --git a/api/transport/BUILD.gn b/api/transport/BUILD.gn
index cd8c01b..12200a6 100644
--- a/api/transport/BUILD.gn
+++ b/api/transport/BUILD.gn
@@ -43,6 +43,7 @@
     "../units:data_size",
     "../units:time_delta",
     "../units:timestamp",
+    "//third_party/abseil-cpp/absl/base:core_headers",
     "//third_party/abseil-cpp/absl/types:optional",
   ]
 }
diff --git a/api/transport/network_control.h b/api/transport/network_control.h
index 1ba65ee..6fc1f7c 100644
--- a/api/transport/network_control.h
+++ b/api/transport/network_control.h
@@ -14,6 +14,7 @@
 
 #include <memory>
 
+#include "absl/base/attributes.h"
 #include "api/rtc_event_log/rtc_event_log.h"
 #include "api/transport/network_types.h"
 #include "api/transport/webrtc_key_value_config.h"
@@ -60,32 +61,42 @@
   virtual ~NetworkControllerInterface() = default;
 
   // Called when network availabilty changes.
-  virtual NetworkControlUpdate OnNetworkAvailability(NetworkAvailability) = 0;
+  virtual NetworkControlUpdate OnNetworkAvailability(NetworkAvailability)
+      ABSL_MUST_USE_RESULT = 0;
   // Called when the receiving or sending endpoint changes address.
-  virtual NetworkControlUpdate OnNetworkRouteChange(NetworkRouteChange) = 0;
+  virtual NetworkControlUpdate OnNetworkRouteChange(NetworkRouteChange)
+      ABSL_MUST_USE_RESULT = 0;
   // Called periodically with a periodicy as specified by
   // NetworkControllerFactoryInterface::GetProcessInterval.
-  virtual NetworkControlUpdate OnProcessInterval(ProcessInterval) = 0;
+  virtual NetworkControlUpdate OnProcessInterval(ProcessInterval)
+      ABSL_MUST_USE_RESULT = 0;
   // Called when remotely calculated bitrate is received.
-  virtual NetworkControlUpdate OnRemoteBitrateReport(RemoteBitrateReport) = 0;
+  virtual NetworkControlUpdate OnRemoteBitrateReport(RemoteBitrateReport)
+      ABSL_MUST_USE_RESULT = 0;
   // Called round trip time has been calculated by protocol specific mechanisms.
-  virtual NetworkControlUpdate OnRoundTripTimeUpdate(RoundTripTimeUpdate) = 0;
+  virtual NetworkControlUpdate OnRoundTripTimeUpdate(RoundTripTimeUpdate)
+      ABSL_MUST_USE_RESULT = 0;
   // Called when a packet is sent on the network.
-  virtual NetworkControlUpdate OnSentPacket(SentPacket) = 0;
+  virtual NetworkControlUpdate OnSentPacket(SentPacket)
+      ABSL_MUST_USE_RESULT = 0;
   // Called when a packet is received from the remote client.
-  virtual NetworkControlUpdate OnReceivedPacket(ReceivedPacket) = 0;
+  virtual NetworkControlUpdate OnReceivedPacket(ReceivedPacket)
+      ABSL_MUST_USE_RESULT = 0;
   // Called when the stream specific configuration has been updated.
-  virtual NetworkControlUpdate OnStreamsConfig(StreamsConfig) = 0;
+  virtual NetworkControlUpdate OnStreamsConfig(StreamsConfig)
+      ABSL_MUST_USE_RESULT = 0;
   // Called when target transfer rate constraints has been changed.
-  virtual NetworkControlUpdate OnTargetRateConstraints(
-      TargetRateConstraints) = 0;
+  virtual NetworkControlUpdate OnTargetRateConstraints(TargetRateConstraints)
+      ABSL_MUST_USE_RESULT = 0;
   // Called when a protocol specific calculation of packet loss has been made.
-  virtual NetworkControlUpdate OnTransportLossReport(TransportLossReport) = 0;
+  virtual NetworkControlUpdate OnTransportLossReport(TransportLossReport)
+      ABSL_MUST_USE_RESULT = 0;
   // Called with per packet feedback regarding receive time.
   virtual NetworkControlUpdate OnTransportPacketsFeedback(
-      TransportPacketsFeedback) = 0;
+      TransportPacketsFeedback) ABSL_MUST_USE_RESULT = 0;
   // Called with network state estimate updates.
-  virtual NetworkControlUpdate OnNetworkStateEstimate(NetworkStateEstimate) = 0;
+  virtual NetworkControlUpdate OnNetworkStateEstimate(NetworkStateEstimate)
+      ABSL_MUST_USE_RESULT = 0;
 };
 
 // NetworkControllerFactoryInterface is an interface for creating a network
diff --git a/call/rtp_transport_controller_send.cc b/call/rtp_transport_controller_send.cc
index 4e8d021..83e0318 100644
--- a/call/rtp_transport_controller_send.cc
+++ b/call/rtp_transport_controller_send.cc
@@ -480,7 +480,7 @@
   task_queue_.PostTask([this, estimate] {
     RTC_DCHECK_RUN_ON(&task_queue_);
     if (controller_)
-      controller_->OnNetworkStateEstimate(estimate);
+      PostUpdates(controller_->OnNetworkStateEstimate(estimate));
   });
 }
 
diff --git a/modules/congestion_controller/goog_cc/goog_cc_network_control_unittest.cc b/modules/congestion_controller/goog_cc/goog_cc_network_control_unittest.cc
index 9503ada..0f73c7b 100644
--- a/modules/congestion_controller/goog_cc/goog_cc_network_control_unittest.cc
+++ b/modules/congestion_controller/goog_cc/goog_cc_network_control_unittest.cc
@@ -146,7 +146,7 @@
   // prescribing on which iterations it must change (like a mock would).
   void TargetBitrateTrackingSetup() {
     controller_ = factory_.Create(InitialConfig());
-    controller_->OnProcessInterval(DefaultInterval());
+    OnUpdate(controller_->OnProcessInterval(DefaultInterval()));
   }
 
   NetworkControllerConfig InitialConfig(
@@ -216,7 +216,7 @@
           CreateResult(current_time_.ms() + delay_buildup, current_time_.ms(),
                        kPayloadSize, PacedPacketInfo());
       delay_buildup += delay;
-      controller_->OnSentPacket(packet.sent_packet);
+      OnUpdate(controller_->OnSentPacket(packet.sent_packet));
       TransportPacketsFeedback feedback;
       feedback.feedback_time = packet.receive_time;
       feedback.packet_feedbacks.push_back(packet);
@@ -235,17 +235,19 @@
 TEST_F(GoogCcNetworkControllerTest, ReactsToChangedNetworkConditions) {
   // Test no change.
   AdvanceTimeMilliseconds(25);
-  controller_->OnProcessInterval(DefaultInterval());
+  OnUpdate(controller_->OnProcessInterval(DefaultInterval()));
 
   NetworkControlUpdate update;
-  controller_->OnRemoteBitrateReport(CreateBitrateReport(kInitialBitrate * 2));
+  OnUpdate(controller_->OnRemoteBitrateReport(
+      CreateBitrateReport(kInitialBitrate * 2)));
   AdvanceTimeMilliseconds(25);
   update = controller_->OnProcessInterval(DefaultInterval());
   EXPECT_EQ(update.target_rate->target_rate, kInitialBitrate * 2);
   EXPECT_EQ(update.pacer_config->data_rate(),
             kInitialBitrate * 2 * kDefaultPacingRate);
 
-  controller_->OnRemoteBitrateReport(CreateBitrateReport(kInitialBitrate));
+  OnUpdate(
+      controller_->OnRemoteBitrateReport(CreateBitrateReport(kInitialBitrate)));
   AdvanceTimeMilliseconds(25);
   update = controller_->OnProcessInterval(DefaultInterval());
   EXPECT_EQ(update.target_rate->target_rate, kInitialBitrate);