#include "third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.h"
#include <stddef.h>
#include <memory>
#include <string>
#include <utility>
#include <vector>
#include "base/feature_list.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/functional/callback_forward.h"
#include "base/functional/callback_helpers.h"
#include "base/location.h"
#include "base/logging.h"
#include "base/memory/raw_ptr.h"
#include "base/metrics/field_trial_params.h"
#include "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h"
#include "base/synchronization/waitable_event.h"
#include "base/task/sequenced_task_runner.h"
#include "base/task/single_thread_task_runner.h"
#include "base/time/time.h"
#include "base/unguessable_token.h"
#include "build/build_config.h"
#include "components/webrtc/thread_wrapper.h"
#include "crypto/openssl_util.h"
#include "media/base/decoder_factory.h"
#include "media/base/media_permission.h"
#include "media/media_buildflags.h"
#include "media/mojo/clients/mojo_video_encoder_metrics_provider.h"
#include "media/video/gpu_video_accelerator_factories.h"
#include "net/net_buildflags.h"
#include "third_party/blink/public/common/features.h"
#include "third_party/blink/public/common/peerconnection/webrtc_ip_handling_policy.h"
#include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h"
#include "third_party/blink/public/platform/platform.h"
#include "third_party/blink/public/platform/task_type.h"
#include "third_party/blink/public/platform/web_url.h"
#include "third_party/blink/public/web/modules/mediastream/media_stream_video_source.h"
#include "third_party/blink/public/web/web_document.h"
#include "third_party/blink/public/web/web_local_frame.h"
#include "third_party/blink/public/web/web_view.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h"
#include "third_party/blink/renderer/core/frame/dom_window.h"
#include "third_party/blink/renderer/core/page/chrome_client.h"
#include "third_party/blink/renderer/core/page/page.h"
#include "third_party/blink/renderer/core/probe/core_probes.h"
#include "third_party/blink/renderer/modules/mediastream/media_constraints.h"
#include "third_party/blink/renderer/modules/peerconnection/adapters/web_rtc_cross_thread_copier.h"
#include "third_party/blink/renderer/modules/peerconnection/intercepting_network_controller.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_error_util.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h"
#include "third_party/blink/renderer/modules/webrtc/webrtc_audio_device_impl.h"
#include "third_party/blink/renderer/platform/graphics/video_frame_sink_bundle.h"
#include "third_party/blink/renderer/platform/heap/cross_thread_persistent.h"
#include "third_party/blink/renderer/platform/heap/persistent.h"
#include "third_party/blink/renderer/platform/mediastream/webrtc_uma_histograms.h"
#include "third_party/blink/renderer/platform/mojo/mojo_binding_context.h"
#include "third_party/blink/renderer/platform/p2p/empty_network_manager.h"
#include "third_party/blink/renderer/platform/p2p/filtering_network_manager.h"
#include "third_party/blink/renderer/platform/p2p/ipc_network_manager.h"
#include "third_party/blink/renderer/platform/p2p/ipc_socket_factory.h"
#include "third_party/blink/renderer/platform/p2p/mdns_responder_adapter.h"
#include "third_party/blink/renderer/platform/p2p/port_allocator.h"
#include "third_party/blink/renderer/platform/p2p/socket_dispatcher.h"
#include "third_party/blink/renderer/platform/peerconnection/audio_codec_factory.h"
#include "third_party/blink/renderer/platform/peerconnection/video_codec_factory.h"
#include "third_party/blink/renderer/platform/peerconnection/vsync_provider.h"
#include "third_party/blink/renderer/platform/peerconnection/vsync_tick_provider.h"
#include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
#include "third_party/blink/renderer/platform/wtf/cross_thread_copier_base.h"
#include "third_party/blink/renderer/platform/wtf/cross_thread_copier_gfx.h"
#include "third_party/blink/renderer/platform/wtf/cross_thread_copier_std.h"
#include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h"
#include "third_party/blink/renderer/platform/wtf/functional.h"
#include "third_party/webrtc/api/enable_media.h"
#include "third_party/webrtc/api/peer_connection_interface.h"
#include "third_party/webrtc/api/rtc_event_log/rtc_event_log_factory.h"
#include "third_party/webrtc/api/transport/goog_cc_factory.h"
#include "third_party/webrtc/api/video_track_source_proxy_factory.h"
#include "third_party/webrtc/media/engine/fake_video_codec_factory.h"
#include "third_party/webrtc/modules/video_coding/codecs/h264/include/h264.h"
#include "third_party/webrtc/rtc_base/ref_counted_object.h"
#include "third_party/webrtc/rtc_base/ssl_adapter.h"
#include "third_party/webrtc_overrides/metronome_source.h"
#include "third_party/webrtc_overrides/task_queue_factory.h"
#include "third_party/webrtc_overrides/timer_based_tick_provider.h"
namespace WTF {
template <>
struct CrossThreadCopier<base::RepeatingCallback<void(base::TimeDelta)>>
: public CrossThreadCopierPassThrough<
base::RepeatingCallback<void(base::TimeDelta)>> { … };
}
namespace blink {
namespace {
PassKey;
enum WebRTCIPHandlingPolicy { … };
WebRTCIPHandlingPolicy GetWebRTCIPHandlingPolicy(const String& preference) { … }
bool IsValidPortRange(uint16_t min_port, uint16_t max_port) { … }
scoped_refptr<media::MojoVideoEncoderMetricsProviderFactory>
CreateMojoVideoEncoderMetricsProviderFactory(LocalFrame* local_frame) { … }
class ProxyAsyncDnsResolverFactory final
: public webrtc::AsyncDnsResolverFactoryInterface { … };
std::string WorkerThreadName() { … }
class PeerConnectionStaticDeps { … };
PeerConnectionStaticDeps& StaticDeps() { … }
rtc::Thread* GetSignalingThread() { … }
rtc::Thread* GetWorkerThread() { … }
rtc::Thread* GetNetworkThread() { … }
base::Thread& GetChromeSignalingThread() { … }
base::Thread& GetChromeWorkerThread() { … }
base::Thread& GetChromeNetworkThread() { … }
class InterceptingNetworkControllerFactory
: public webrtc::NetworkControllerFactoryInterface { … };
}
const char PeerConnectionDependencyFactory::kSupplementName[] = …;
PeerConnectionDependencyFactory& PeerConnectionDependencyFactory::From(
ExecutionContext& context) { … }
PeerConnectionDependencyFactory::PeerConnectionDependencyFactory(
ExecutionContext& context,
PassKey)
: … { … }
PeerConnectionDependencyFactory::PeerConnectionDependencyFactory()
: … { … }
PeerConnectionDependencyFactory::~PeerConnectionDependencyFactory() = default;
std::unique_ptr<RTCPeerConnectionHandler>
PeerConnectionDependencyFactory::CreateRTCPeerConnectionHandler(
RTCPeerConnectionHandlerClient* client,
scoped_refptr<base::SingleThreadTaskRunner> task_runner,
bool encoded_insertable_streams) { … }
const rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface>&
PeerConnectionDependencyFactory::GetPcFactory() { … }
void PeerConnectionDependencyFactory::CreatePeerConnectionFactory() { … }
void PeerConnectionDependencyFactory::InitializeSignalingThread(
const gfx::ColorSpace& render_color_space,
scoped_refptr<base::SequencedTaskRunner> media_task_runner,
media::GpuVideoAcceleratorFactories* gpu_factories,
base::WeakPtr<media::DecoderFactory> media_decoder_factory,
scoped_refptr<media::MojoVideoEncoderMetricsProviderFactory>
video_encoder_metrics_provider_factory,
base::WaitableEvent* event) { … }
void PeerConnectionDependencyFactory::DoGetDevtoolsToken(
base::OnceCallback<void(std::optional<base::UnguessableToken>)> then) { … }
std::optional<base::UnguessableToken>
PeerConnectionDependencyFactory::GetDevtoolsToken() { … }
bool PeerConnectionDependencyFactory::PeerConnectionFactoryCreated() { … }
rtc::scoped_refptr<webrtc::PeerConnectionInterface>
PeerConnectionDependencyFactory::CreatePeerConnection(
const webrtc::PeerConnectionInterface::RTCConfiguration& config,
blink::WebLocalFrame* web_frame,
webrtc::PeerConnectionObserver* observer,
ExceptionState& exception_state,
RTCRtpTransport* rtp_transport) { … }
std::unique_ptr<cricket::PortAllocator>
PeerConnectionDependencyFactory::CreatePortAllocator(
blink::WebLocalFrame* web_frame) { … }
std::unique_ptr<webrtc::AsyncDnsResolverFactoryInterface>
PeerConnectionDependencyFactory::CreateAsyncDnsResolverFactory() { … }
scoped_refptr<webrtc::MediaStreamInterface>
PeerConnectionDependencyFactory::CreateLocalMediaStream(const String& label) { … }
scoped_refptr<webrtc::VideoTrackSourceInterface>
PeerConnectionDependencyFactory::CreateVideoTrackSourceProxy(
webrtc::VideoTrackSourceInterface* source) { … }
scoped_refptr<webrtc::VideoTrackInterface>
PeerConnectionDependencyFactory::CreateLocalVideoTrack(
const String& id,
webrtc::VideoTrackSourceInterface* source) { … }
webrtc::IceCandidateInterface*
PeerConnectionDependencyFactory::CreateIceCandidate(const String& sdp_mid,
int sdp_mline_index,
const String& sdp) { … }
blink::WebRtcAudioDeviceImpl*
PeerConnectionDependencyFactory::GetWebRtcAudioDevice() { … }
void PeerConnectionDependencyFactory::CreateIpcNetworkManagerOnNetworkThread(
base::WaitableEvent* event,
std::unique_ptr<MdnsResponderAdapter> mdns_responder) { … }
void PeerConnectionDependencyFactory::DeleteIpcNetworkManager(
std::unique_ptr<IpcNetworkManager> network_manager,
base::WaitableEvent* event) { … }
void PeerConnectionDependencyFactory::ContextDestroyed() { … }
void PeerConnectionDependencyFactory::CleanupPeerConnectionFactory() { … }
void PeerConnectionDependencyFactory::EnsureInitialized() { … }
scoped_refptr<base::SingleThreadTaskRunner>
PeerConnectionDependencyFactory::GetWebRtcNetworkTaskRunner() { … }
scoped_refptr<base::SingleThreadTaskRunner>
PeerConnectionDependencyFactory::GetWebRtcWorkerTaskRunner() { … }
scoped_refptr<base::SingleThreadTaskRunner>
PeerConnectionDependencyFactory::GetWebRtcSignalingTaskRunner() { … }
void PeerConnectionDependencyFactory::EnsureWebRtcAudioDeviceImpl() { … }
std::unique_ptr<webrtc::RtpCapabilities>
PeerConnectionDependencyFactory::GetSenderCapabilities(const String& kind) { … }
std::unique_ptr<webrtc::RtpCapabilities>
PeerConnectionDependencyFactory::GetReceiverCapabilities(const String& kind) { … }
media::GpuVideoAcceleratorFactories*
PeerConnectionDependencyFactory::GetGpuFactories() { … }
void PeerConnectionDependencyFactory::Trace(Visitor* visitor) const { … }
std::unique_ptr<webrtc::Metronome>
PeerConnectionDependencyFactory::CreateDecodeMetronome() { … }
}