mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 05:40:42 +01:00

This reverts commitc176175f01
. Reason for revert: chromium is updated not to depend on the deleted target. (chromium import succeed before the revert) Original change's description: > Revert "Delete deprecated SetMediaEngineDefaults" > > This reverts commit1682a7f411
. > > Reason for revert: Breaks chromium import: https://chromium-review.googlesource.com/c/chromium/src/+/5083877?tab=checks > > Original change's description: > > Delete deprecated SetMediaEngineDefaults > > > > Bug: webrtc:15574 > > Change-Id: Ie60973e020ca91ca93ca46159d53d4a89d1757fe > > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/326004 > > Reviewed-by: Harald Alvestrand <hta@webrtc.org> > > Auto-Submit: Danil Chapovalov <danilchap@webrtc.org> > > Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> > > Commit-Queue: Harald Alvestrand <hta@webrtc.org> > > Cr-Commit-Position: refs/heads/main@{#41304} > > Bug: webrtc:15574 > Change-Id: Id09c8e1682831032e84a83187c6905a84e68d736 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/329842 > Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com> > Auto-Submit: Ilya Nikolaevskiy <ilnik@webrtc.org> > Commit-Queue: Ilya Nikolaevskiy <ilnik@webrtc.org> > Owners-Override: Ilya Nikolaevskiy <ilnik@webrtc.org> > Cr-Commit-Position: refs/heads/main@{#41312} Bug: webrtc:15574 Change-Id: Id376c76dbaa069e3cf178b45be7823c1aa9e3789 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/329843 Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com> Reviewed-by: Harald Alvestrand <hta@webrtc.org> Auto-Submit: Danil Chapovalov <danilchap@webrtc.org> Commit-Queue: Harald Alvestrand <hta@webrtc.org> Cr-Commit-Position: refs/heads/main@{#41314}
324 lines
13 KiB
C++
324 lines
13 KiB
C++
/*
|
|
* Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#include "media/engine/webrtc_media_engine.h"
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
#include <utility>
|
|
|
|
#include "test/gtest.h"
|
|
#include "test/scoped_key_value_config.h"
|
|
|
|
using webrtc::RtpExtension;
|
|
|
|
namespace cricket {
|
|
namespace {
|
|
|
|
std::vector<RtpExtension> MakeUniqueExtensions() {
|
|
std::vector<RtpExtension> result;
|
|
char name[] = "a";
|
|
for (int i = 0; i < 7; ++i) {
|
|
result.push_back(RtpExtension(name, 1 + i));
|
|
name[0]++;
|
|
result.push_back(RtpExtension(name, 255 - i));
|
|
name[0]++;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
std::vector<RtpExtension> MakeRedundantExtensions() {
|
|
std::vector<RtpExtension> result;
|
|
char name[] = "a";
|
|
for (int i = 0; i < 7; ++i) {
|
|
result.push_back(RtpExtension(name, 1 + i));
|
|
result.push_back(RtpExtension(name, 255 - i));
|
|
name[0]++;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
bool SupportedExtensions1(absl::string_view name) {
|
|
return name == "c" || name == "i";
|
|
}
|
|
|
|
bool SupportedExtensions2(absl::string_view name) {
|
|
return name != "a" && name != "n";
|
|
}
|
|
|
|
bool IsSorted(const std::vector<webrtc::RtpExtension>& extensions) {
|
|
const std::string* last = nullptr;
|
|
for (const auto& extension : extensions) {
|
|
if (last && *last > extension.uri) {
|
|
return false;
|
|
}
|
|
last = &extension.uri;
|
|
}
|
|
return true;
|
|
}
|
|
} // namespace
|
|
|
|
TEST(WebRtcMediaEngineTest, ValidateRtpExtensionsEmptyList) {
|
|
std::vector<RtpExtension> extensions;
|
|
EXPECT_TRUE(ValidateRtpExtensions(extensions, {}));
|
|
}
|
|
|
|
TEST(WebRtcMediaEngineTest, ValidateRtpExtensionsAllGood) {
|
|
std::vector<RtpExtension> extensions = MakeUniqueExtensions();
|
|
EXPECT_TRUE(ValidateRtpExtensions(extensions, {}));
|
|
}
|
|
|
|
TEST(WebRtcMediaEngineTest, ValidateRtpExtensionsOutOfRangeId_Low) {
|
|
std::vector<RtpExtension> extensions = MakeUniqueExtensions();
|
|
extensions.push_back(RtpExtension("foo", 0));
|
|
EXPECT_FALSE(ValidateRtpExtensions(extensions, {}));
|
|
}
|
|
|
|
TEST(WebRtcMediaEngineTest, ValidateRtpExtensionsOutOfRangeIdHigh) {
|
|
std::vector<RtpExtension> extensions = MakeUniqueExtensions();
|
|
extensions.push_back(RtpExtension("foo", 256));
|
|
EXPECT_FALSE(ValidateRtpExtensions(extensions, {}));
|
|
}
|
|
|
|
TEST(WebRtcMediaEngineTest, ValidateRtpExtensionsOverlappingIdsStartOfSet) {
|
|
std::vector<RtpExtension> extensions = MakeUniqueExtensions();
|
|
extensions.push_back(RtpExtension("foo", 1));
|
|
EXPECT_FALSE(ValidateRtpExtensions(extensions, {}));
|
|
}
|
|
|
|
TEST(WebRtcMediaEngineTest, ValidateRtpExtensionsOverlappingIdsEndOfSet) {
|
|
std::vector<RtpExtension> extensions = MakeUniqueExtensions();
|
|
extensions.push_back(RtpExtension("foo", 255));
|
|
EXPECT_FALSE(ValidateRtpExtensions(extensions, {}));
|
|
}
|
|
|
|
TEST(WebRtcMediaEngineTest, ValidateRtpExtensionsEmptyToEmpty) {
|
|
std::vector<RtpExtension> extensions;
|
|
EXPECT_TRUE(ValidateRtpExtensions(extensions, extensions));
|
|
}
|
|
|
|
TEST(WebRtcMediaEngineTest, ValidateRtpExtensionsNoChange) {
|
|
std::vector<RtpExtension> extensions = MakeUniqueExtensions();
|
|
EXPECT_TRUE(ValidateRtpExtensions(extensions, extensions));
|
|
}
|
|
|
|
TEST(WebRtcMediaEngineTest, ValidateRtpExtensionsChangeIdNotUrl) {
|
|
std::vector<RtpExtension> old_extensions = MakeUniqueExtensions();
|
|
std::vector<RtpExtension> new_extensions = old_extensions;
|
|
std::swap(new_extensions[0].id, new_extensions[1].id);
|
|
|
|
EXPECT_FALSE(ValidateRtpExtensions(new_extensions, old_extensions));
|
|
}
|
|
|
|
TEST(WebRtcMediaEngineTest, ValidateRtpExtensionsChangeIdForUrl) {
|
|
std::vector<RtpExtension> old_extensions = MakeUniqueExtensions();
|
|
std::vector<RtpExtension> new_extensions = old_extensions;
|
|
// Change first extension to something not generated by MakeUniqueExtensions
|
|
new_extensions[0].id = 123;
|
|
|
|
EXPECT_FALSE(ValidateRtpExtensions(new_extensions, old_extensions));
|
|
}
|
|
|
|
TEST(WebRtcMediaEngineTest, FilterRtpExtensionsEmptyList) {
|
|
std::vector<RtpExtension> extensions;
|
|
webrtc::test::ScopedKeyValueConfig trials;
|
|
std::vector<webrtc::RtpExtension> filtered =
|
|
FilterRtpExtensions(extensions, SupportedExtensions1, true, trials);
|
|
EXPECT_EQ(0u, filtered.size());
|
|
}
|
|
|
|
TEST(WebRtcMediaEngineTest, FilterRtpExtensionsIncludeOnlySupported) {
|
|
std::vector<RtpExtension> extensions = MakeUniqueExtensions();
|
|
webrtc::test::ScopedKeyValueConfig trials;
|
|
std::vector<webrtc::RtpExtension> filtered =
|
|
FilterRtpExtensions(extensions, SupportedExtensions1, false, trials);
|
|
EXPECT_EQ(2u, filtered.size());
|
|
EXPECT_EQ("c", filtered[0].uri);
|
|
EXPECT_EQ("i", filtered[1].uri);
|
|
}
|
|
|
|
TEST(WebRtcMediaEngineTest, FilterRtpExtensionsSortedByName1) {
|
|
std::vector<RtpExtension> extensions = MakeUniqueExtensions();
|
|
webrtc::test::ScopedKeyValueConfig trials;
|
|
std::vector<webrtc::RtpExtension> filtered =
|
|
FilterRtpExtensions(extensions, SupportedExtensions2, false, trials);
|
|
EXPECT_EQ(12u, filtered.size());
|
|
EXPECT_TRUE(IsSorted(filtered));
|
|
}
|
|
|
|
TEST(WebRtcMediaEngineTest, FilterRtpExtensionsSortedByName2) {
|
|
std::vector<RtpExtension> extensions = MakeUniqueExtensions();
|
|
webrtc::test::ScopedKeyValueConfig trials;
|
|
std::vector<webrtc::RtpExtension> filtered =
|
|
FilterRtpExtensions(extensions, SupportedExtensions2, true, trials);
|
|
EXPECT_EQ(12u, filtered.size());
|
|
EXPECT_TRUE(IsSorted(filtered));
|
|
}
|
|
|
|
TEST(WebRtcMediaEngineTest, FilterRtpExtensionsDontRemoveRedundant) {
|
|
std::vector<RtpExtension> extensions = MakeRedundantExtensions();
|
|
webrtc::test::ScopedKeyValueConfig trials;
|
|
std::vector<webrtc::RtpExtension> filtered =
|
|
FilterRtpExtensions(extensions, SupportedExtensions2, false, trials);
|
|
EXPECT_EQ(12u, filtered.size());
|
|
EXPECT_TRUE(IsSorted(filtered));
|
|
EXPECT_EQ(filtered[0].uri, filtered[1].uri);
|
|
}
|
|
|
|
TEST(WebRtcMediaEngineTest, FilterRtpExtensionsRemoveRedundant) {
|
|
std::vector<RtpExtension> extensions = MakeRedundantExtensions();
|
|
webrtc::test::ScopedKeyValueConfig trials;
|
|
std::vector<webrtc::RtpExtension> filtered =
|
|
FilterRtpExtensions(extensions, SupportedExtensions2, true, trials);
|
|
EXPECT_EQ(6u, filtered.size());
|
|
EXPECT_TRUE(IsSorted(filtered));
|
|
EXPECT_NE(filtered[0].uri, filtered[1].uri);
|
|
}
|
|
|
|
TEST(WebRtcMediaEngineTest, FilterRtpExtensionsRemoveRedundantEncrypted1) {
|
|
std::vector<RtpExtension> extensions;
|
|
extensions.push_back(webrtc::RtpExtension("b", 1));
|
|
extensions.push_back(webrtc::RtpExtension("b", 2, true));
|
|
extensions.push_back(webrtc::RtpExtension("c", 3));
|
|
extensions.push_back(webrtc::RtpExtension("b", 4));
|
|
webrtc::test::ScopedKeyValueConfig trials;
|
|
std::vector<webrtc::RtpExtension> filtered =
|
|
FilterRtpExtensions(extensions, SupportedExtensions2, true, trials);
|
|
EXPECT_EQ(3u, filtered.size());
|
|
EXPECT_TRUE(IsSorted(filtered));
|
|
EXPECT_EQ(filtered[0].uri, filtered[1].uri);
|
|
EXPECT_NE(filtered[0].encrypt, filtered[1].encrypt);
|
|
EXPECT_NE(filtered[0].uri, filtered[2].uri);
|
|
EXPECT_NE(filtered[1].uri, filtered[2].uri);
|
|
}
|
|
|
|
TEST(WebRtcMediaEngineTest, FilterRtpExtensionsRemoveRedundantEncrypted2) {
|
|
std::vector<RtpExtension> extensions;
|
|
extensions.push_back(webrtc::RtpExtension("b", 1, true));
|
|
extensions.push_back(webrtc::RtpExtension("b", 2));
|
|
extensions.push_back(webrtc::RtpExtension("c", 3));
|
|
extensions.push_back(webrtc::RtpExtension("b", 4));
|
|
webrtc::test::ScopedKeyValueConfig trials;
|
|
std::vector<webrtc::RtpExtension> filtered =
|
|
FilterRtpExtensions(extensions, SupportedExtensions2, true, trials);
|
|
EXPECT_EQ(3u, filtered.size());
|
|
EXPECT_TRUE(IsSorted(filtered));
|
|
EXPECT_EQ(filtered[0].uri, filtered[1].uri);
|
|
EXPECT_NE(filtered[0].encrypt, filtered[1].encrypt);
|
|
EXPECT_NE(filtered[0].uri, filtered[2].uri);
|
|
EXPECT_NE(filtered[1].uri, filtered[2].uri);
|
|
}
|
|
|
|
TEST(WebRtcMediaEngineTest, FilterRtpExtensionsRemoveRedundantBwe1) {
|
|
webrtc::test::ScopedKeyValueConfig trials(
|
|
"WebRTC-FilterAbsSendTimeExtension/Enabled/");
|
|
std::vector<RtpExtension> extensions;
|
|
extensions.push_back(
|
|
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 3));
|
|
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 9));
|
|
extensions.push_back(RtpExtension(RtpExtension::kAbsSendTimeUri, 6));
|
|
extensions.push_back(
|
|
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 1));
|
|
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 14));
|
|
std::vector<webrtc::RtpExtension> filtered =
|
|
FilterRtpExtensions(extensions, SupportedExtensions2, true, trials);
|
|
EXPECT_EQ(1u, filtered.size());
|
|
EXPECT_EQ(RtpExtension::kTransportSequenceNumberUri, filtered[0].uri);
|
|
}
|
|
|
|
TEST(WebRtcMediaEngineTest,
|
|
FilterRtpExtensionsRemoveRedundantBwe1KeepAbsSendTime) {
|
|
std::vector<RtpExtension> extensions;
|
|
extensions.push_back(
|
|
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 3));
|
|
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 9));
|
|
extensions.push_back(RtpExtension(RtpExtension::kAbsSendTimeUri, 6));
|
|
extensions.push_back(
|
|
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 1));
|
|
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 14));
|
|
webrtc::test::ScopedKeyValueConfig trials;
|
|
std::vector<webrtc::RtpExtension> filtered =
|
|
FilterRtpExtensions(extensions, SupportedExtensions2, true, trials);
|
|
EXPECT_EQ(2u, filtered.size());
|
|
EXPECT_EQ(RtpExtension::kTransportSequenceNumberUri, filtered[0].uri);
|
|
EXPECT_EQ(RtpExtension::kAbsSendTimeUri, filtered[1].uri);
|
|
}
|
|
|
|
TEST(WebRtcMediaEngineTest, FilterRtpExtensionsRemoveRedundantBweEncrypted1) {
|
|
webrtc::test::ScopedKeyValueConfig trials(
|
|
"WebRTC-FilterAbsSendTimeExtension/Enabled/");
|
|
std::vector<RtpExtension> extensions;
|
|
extensions.push_back(
|
|
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 3));
|
|
extensions.push_back(
|
|
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 4, true));
|
|
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 9));
|
|
extensions.push_back(RtpExtension(RtpExtension::kAbsSendTimeUri, 6));
|
|
extensions.push_back(
|
|
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 1));
|
|
extensions.push_back(
|
|
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 2, true));
|
|
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 14));
|
|
std::vector<webrtc::RtpExtension> filtered =
|
|
FilterRtpExtensions(extensions, SupportedExtensions2, true, trials);
|
|
EXPECT_EQ(2u, filtered.size());
|
|
EXPECT_EQ(RtpExtension::kTransportSequenceNumberUri, filtered[0].uri);
|
|
EXPECT_EQ(RtpExtension::kTransportSequenceNumberUri, filtered[1].uri);
|
|
EXPECT_NE(filtered[0].encrypt, filtered[1].encrypt);
|
|
}
|
|
|
|
TEST(WebRtcMediaEngineTest,
|
|
FilterRtpExtensionsRemoveRedundantBweEncrypted1KeepAbsSendTime) {
|
|
std::vector<RtpExtension> extensions;
|
|
extensions.push_back(
|
|
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 3));
|
|
extensions.push_back(
|
|
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 4, true));
|
|
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 9));
|
|
extensions.push_back(RtpExtension(RtpExtension::kAbsSendTimeUri, 6));
|
|
extensions.push_back(
|
|
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 1));
|
|
extensions.push_back(
|
|
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 2, true));
|
|
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 14));
|
|
webrtc::test::ScopedKeyValueConfig trials;
|
|
std::vector<webrtc::RtpExtension> filtered =
|
|
FilterRtpExtensions(extensions, SupportedExtensions2, true, trials);
|
|
EXPECT_EQ(3u, filtered.size());
|
|
EXPECT_EQ(RtpExtension::kTransportSequenceNumberUri, filtered[0].uri);
|
|
EXPECT_EQ(RtpExtension::kTransportSequenceNumberUri, filtered[1].uri);
|
|
EXPECT_EQ(RtpExtension::kAbsSendTimeUri, filtered[2].uri);
|
|
EXPECT_NE(filtered[0].encrypt, filtered[1].encrypt);
|
|
}
|
|
|
|
TEST(WebRtcMediaEngineTest, FilterRtpExtensionsRemoveRedundantBwe2) {
|
|
std::vector<RtpExtension> extensions;
|
|
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 1));
|
|
extensions.push_back(RtpExtension(RtpExtension::kAbsSendTimeUri, 14));
|
|
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 7));
|
|
webrtc::test::ScopedKeyValueConfig trials;
|
|
std::vector<webrtc::RtpExtension> filtered =
|
|
FilterRtpExtensions(extensions, SupportedExtensions2, true, trials);
|
|
EXPECT_EQ(1u, filtered.size());
|
|
EXPECT_EQ(RtpExtension::kAbsSendTimeUri, filtered[0].uri);
|
|
}
|
|
|
|
TEST(WebRtcMediaEngineTest, FilterRtpExtensionsRemoveRedundantBwe3) {
|
|
std::vector<RtpExtension> extensions;
|
|
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 2));
|
|
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 14));
|
|
webrtc::test::ScopedKeyValueConfig trials;
|
|
std::vector<webrtc::RtpExtension> filtered =
|
|
FilterRtpExtensions(extensions, SupportedExtensions2, true, trials);
|
|
EXPECT_EQ(1u, filtered.size());
|
|
EXPECT_EQ(RtpExtension::kTimestampOffsetUri, filtered[0].uri);
|
|
}
|
|
|
|
} // namespace cricket
|