Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(461)

Unified Diff: webrtc/pc/mediasession_unittest.cc

Issue 2761143002: Support encrypted RTP extensions (RFC 6904) (Closed)
Patch Set: Fix compile error on win_x64 bots. Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/pc/mediasession.cc ('k') | webrtc/pc/srtpfilter.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/pc/mediasession_unittest.cc
diff --git a/webrtc/pc/mediasession_unittest.cc b/webrtc/pc/mediasession_unittest.cc
index fc2da881f67b8be32547f0993e3988540f126c11..670ace2057fcb60a654ec0b6fa75a5cbd4010109 100644
--- a/webrtc/pc/mediasession_unittest.cc
+++ b/webrtc/pc/mediasession_unittest.cc
@@ -112,6 +112,12 @@ static const RtpExtension kAudioRtpExtension1[] = {
RtpExtension("http://google.com/testing/audio_something", 10),
};
+static const RtpExtension kAudioRtpExtensionEncrypted1[] = {
+ RtpExtension("urn:ietf:params:rtp-hdrext:ssrc-audio-level", 8),
+ RtpExtension("http://google.com/testing/audio_something", 10),
+ RtpExtension("urn:ietf:params:rtp-hdrext:ssrc-audio-level", 12, true),
+};
+
static const RtpExtension kAudioRtpExtension2[] = {
RtpExtension("urn:ietf:params:rtp-hdrext:ssrc-audio-level", 2),
RtpExtension("http://google.com/testing/audio_something_else", 8),
@@ -123,15 +129,37 @@ static const RtpExtension kAudioRtpExtension3[] = {
RtpExtension("http://google.com/testing/both_audio_and_video", 3),
};
+static const RtpExtension kAudioRtpExtension3ForEncryption[] = {
+ RtpExtension("http://google.com/testing/audio_something", 2),
+ // Use RTP extension that supports encryption.
+ RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 3),
+};
+
+static const RtpExtension kAudioRtpExtension3ForEncryptionOffer[] = {
+ RtpExtension("http://google.com/testing/audio_something", 2),
+ RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 3),
+ RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 14, true),
+};
+
static const RtpExtension kAudioRtpExtensionAnswer[] = {
RtpExtension("urn:ietf:params:rtp-hdrext:ssrc-audio-level", 8),
};
+static const RtpExtension kAudioRtpExtensionEncryptedAnswer[] = {
+ RtpExtension("urn:ietf:params:rtp-hdrext:ssrc-audio-level", 12, true),
+};
+
static const RtpExtension kVideoRtpExtension1[] = {
RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 14),
RtpExtension("http://google.com/testing/video_something", 13),
};
+static const RtpExtension kVideoRtpExtensionEncrypted1[] = {
+ RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 14),
+ RtpExtension("http://google.com/testing/video_something", 13),
+ RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 11, true),
+};
+
static const RtpExtension kVideoRtpExtension2[] = {
RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 2),
RtpExtension("http://google.com/testing/video_something_else", 14),
@@ -143,10 +171,20 @@ static const RtpExtension kVideoRtpExtension3[] = {
RtpExtension("http://google.com/testing/both_audio_and_video", 5),
};
+static const RtpExtension kVideoRtpExtension3ForEncryption[] = {
+ RtpExtension("http://google.com/testing/video_something", 4),
+ // Use RTP extension that supports encryption.
+ RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 5),
+};
+
static const RtpExtension kVideoRtpExtensionAnswer[] = {
RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 14),
};
+static const RtpExtension kVideoRtpExtensionEncryptedAnswer[] = {
+ RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 11, true),
+};
+
static const uint32_t kSimulcastParamsSsrc[] = {10, 11, 20, 21, 30, 31};
static const uint32_t kSimSsrc[] = {10, 20, 30};
static const uint32_t kFec1Ssrc[] = {10, 11};
@@ -1188,6 +1226,112 @@ TEST_F(MediaSessionDescriptionFactoryTest, TestOfferAnswerWithRtpExtensions) {
answer.get())->rtp_header_extensions());
}
+TEST_F(MediaSessionDescriptionFactoryTest,
+ TestOfferAnswerWithEncryptedRtpExtensionsBoth) {
+ MediaSessionOptions opts;
+ opts.recv_video = true;
+
+ f1_.set_enable_encrypted_rtp_header_extensions(true);
+ f2_.set_enable_encrypted_rtp_header_extensions(true);
+
+ f1_.set_audio_rtp_header_extensions(
+ MAKE_VECTOR(kAudioRtpExtension1));
+ f1_.set_video_rtp_header_extensions(
+ MAKE_VECTOR(kVideoRtpExtension1));
+ f2_.set_audio_rtp_header_extensions(
+ MAKE_VECTOR(kAudioRtpExtension2));
+ f2_.set_video_rtp_header_extensions(
+ MAKE_VECTOR(kVideoRtpExtension2));
+
+ std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL));
+ ASSERT_TRUE(offer.get() != NULL);
+ std::unique_ptr<SessionDescription> answer(
+ f2_.CreateAnswer(offer.get(), opts, NULL));
+
+ EXPECT_EQ(MAKE_VECTOR(kAudioRtpExtensionEncrypted1),
+ GetFirstAudioContentDescription(
+ offer.get())->rtp_header_extensions());
+ EXPECT_EQ(MAKE_VECTOR(kVideoRtpExtensionEncrypted1),
+ GetFirstVideoContentDescription(
+ offer.get())->rtp_header_extensions());
+ EXPECT_EQ(MAKE_VECTOR(kAudioRtpExtensionEncryptedAnswer),
+ GetFirstAudioContentDescription(
+ answer.get())->rtp_header_extensions());
+ EXPECT_EQ(MAKE_VECTOR(kVideoRtpExtensionEncryptedAnswer),
+ GetFirstVideoContentDescription(
+ answer.get())->rtp_header_extensions());
+}
+
+TEST_F(MediaSessionDescriptionFactoryTest,
+ TestOfferAnswerWithEncryptedRtpExtensionsOffer) {
+ MediaSessionOptions opts;
+ opts.recv_video = true;
+
+ f1_.set_enable_encrypted_rtp_header_extensions(true);
+
+ f1_.set_audio_rtp_header_extensions(
+ MAKE_VECTOR(kAudioRtpExtension1));
+ f1_.set_video_rtp_header_extensions(
+ MAKE_VECTOR(kVideoRtpExtension1));
+ f2_.set_audio_rtp_header_extensions(
+ MAKE_VECTOR(kAudioRtpExtension2));
+ f2_.set_video_rtp_header_extensions(
+ MAKE_VECTOR(kVideoRtpExtension2));
+
+ std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL));
+ ASSERT_TRUE(offer.get() != NULL);
+ std::unique_ptr<SessionDescription> answer(
+ f2_.CreateAnswer(offer.get(), opts, NULL));
+
+ EXPECT_EQ(MAKE_VECTOR(kAudioRtpExtensionEncrypted1),
+ GetFirstAudioContentDescription(
+ offer.get())->rtp_header_extensions());
+ EXPECT_EQ(MAKE_VECTOR(kVideoRtpExtensionEncrypted1),
+ GetFirstVideoContentDescription(
+ offer.get())->rtp_header_extensions());
+ EXPECT_EQ(MAKE_VECTOR(kAudioRtpExtensionAnswer),
+ GetFirstAudioContentDescription(
+ answer.get())->rtp_header_extensions());
+ EXPECT_EQ(MAKE_VECTOR(kVideoRtpExtensionAnswer),
+ GetFirstVideoContentDescription(
+ answer.get())->rtp_header_extensions());
+}
+
+TEST_F(MediaSessionDescriptionFactoryTest,
+ TestOfferAnswerWithEncryptedRtpExtensionsAnswer) {
+ MediaSessionOptions opts;
+ opts.recv_video = true;
+
+ f2_.set_enable_encrypted_rtp_header_extensions(true);
+
+ f1_.set_audio_rtp_header_extensions(
+ MAKE_VECTOR(kAudioRtpExtension1));
+ f1_.set_video_rtp_header_extensions(
+ MAKE_VECTOR(kVideoRtpExtension1));
+ f2_.set_audio_rtp_header_extensions(
+ MAKE_VECTOR(kAudioRtpExtension2));
+ f2_.set_video_rtp_header_extensions(
+ MAKE_VECTOR(kVideoRtpExtension2));
+
+ std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL));
+ ASSERT_TRUE(offer.get() != NULL);
+ std::unique_ptr<SessionDescription> answer(
+ f2_.CreateAnswer(offer.get(), opts, NULL));
+
+ EXPECT_EQ(MAKE_VECTOR(kAudioRtpExtension1),
+ GetFirstAudioContentDescription(
+ offer.get())->rtp_header_extensions());
+ EXPECT_EQ(MAKE_VECTOR(kVideoRtpExtension1),
+ GetFirstVideoContentDescription(
+ offer.get())->rtp_header_extensions());
+ EXPECT_EQ(MAKE_VECTOR(kAudioRtpExtensionAnswer),
+ GetFirstAudioContentDescription(
+ answer.get())->rtp_header_extensions());
+ EXPECT_EQ(MAKE_VECTOR(kVideoRtpExtensionAnswer),
+ GetFirstVideoContentDescription(
+ answer.get())->rtp_header_extensions());
+}
+
// Create an audio, video, data answer without legacy StreamParams.
TEST_F(MediaSessionDescriptionFactoryTest,
TestCreateAnswerWithoutLegacyStreams) {
@@ -2262,6 +2406,49 @@ TEST_F(MediaSessionDescriptionFactoryTest, RtpExtensionIdReused) {
updated_offer.get())->rtp_header_extensions());
}
+// Same as "RtpExtensionIdReused" above for encrypted RTP extensions.
+TEST_F(MediaSessionDescriptionFactoryTest, RtpExtensionIdReusedEncrypted) {
+ MediaSessionOptions opts;
+ opts.recv_audio = true;
+ opts.recv_video = true;
+
+ f1_.set_enable_encrypted_rtp_header_extensions(true);
+ f2_.set_enable_encrypted_rtp_header_extensions(true);
+
+ f1_.set_audio_rtp_header_extensions(
+ MAKE_VECTOR(kAudioRtpExtension3ForEncryption));
+ f1_.set_video_rtp_header_extensions(
+ MAKE_VECTOR(kVideoRtpExtension3ForEncryption));
+
+ std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL));
+
+ // The extensions that are shared between audio and video should use the same
+ // id.
+ const RtpExtension kExpectedVideoRtpExtension[] = {
+ kVideoRtpExtension3ForEncryption[0],
+ kAudioRtpExtension3ForEncryptionOffer[1],
+ kAudioRtpExtension3ForEncryptionOffer[2],
+ };
+
+ EXPECT_EQ(MAKE_VECTOR(kAudioRtpExtension3ForEncryptionOffer),
+ GetFirstAudioContentDescription(
+ offer.get())->rtp_header_extensions());
+ EXPECT_EQ(MAKE_VECTOR(kExpectedVideoRtpExtension),
+ GetFirstVideoContentDescription(
+ offer.get())->rtp_header_extensions());
+
+ // Nothing should change when creating a new offer
+ std::unique_ptr<SessionDescription> updated_offer(
+ f1_.CreateOffer(opts, offer.get()));
+
+ EXPECT_EQ(MAKE_VECTOR(kAudioRtpExtension3ForEncryptionOffer),
+ GetFirstAudioContentDescription(
+ updated_offer.get())->rtp_header_extensions());
+ EXPECT_EQ(MAKE_VECTOR(kExpectedVideoRtpExtension),
+ GetFirstVideoContentDescription(
+ updated_offer.get())->rtp_header_extensions());
+}
+
TEST(MediaSessionDescription, CopySessionDescription) {
SessionDescription source;
cricket::ContentGroup group(cricket::CN_AUDIO);
« no previous file with comments | « webrtc/pc/mediasession.cc ('k') | webrtc/pc/srtpfilter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698