Add experiment to disable ulpfec.

BUG=None

Review-Url: https://codereview.webrtc.org/2997363002
Cr-Original-Commit-Position: refs/heads/master@{#19471}
Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc
Cr-Mirrored-Commit: 60e10c794e8d5740e7295a2e0f0bc697eecdaa3b
diff --git a/video/video_send_stream.cc b/video/video_send_stream.cc
index 4b75f95..28ef003 100644
--- a/video/video_send_stream.cc
+++ b/video/video_send_stream.cc
@@ -987,6 +987,11 @@
   auto IsUlpfecEnabled = [&]() { return ulpfec_payload_type >= 0; };
   auto DisableUlpfec = [&]() { ulpfec_payload_type = -1; };
 
+  if (webrtc::field_trial::IsEnabled("WebRTC-DisableUlpFecExperiment")) {
+    LOG(LS_INFO) << "Experiment to disable sending ULPFEC is enabled.";
+    DisableUlpfec();
+  }
+
   // If enabled, FlexFEC takes priority over RED+ULPFEC.
   if (flexfec_enabled) {
     // We can safely disable RED here, because if the remote supports FlexFEC,
@@ -1045,9 +1050,7 @@
         true,
         kMinSendSidePacketHistorySize);
     // Set RED/ULPFEC information.
-    for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) {
-      rtp_rtcp->SetUlpfecConfig(red_payload_type, ulpfec_payload_type);
-    }
+    rtp_rtcp->SetUlpfecConfig(red_payload_type, ulpfec_payload_type);
   }
 
   // Currently, both ULPFEC and FlexFEC use the same FEC rate calculation logic,
diff --git a/video/video_send_stream_tests.cc b/video/video_send_stream_tests.cc
index 1944937..7a60b76 100644
--- a/video/video_send_stream_tests.cc
+++ b/video/video_send_stream_tests.cc
@@ -554,6 +554,20 @@
   RunBaseTest(&test);
 }
 
+class VideoSendStreamWithoutUlpfecTest : public VideoSendStreamTest {
+ protected:
+  VideoSendStreamWithoutUlpfecTest()
+      : field_trial_("WebRTC-DisableUlpFecExperiment/Enabled/") {}
+
+  test::ScopedFieldTrials field_trial_;
+};
+
+TEST_F(VideoSendStreamWithoutUlpfecTest, NoUlpfecIfDisabledThroughFieldTrial) {
+  std::unique_ptr<VideoEncoder> encoder(VP8Encoder::Create());
+  UlpfecObserver test(false, false, true, false, "VP8", encoder.get());
+  RunBaseTest(&test);
+}
+
 // The FEC scheme used is not efficient for H264, so we should not use RED/FEC
 // since we'll still have to re-request FEC packets, effectively wasting
 // bandwidth since the receiver has to wait for FEC retransmissions to determine