Add environment_construction poison

This poison guards against accidental use of EnvironmentFactory and thus ensures low level WebRTC class would use utilities from propagated environment instead of accidentally using a default implementation.

This poison extends and thus replaces default task queue poison.

Bug: webrtc:15656
Change-Id: I577bef8af08b9c7dd649ad5a2284eb236e6f4a8f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/328380
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#41247}
This commit is contained in:
Danil Chapovalov 2023-11-27 10:57:22 +01:00 committed by WebRTC LUCI CQ
parent f921d25320
commit 9fdceb80b5
9 changed files with 25 additions and 19 deletions

View file

@ -802,10 +802,10 @@ rtc_static_library("dcsctp") {
group("poison_audio_codecs") { group("poison_audio_codecs") {
} }
group("poison_default_task_queue") { group("poison_default_echo_detector") {
} }
group("poison_default_echo_detector") { group("poison_environment_construction") {
} }
group("poison_software_video_codecs") { group("poison_software_video_codecs") {

View file

@ -54,7 +54,7 @@ rtc_source_set("enable_media_with_defaults") {
visibility = [ "*" ] visibility = [ "*" ]
allow_poison = [ allow_poison = [
"audio_codecs", "audio_codecs",
"default_task_queue", "environment_construction",
"software_video_codecs", "software_video_codecs",
] ]
sources = [ sources = [
@ -77,7 +77,7 @@ rtc_source_set("enable_media_with_defaults") {
if (!build_with_chromium) { if (!build_with_chromium) {
rtc_library("create_peerconnection_factory") { rtc_library("create_peerconnection_factory") {
visibility = [ "*" ] visibility = [ "*" ]
allow_poison = [ "default_task_queue" ] allow_poison = [ "environment_construction" ]
sources = [ sources = [
"create_peerconnection_factory.cc", "create_peerconnection_factory.cc",
"create_peerconnection_factory.h", "create_peerconnection_factory.h",

View file

@ -21,10 +21,7 @@ rtc_source_set("environment") {
rtc_library("environment_factory") { rtc_library("environment_factory") {
visibility = [ "*" ] visibility = [ "*" ]
poisonous = [ "environment_construction" ]
# TODO: bugs.webrtc.org/15656 - introduce new poison for environment
# construction and consume default_task_queue poison with it.
allow_poison = [ "default_task_queue" ]
sources = [ sources = [
"environment_factory.cc", "environment_factory.cc",
"environment_factory.h", "environment_factory.h",

View file

@ -83,7 +83,10 @@ rtc_library("task_queue_test") {
rtc_library("default_task_queue_factory") { rtc_library("default_task_queue_factory") {
visibility = [ "*" ] visibility = [ "*" ]
if (!is_ios && !is_android) { if (!is_ios && !is_android) {
poisonous = [ "default_task_queue" ] # Internally webrtc shouldn't rely on any specific TaskQueue implementation
# and should create TaskQueue using TaskQueueFactory interface.
# TaskQueueFactory interface can be propagated with Environment.
poisonous = [ "environment_construction" ]
} }
sources = [ "default_task_queue_factory.h" ] sources = [ "default_task_queue_factory.h" ]
deps = [ deps = [

View file

@ -582,7 +582,7 @@ rtc_library("rtc_media_engine_defaults") {
visibility = [ "*" ] visibility = [ "*" ]
allow_poison = [ allow_poison = [
"audio_codecs", "audio_codecs",
"default_task_queue", "environment_construction",
"software_video_codecs", "software_video_codecs",
] ]
sources = [ sources = [

View file

@ -739,6 +739,7 @@ rtc_library("media_protocol_names") {
rtc_source_set("peerconnection") { rtc_source_set("peerconnection") {
# TODO(bugs.webrtc.org/13661): Reduce visibility if possible # TODO(bugs.webrtc.org/13661): Reduce visibility if possible
visibility = [ "*" ] # Used by Chromium and others visibility = [ "*" ] # Used by Chromium and others
allow_poison = [ "environment_construction" ]
cflags = [] cflags = []
sources = [] sources = []
@ -1496,6 +1497,7 @@ rtc_library("media_stream_observer") {
rtc_source_set("peer_connection_factory") { rtc_source_set("peer_connection_factory") {
# TODO(bugs.webrtc.org/13661): Reduce visibility if possible # TODO(bugs.webrtc.org/13661): Reduce visibility if possible
visibility = [ "*" ] # Known to be used externally visibility = [ "*" ] # Known to be used externally
allow_poison = [ "environment_construction" ]
sources = [ sources = [
"peer_connection_factory.cc", "peer_connection_factory.cc",
"peer_connection_factory.h", "peer_connection_factory.h",
@ -1520,6 +1522,7 @@ rtc_source_set("peer_connection_factory") {
"../api:rtp_parameters", "../api:rtp_parameters",
"../api:scoped_refptr", "../api:scoped_refptr",
"../api:sequence_checker", "../api:sequence_checker",
"../api/environment:environment_factory",
"../api/metronome", "../api/metronome",
"../api/neteq:neteq_api", "../api/neteq:neteq_api",
"../api/rtc_event_log:rtc_event_log", "../api/rtc_event_log:rtc_event_log",
@ -2061,6 +2064,7 @@ rtc_source_set("legacy_stats_collector_interface") {
rtc_source_set("libjingle_peerconnection") { rtc_source_set("libjingle_peerconnection") {
# TODO(bugs.webrtc.org/13661): Reduce visibility if possible # TODO(bugs.webrtc.org/13661): Reduce visibility if possible
visibility = [ "*" ] # Used by Chrome and others visibility = [ "*" ] # Used by Chrome and others
allow_poison = [ "environment_construction" ]
deps = [ deps = [
":peerconnection", ":peerconnection",

View file

@ -254,7 +254,7 @@ if (is_ios || is_mac) {
visibility = [ "*" ] visibility = [ "*" ]
allow_poison = [ allow_poison = [
"audio_codecs", # TODO(bugs.webrtc.org/8396): Remove. "audio_codecs", # TODO(bugs.webrtc.org/8396): Remove.
"default_task_queue", "environment_construction",
] ]
sources = [ sources = [
"objc/components/renderer/opengl/RTCDisplayLinkTimer.h", "objc/components/renderer/opengl/RTCDisplayLinkTimer.h",
@ -482,7 +482,7 @@ if (is_ios || is_mac) {
rtc_library("audio_device_objc") { rtc_library("audio_device_objc") {
visibility = [ "*" ] visibility = [ "*" ]
allow_poison = [ "default_task_queue" ] allow_poison = [ "environment_construction" ]
sources = [ sources = [
"objc/native/src/objc_audio_device.h", "objc/native/src/objc_audio_device.h",
"objc/native/src/objc_audio_device.mm", "objc/native/src/objc_audio_device.mm",
@ -515,7 +515,7 @@ if (is_ios || is_mac) {
rtc_library("objc_audio_device_module") { rtc_library("objc_audio_device_module") {
visibility = [ "*" ] visibility = [ "*" ]
allow_poison = [ "default_task_queue" ] allow_poison = [ "environment_construction" ]
sources = [ sources = [
"objc/native/api/objc_audio_device_module.h", "objc/native/api/objc_audio_device_module.h",
"objc/native/api/objc_audio_device_module.mm", "objc/native/api/objc_audio_device_module.mm",
@ -598,7 +598,7 @@ if (is_ios || is_mac) {
visibility = [ "*" ] visibility = [ "*" ]
allow_poison = [ allow_poison = [
"audio_codecs", # TODO(bugs.webrtc.org/8396): Remove. "audio_codecs", # TODO(bugs.webrtc.org/8396): Remove.
"default_task_queue", "environment_construction",
] ]
sources = [ sources = [
"objc/components/renderer/metal/RTCMTLI420Renderer.h", "objc/components/renderer/metal/RTCMTLI420Renderer.h",
@ -920,7 +920,7 @@ if (is_ios || is_mac) {
visibility = [ "*" ] visibility = [ "*" ]
allow_poison = [ allow_poison = [
"audio_codecs", # TODO(bugs.webrtc.org/8396): Remove. "audio_codecs", # TODO(bugs.webrtc.org/8396): Remove.
"default_task_queue", "environment_construction",
] ]
configs += [ "..:no_global_constructors" ] configs += [ "..:no_global_constructors" ]
sources = [ sources = [

View file

@ -109,6 +109,7 @@ if (is_android) {
visibility = [ "*" ] visibility = [ "*" ]
allow_poison = [ allow_poison = [
"audio_codecs", # TODO(bugs.webrtc.org/8396): Remove. "audio_codecs", # TODO(bugs.webrtc.org/8396): Remove.
"environment_construction",
"software_video_codecs", # TODO(bugs.webrtc.org/7925): Remove. "software_video_codecs", # TODO(bugs.webrtc.org/7925): Remove.
] ]
public_deps = [ # no-presubmit-check TODO(webrtc:8603) public_deps = [ # no-presubmit-check TODO(webrtc:8603)
@ -826,7 +827,6 @@ if (current_os == "linux" || is_android) {
":generated_metrics_jni", ":generated_metrics_jni",
":native_api_jni", ":native_api_jni",
":peerconnection_jni", ":peerconnection_jni",
"../../pc:peerconnection",
"../../rtc_base:stringutils", "../../rtc_base:stringutils",
"../../system_wrappers:metrics", "../../system_wrappers:metrics",
] ]

View file

@ -474,12 +474,14 @@ all_poison_types = [
# Encoders and decoders for specific audio codecs such as Opus and iSAC. # Encoders and decoders for specific audio codecs such as Opus and iSAC.
"audio_codecs", "audio_codecs",
# Default task queue implementation.
"default_task_queue",
# Default echo detector implementation. # Default echo detector implementation.
"default_echo_detector", "default_echo_detector",
# Implementations of the utilities exposed through `Environment`.
# Most webrtc classes must use propagated `Environment`. Only few top-level
# classes are allowed to create `Environment` from individual utilities.
"environment_construction",
# Software video codecs (VP8 and VP9 through libvpx). # Software video codecs (VP8 and VP9 through libvpx).
"software_video_codecs", "software_video_codecs",
] ]