Commit bb81774b authored by Steve Anton's avatar Steve Anton Committed by Commit Bot

Pass a WebRTC AsyncResolverFactory to the standalone RTCIceTransport

This allows the mDNS experiment to work for the standalone
RTCIceTransport in addition to the ICE transports created by the
RTCPeerConnection.

Bug: 927579
Change-Id: I75d1bbb7f469d3282a984cae346a096229b3d08b
Reviewed-on: https://chromium-review.googlesource.com/c/1449320Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Reviewed-by: default avatarHenrik Boström <hbos@chromium.org>
Commit-Queue: Steve Anton <steveanton@chromium.org>
Cr-Commit-Position: refs/heads/master@{#628443}
parent 08b33971
...@@ -337,8 +337,7 @@ PeerConnectionDependencyFactory::CreatePeerConnection( ...@@ -337,8 +337,7 @@ PeerConnectionDependencyFactory::CreatePeerConnection(
webrtc::PeerConnectionDependencies dependencies(observer); webrtc::PeerConnectionDependencies dependencies(observer);
dependencies.allocator = CreatePortAllocator(web_frame); dependencies.allocator = CreatePortAllocator(web_frame);
dependencies.async_resolver_factory = dependencies.async_resolver_factory = CreateAsyncResolverFactory();
std::make_unique<ProxyAsyncResolverFactory>(socket_factory_.get());
return GetPcFactory() return GetPcFactory()
->CreatePeerConnection(config, std::move(dependencies)) ->CreatePeerConnection(config, std::move(dependencies))
.get(); .get();
...@@ -462,6 +461,11 @@ PeerConnectionDependencyFactory::CreatePortAllocator( ...@@ -462,6 +461,11 @@ PeerConnectionDependencyFactory::CreatePortAllocator(
return port_allocator; return port_allocator;
} }
std::unique_ptr<webrtc::AsyncResolverFactory>
PeerConnectionDependencyFactory::CreateAsyncResolverFactory() {
return std::make_unique<ProxyAsyncResolverFactory>(socket_factory_.get());
}
scoped_refptr<webrtc::MediaStreamInterface> scoped_refptr<webrtc::MediaStreamInterface>
PeerConnectionDependencyFactory::CreateLocalMediaStream( PeerConnectionDependencyFactory::CreateLocalMediaStream(
const std::string& label) { const std::string& label) {
......
...@@ -87,6 +87,10 @@ class CONTENT_EXPORT PeerConnectionDependencyFactory ...@@ -87,6 +87,10 @@ class CONTENT_EXPORT PeerConnectionDependencyFactory
virtual std::unique_ptr<P2PPortAllocator> CreatePortAllocator( virtual std::unique_ptr<P2PPortAllocator> CreatePortAllocator(
blink::WebLocalFrame* web_frame); blink::WebLocalFrame* web_frame);
// Creates an AsyncResolverFactory that uses the networking Mojo service.
virtual std::unique_ptr<webrtc::AsyncResolverFactory>
CreateAsyncResolverFactory();
// Creates a libjingle representation of a Session description. Used by a // Creates a libjingle representation of a Session description. Used by a
// RTCPeerConnectionHandler instance. // RTCPeerConnectionHandler instance.
virtual webrtc::SessionDescriptionInterface* CreateSessionDescription( virtual webrtc::SessionDescriptionInterface* CreateSessionDescription(
......
...@@ -733,6 +733,16 @@ RendererBlinkPlatformImpl::CreateWebRtcPortAllocator( ...@@ -733,6 +733,16 @@ RendererBlinkPlatformImpl::CreateWebRtcPortAllocator(
return rtc_dependency_factory->CreatePortAllocator(frame); return rtc_dependency_factory->CreatePortAllocator(frame);
} }
std::unique_ptr<webrtc::AsyncResolverFactory>
RendererBlinkPlatformImpl::CreateWebRtcAsyncResolverFactory() {
RenderThreadImpl* render_thread = RenderThreadImpl::current();
DCHECK(render_thread);
PeerConnectionDependencyFactory* rtc_dependency_factory =
render_thread->GetPeerConnectionDependencyFactory();
rtc_dependency_factory->EnsureInitialized();
return rtc_dependency_factory->CreateAsyncResolverFactory();
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
std::unique_ptr<WebCanvasCaptureHandler> std::unique_ptr<WebCanvasCaptureHandler>
......
...@@ -160,6 +160,8 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : public BlinkPlatformImpl { ...@@ -160,6 +160,8 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : public BlinkPlatformImpl {
rtc::Thread* GetWebRtcWorkerThreadRtcThread() override; rtc::Thread* GetWebRtcWorkerThreadRtcThread() override;
std::unique_ptr<cricket::PortAllocator> CreateWebRtcPortAllocator( std::unique_ptr<cricket::PortAllocator> CreateWebRtcPortAllocator(
blink::WebLocalFrame* frame) override; blink::WebLocalFrame* frame) override;
std::unique_ptr<webrtc::AsyncResolverFactory>
CreateWebRtcAsyncResolverFactory() override;
std::unique_ptr<blink::WebCanvasCaptureHandler> CreateCanvasCaptureHandler( std::unique_ptr<blink::WebCanvasCaptureHandler> CreateCanvasCaptureHandler(
const blink::WebSize& size, const blink::WebSize& size,
double frame_rate, double frame_rate,
......
...@@ -94,6 +94,7 @@ class Local; ...@@ -94,6 +94,7 @@ class Local;
namespace webrtc { namespace webrtc {
struct RtpCapabilities; struct RtpCapabilities;
class AsyncResolverFactory;
} }
namespace blink { namespace blink {
...@@ -635,6 +636,10 @@ class BLINK_PLATFORM_EXPORT Platform { ...@@ -635,6 +636,10 @@ class BLINK_PLATFORM_EXPORT Platform {
virtual std::unique_ptr<cricket::PortAllocator> CreateWebRtcPortAllocator( virtual std::unique_ptr<cricket::PortAllocator> CreateWebRtcPortAllocator(
WebLocalFrame* frame); WebLocalFrame* frame);
// May return null if WebRTC functionality is not implemented.
virtual std::unique_ptr<webrtc::AsyncResolverFactory>
CreateWebRtcAsyncResolverFactory();
// Creates a WebCanvasCaptureHandler to capture Canvas output. // Creates a WebCanvasCaptureHandler to capture Canvas output.
virtual std::unique_ptr<WebCanvasCaptureHandler> virtual std::unique_ptr<WebCanvasCaptureHandler>
CreateCanvasCaptureHandler(const WebSize&, double, WebMediaStreamTrack*); CreateCanvasCaptureHandler(const WebSize&, double, WebMediaStreamTrack*);
......
...@@ -11,8 +11,11 @@ namespace blink { ...@@ -11,8 +11,11 @@ namespace blink {
IceTransportAdapterImpl::IceTransportAdapterImpl( IceTransportAdapterImpl::IceTransportAdapterImpl(
Delegate* delegate, Delegate* delegate,
std::unique_ptr<cricket::PortAllocator> port_allocator, std::unique_ptr<cricket::PortAllocator> port_allocator,
std::unique_ptr<webrtc::AsyncResolverFactory> async_resolver_factory,
rtc::Thread* thread) rtc::Thread* thread)
: delegate_(delegate), port_allocator_(std::move(port_allocator)) { : delegate_(delegate),
port_allocator_(std::move(port_allocator)),
async_resolver_factory_(std::move(async_resolver_factory)) {
// TODO(bugs.webrtc.org/9419): Remove once WebRTC can be built as a component. // TODO(bugs.webrtc.org/9419): Remove once WebRTC can be built as a component.
if (!rtc::ThreadManager::Instance()->CurrentThread()) { if (!rtc::ThreadManager::Instance()->CurrentThread()) {
rtc::ThreadManager::Instance()->SetCurrentThread(thread); rtc::ThreadManager::Instance()->SetCurrentThread(thread);
...@@ -28,7 +31,7 @@ IceTransportAdapterImpl::IceTransportAdapterImpl( ...@@ -28,7 +31,7 @@ IceTransportAdapterImpl::IceTransportAdapterImpl(
port_allocator_->Initialize(); port_allocator_->Initialize();
p2p_transport_channel_ = std::make_unique<cricket::P2PTransportChannel>( p2p_transport_channel_ = std::make_unique<cricket::P2PTransportChannel>(
"", 0, port_allocator_.get()); "", 0, port_allocator_.get(), async_resolver_factory.get());
p2p_transport_channel_->SignalGatheringState.connect( p2p_transport_channel_->SignalGatheringState.connect(
this, &IceTransportAdapterImpl::OnGatheringStateChanged); this, &IceTransportAdapterImpl::OnGatheringStateChanged);
p2p_transport_channel_->SignalCandidateGathered.connect( p2p_transport_channel_->SignalCandidateGathered.connect(
......
...@@ -21,6 +21,7 @@ class IceTransportAdapterImpl final : public IceTransportAdapter, ...@@ -21,6 +21,7 @@ class IceTransportAdapterImpl final : public IceTransportAdapter,
IceTransportAdapterImpl( IceTransportAdapterImpl(
Delegate* delegate, Delegate* delegate,
std::unique_ptr<cricket::PortAllocator> port_allocator, std::unique_ptr<cricket::PortAllocator> port_allocator,
std::unique_ptr<webrtc::AsyncResolverFactory> async_resolver_factory,
rtc::Thread* thread); rtc::Thread* thread);
~IceTransportAdapterImpl() override; ~IceTransportAdapterImpl() override;
...@@ -51,6 +52,7 @@ class IceTransportAdapterImpl final : public IceTransportAdapter, ...@@ -51,6 +52,7 @@ class IceTransportAdapterImpl final : public IceTransportAdapter,
Delegate* const delegate_; Delegate* const delegate_;
std::unique_ptr<cricket::PortAllocator> port_allocator_; std::unique_ptr<cricket::PortAllocator> port_allocator_;
std::unique_ptr<webrtc::AsyncResolverFactory> async_resolver_factory_;
std::unique_ptr<cricket::IceTransportInternal> p2p_transport_channel_; std::unique_ptr<cricket::IceTransportInternal> p2p_transport_channel_;
std::unique_ptr<P2PQuicPacketTransport> quic_packet_transport_adapter_; std::unique_ptr<P2PQuicPacketTransport> quic_packet_transport_adapter_;
}; };
......
...@@ -58,8 +58,11 @@ class DefaultIceTransportAdapterCrossThreadFactory ...@@ -58,8 +58,11 @@ class DefaultIceTransportAdapterCrossThreadFactory
void InitializeOnMainThread(LocalFrame& frame) override { void InitializeOnMainThread(LocalFrame& frame) override {
DCHECK(!port_allocator_); DCHECK(!port_allocator_);
DCHECK(!worker_thread_rtc_thread_); DCHECK(!worker_thread_rtc_thread_);
DCHECK(!async_resolver_factory_);
port_allocator_ = Platform::Current()->CreateWebRtcPortAllocator( port_allocator_ = Platform::Current()->CreateWebRtcPortAllocator(
frame.Client()->GetWebFrame()); frame.Client()->GetWebFrame());
async_resolver_factory_ =
Platform::Current()->CreateWebRtcAsyncResolverFactory();
worker_thread_rtc_thread_ = worker_thread_rtc_thread_ =
Platform::Current()->GetWebRtcWorkerThreadRtcThread(); Platform::Current()->GetWebRtcWorkerThreadRtcThread();
} }
...@@ -68,12 +71,15 @@ class DefaultIceTransportAdapterCrossThreadFactory ...@@ -68,12 +71,15 @@ class DefaultIceTransportAdapterCrossThreadFactory
IceTransportAdapter::Delegate* delegate) override { IceTransportAdapter::Delegate* delegate) override {
DCHECK(port_allocator_); DCHECK(port_allocator_);
DCHECK(worker_thread_rtc_thread_); DCHECK(worker_thread_rtc_thread_);
DCHECK(async_resolver_factory_);
return std::make_unique<IceTransportAdapterImpl>( return std::make_unique<IceTransportAdapterImpl>(
delegate, std::move(port_allocator_), worker_thread_rtc_thread_); delegate, std::move(port_allocator_),
std::move(async_resolver_factory_), worker_thread_rtc_thread_);
} }
private: private:
std::unique_ptr<cricket::PortAllocator> port_allocator_; std::unique_ptr<cricket::PortAllocator> port_allocator_;
std::unique_ptr<webrtc::AsyncResolverFactory> async_resolver_factory_;
rtc::Thread* worker_thread_rtc_thread_ = nullptr; rtc::Thread* worker_thread_rtc_thread_ = nullptr;
}; };
......
...@@ -67,6 +67,7 @@ ...@@ -67,6 +67,7 @@
#include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h" #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
#include "third_party/blink/renderer/platform/scheduler/public/thread.h" #include "third_party/blink/renderer/platform/scheduler/public/thread.h"
#include "third_party/blink/renderer/platform/wtf/hash_map.h" #include "third_party/blink/renderer/platform/wtf/hash_map.h"
#include "third_party/webrtc/api/async_resolver_factory.h"
#include "third_party/webrtc/api/rtp_parameters.h" #include "third_party/webrtc/api/rtp_parameters.h"
#include "third_party/webrtc/p2p/base/port_allocator.h" #include "third_party/webrtc/p2p/base/port_allocator.h"
...@@ -315,6 +316,11 @@ std::unique_ptr<cricket::PortAllocator> Platform::CreateWebRtcPortAllocator( ...@@ -315,6 +316,11 @@ std::unique_ptr<cricket::PortAllocator> Platform::CreateWebRtcPortAllocator(
return nullptr; return nullptr;
} }
std::unique_ptr<webrtc::AsyncResolverFactory>
Platform::CreateWebRtcAsyncResolverFactory() {
return nullptr;
}
std::unique_ptr<WebMediaRecorderHandler> Platform::CreateMediaRecorderHandler( std::unique_ptr<WebMediaRecorderHandler> Platform::CreateMediaRecorderHandler(
scoped_refptr<base::SingleThreadTaskRunner>) { scoped_refptr<base::SingleThreadTaskRunner>) {
return nullptr; return nullptr;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment