Make RtpTransportControllerSend::send_side_cc_ a direct member.

Now constructed early, and Call uses RegisterNetworkObserver.

BUG=webrtc:7135

Review-Url: https://codereview.webrtc.org/2795693003
Cr-Commit-Position: refs/heads/master@{#17566}
diff --git a/webrtc/call/call.cc b/webrtc/call/call.cc
index e9838d9..5fcacd1 100644
--- a/webrtc/call/call.cc
+++ b/webrtc/call/call.cc
@@ -92,37 +92,34 @@
  public:
   RtpTransportControllerSend(Clock* clock, webrtc::RtcEventLog* event_log);
 
-  void InitCongestionControl(SendSideCongestionController::Observer* observer);
+  void RegisterNetworkObserver(
+      SendSideCongestionController::Observer* observer);
+
+  // Implements RtpTransportControllerSendInterface
   PacketRouter* packet_router() override { return &packet_router_; }
   SendSideCongestionController* send_side_cc() override {
-    return send_side_cc_.get();
+    return &send_side_cc_;
   }
   TransportFeedbackObserver* transport_feedback_observer() override {
-    return send_side_cc_.get();
+    return &send_side_cc_;
   }
-  RtpPacketSender* packet_sender() override { return send_side_cc_->pacer(); }
+  RtpPacketSender* packet_sender() override { return send_side_cc_.pacer(); }
 
  private:
-  Clock* const clock_;
-  webrtc::RtcEventLog* const event_log_;
   PacketRouter packet_router_;
-  // Construction delayed until InitCongestionControl, since the
-  // CongestionController wants its observer as a construction time
-  // argument, and setting it later seems non-trivial.
-  std::unique_ptr<SendSideCongestionController> send_side_cc_;
+  SendSideCongestionController send_side_cc_;
 };
 
 RtpTransportControllerSend::RtpTransportControllerSend(
     Clock* clock,
     webrtc::RtcEventLog* event_log)
-    : clock_(clock), event_log_(event_log) {}
+    : send_side_cc_(clock, nullptr /* observer */, event_log, &packet_router_) {
+}
 
-void RtpTransportControllerSend::InitCongestionControl(
+void RtpTransportControllerSend::RegisterNetworkObserver(
     SendSideCongestionController::Observer* observer) {
   // Must be called only once.
-  RTC_CHECK(!send_side_cc_);
-  send_side_cc_.reset(new SendSideCongestionController(
-      clock_, observer, event_log_, &packet_router_));
+  send_side_cc_.RegisterNetworkObserver(observer);
 }
 
 }  // namespace
@@ -310,7 +307,7 @@
 
   std::map<std::string, rtc::NetworkRoute> network_routes_;
 
-  std::unique_ptr<RtpTransportControllerSend> transport_send_;
+  std::unique_ptr<RtpTransportControllerSendInterface> transport_send_;
   VieRemb remb_;
   ReceiveSideCongestionController receive_side_cc_;
   const std::unique_ptr<SendDelayStats> video_send_delay_stats_;
@@ -369,9 +366,8 @@
       configured_max_padding_bitrate_bps_(0),
       estimated_send_bitrate_kbps_counter_(clock_, nullptr, true),
       pacer_bitrate_kbps_counter_(clock_, nullptr, true),
-      transport_send_(std::move(transport_send)),
       remb_(clock_),
-      receive_side_cc_(clock_, &remb_, transport_send_->packet_router()),
+      receive_side_cc_(clock_, &remb_, transport_send->packet_router()),
       video_send_delay_stats_(new SendDelayStats(clock_)),
       start_ms_(clock_->TimeInMilliseconds()),
       worker_queue_("call_worker_queue") {
@@ -385,7 +381,8 @@
                   config.bitrate_config.start_bitrate_bps);
   }
   Trace::CreateTrace();
-  transport_send_->InitCongestionControl(this);
+  transport_send->RegisterNetworkObserver(this);
+  transport_send_ = std::move(transport_send);
   transport_send_->send_side_cc()->SignalNetworkState(kNetworkDown);
   transport_send_->send_side_cc()->SetBweBitrates(
       config_.bitrate_config.min_bitrate_bps,