Index: webrtc/api/peerconnectioninterface_unittest.cc |
diff --git a/webrtc/api/peerconnectioninterface_unittest.cc b/webrtc/api/peerconnectioninterface_unittest.cc |
index b9629f50437b76de888cb8419e177e38886bd7fd..2c7cc128adeb03ea463895a84dc7499d98f99c48 100644 |
--- a/webrtc/api/peerconnectioninterface_unittest.cc |
+++ b/webrtc/api/peerconnectioninterface_unittest.cc |
@@ -2328,6 +2328,105 @@ TEST_F(PeerConnectionInterfaceTest, SignalSameTracksInSeparateMediaStream) { |
EXPECT_TRUE(ContainsSender(senders, kVideoTracks[0])); |
} |
+// The PeerConnectionMediaConfig tests below verify that configuration |
+// and constraints are propagated into the MediaConfig passed to |
+// CreateMediaController. These settings are intended for MediaChannel |
+// constructors, but that is not exercised by these unittest. |
+class PeerConnectionFactoryForTest : public webrtc::PeerConnectionFactory { |
+ public: |
+ webrtc::MediaControllerInterface* CreateMediaController( |
+ const cricket::MediaConfig& config) const override { |
+ create_media_controller_called_ = true; |
+ create_media_controller_config_ = config; |
+ |
+ webrtc::MediaControllerInterface* mc = |
+ PeerConnectionFactory::CreateMediaController(config); |
+ EXPECT_TRUE(mc != nullptr); |
+ return mc; |
+ } |
+ |
+ // Mutable, so they can be modified in the above const-declared method. |
+ mutable bool create_media_controller_called_ = false; |
+ mutable cricket::MediaConfig create_media_controller_config_; |
+}; |
+ |
+class PeerConnectionMediaConfigTest : public testing::Test { |
+ protected: |
+ void SetUp() override { |
+ pcf_= new rtc::RefCountedObject<PeerConnectionFactoryForTest>(); |
+ pcf_->Initialize(); |
+ } |
+ const cricket::MediaConfig& TestCreatePeerConnection( |
+ const PeerConnectionInterface::RTCConfiguration& config, |
+ const MediaConstraintsInterface *constraints) { |
+ pcf_->create_media_controller_called_ = false; |
+ |
+ scoped_refptr<PeerConnectionInterface> pc( |
+ pcf_->CreatePeerConnection(config, constraints, nullptr, nullptr, |
+ &observer_)); |
+ EXPECT_TRUE(pc.get()); |
+ EXPECT_TRUE(pcf_->create_media_controller_called_); |
+ return pcf_->create_media_controller_config_; |
+ } |
+ |
+ scoped_refptr<PeerConnectionFactoryForTest> pcf_; |
+ MockPeerConnectionObserver observer_; |
+}; |
+ |
+// This test verifies the default behaviour with no constraints and a |
+// default RTCConfiguration. |
+TEST_F(PeerConnectionMediaConfigTest, TestDefaults) { |
+ PeerConnectionInterface::RTCConfiguration config; |
+ FakeConstraints constraints; |
+ |
+ const cricket::MediaConfig& media_config = |
+ TestCreatePeerConnection(config, &constraints); |
+ |
+ EXPECT_FALSE(media_config.enable_dscp); |
+ EXPECT_TRUE(media_config.enable_cpu_overuse_detection); |
+ EXPECT_FALSE(media_config.disable_prerenderer_smoothing); |
+} |
+ |
+// This test verifies the DSCP constraint is recognized and passed to |
+// the CreateMediaController call. |
+TEST_F(PeerConnectionMediaConfigTest, TestDscpConstraintTrue) { |
+ PeerConnectionInterface::RTCConfiguration config; |
+ FakeConstraints constraints; |
+ |
+ constraints.AddOptional(webrtc::MediaConstraintsInterface::kEnableDscp, true); |
+ const cricket::MediaConfig& media_config = |
+ TestCreatePeerConnection(config, &constraints); |
+ |
+ EXPECT_TRUE(media_config.enable_dscp); |
+} |
+ |
+// This test verifies the cpu overuse detection constraint is |
+// recognized and passed to the CreateMediaController call. |
+TEST_F(PeerConnectionMediaConfigTest, TestCpuOveruseConstraintFalse) { |
+ PeerConnectionInterface::RTCConfiguration config; |
+ FakeConstraints constraints; |
+ |
+ constraints.AddOptional( |
+ webrtc::MediaConstraintsInterface::kCpuOveruseDetection, false); |
+ const cricket::MediaConfig media_config = |
+ TestCreatePeerConnection(config, &constraints); |
+ |
+ EXPECT_FALSE(media_config.enable_cpu_overuse_detection); |
+} |
+ |
+// This test verifies that the disable_prerenderer_smoothing flag is |
+// propagated from RTCConfiguration to the CreateMediaController call. |
+TEST_F(PeerConnectionMediaConfigTest, TestDisablePrerendererSmoothingTrue) { |
+ PeerConnectionInterface::RTCConfiguration config; |
+ FakeConstraints constraints; |
+ |
+ config.disable_prerenderer_smoothing = true; |
+ const cricket::MediaConfig& media_config = |
+ TestCreatePeerConnection(config, &constraints); |
+ |
+ EXPECT_TRUE(media_config.disable_prerenderer_smoothing); |
+} |
+ |
// The following tests verify that session options are created correctly. |
// TODO(deadbeef): Convert these tests to be more end-to-end. Instead of |
// "verify options are converted correctly", should be "pass options into |