| Index: webrtc/media/engine/webrtcvideoengine2_unittest.cc | 
| diff --git a/webrtc/media/engine/webrtcvideoengine2_unittest.cc b/webrtc/media/engine/webrtcvideoengine2_unittest.cc | 
| index c473a4099f98d9838a0a9de28857997253f87141..ad0b193f59a8ef482dcabe65b89e42cf1755ddcb 100644 | 
| --- a/webrtc/media/engine/webrtcvideoengine2_unittest.cc | 
| +++ b/webrtc/media/engine/webrtcvideoengine2_unittest.cc | 
| @@ -78,7 +78,7 @@ bool HasRtxCodec(const std::vector<cricket::VideoCodec>& codecs, | 
| return false; | 
| } | 
|  | 
| -static rtc::scoped_refptr<webrtc::VideoFrameBuffer> CreateBlackFrameBuffer( | 
| +rtc::scoped_refptr<webrtc::VideoFrameBuffer> CreateBlackFrameBuffer( | 
| int width, | 
| int height) { | 
| rtc::scoped_refptr<webrtc::I420Buffer> buffer = | 
| @@ -749,6 +749,32 @@ TEST_F(WebRtcVideoEngine2Test, SimulcastDisabledForH264) { | 
| EXPECT_TRUE(channel->SetVideoSend(ssrcs[0], true, nullptr, nullptr)); | 
| } | 
|  | 
| +// Test that the FlexFEC field trial properly alters the output of | 
| +// WebRtcVideoEngine2::codecs(), for an existing |engine_| object. | 
| +// | 
| +// TODO(brandtr): Remove this test, when the FlexFEC field trial is gone. | 
| +TEST_F(WebRtcVideoEngine2Test, | 
| +       Flexfec03SupportedAsInternalCodecBehindFieldTrial) { | 
| +  auto is_flexfec = [](const VideoCodec& codec) { | 
| +    if (codec.name == "flexfec-03") | 
| +      return true; | 
| +    return false; | 
| +  }; | 
| + | 
| +  // FlexFEC is not active without field trial. | 
| +  engine_.Init(); | 
| +  const std::vector<VideoCodec> codecs_before = engine_.codecs(); | 
| +  EXPECT_EQ(codecs_before.end(), std::find_if(codecs_before.begin(), | 
| +                                              codecs_before.end(), is_flexfec)); | 
| + | 
| +  // FlexFEC is active with field trial. | 
| +  webrtc::test::ScopedFieldTrials override_field_trials_( | 
| +      "WebRTC-FlexFEC-03/Enabled/"); | 
| +  const std::vector<VideoCodec> codecs_after = engine_.codecs(); | 
| +  EXPECT_NE(codecs_after.end(), | 
| +            std::find_if(codecs_after.begin(), codecs_after.end(), is_flexfec)); | 
| +} | 
| + | 
| // Test that external codecs are added to the end of the supported codec list. | 
| TEST_F(WebRtcVideoEngine2Test, ReportSupportedExternalCodecs) { | 
| cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 
| @@ -761,11 +787,31 @@ TEST_F(WebRtcVideoEngine2Test, ReportSupportedExternalCodecs) { | 
| cricket::VideoCodec internal_codec = codecs.front(); | 
| cricket::VideoCodec external_codec = codecs.back(); | 
|  | 
| -  // The external codec will appear at last. | 
| +  // The external codec will appear last in the vector. | 
| EXPECT_EQ("VP8", internal_codec.name); | 
| EXPECT_EQ("FakeExternalCodec", external_codec.name); | 
| } | 
|  | 
| +// Test that an external codec that was added after the engine was initialized | 
| +// does show up in the codec list after it was added. | 
| +TEST_F(WebRtcVideoEngine2Test, ReportSupportedExternalCodecsWithAddedCodec) { | 
| +  // Set up external encoder factory with first codec, and initialize engine. | 
| +  cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 
| +  encoder_factory.AddSupportedVideoCodecType("FakeExternalCodec1"); | 
| +  engine_.SetExternalEncoderFactory(&encoder_factory); | 
| +  engine_.Init(); | 
| + | 
| +  // The first external codec will appear last in the vector. | 
| +  std::vector<cricket::VideoCodec> codecs_before(engine_.codecs()); | 
| +  EXPECT_EQ("FakeExternalCodec1", codecs_before.back().name); | 
| + | 
| +  // Add second codec. | 
| +  encoder_factory.AddSupportedVideoCodecType("FakeExternalCodec2"); | 
| +  std::vector<cricket::VideoCodec> codecs_after(engine_.codecs()); | 
| +  EXPECT_EQ(codecs_before.size() + 1, codecs_after.size()); | 
| +  EXPECT_EQ("FakeExternalCodec2", codecs_after.back().name); | 
| +} | 
| + | 
| TEST_F(WebRtcVideoEngine2Test, RegisterExternalDecodersIfSupported) { | 
| cricket::FakeWebRtcVideoDecoderFactory decoder_factory; | 
| decoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8); | 
|  |