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(
webrtc::PeerConnectionDependencies dependencies(observer);
dependencies.allocator = CreatePortAllocator(web_frame);
dependencies.async_resolver_factory =
std::make_unique<ProxyAsyncResolverFactory>(socket_factory_.get());
dependencies.async_resolver_factory = CreateAsyncResolverFactory();
return GetPcFactory()
->CreatePeerConnection(config, std::move(dependencies))
.get();
......@@ -462,6 +461,11 @@ PeerConnectionDependencyFactory::CreatePortAllocator(
return port_allocator;
}
std::unique_ptr<webrtc::AsyncResolverFactory>
PeerConnectionDependencyFactory::CreateAsyncResolverFactory() {
return std::make_unique<ProxyAsyncResolverFactory>(socket_factory_.get());
}
scoped_refptr<webrtc::MediaStreamInterface>
PeerConnectionDependencyFactory::CreateLocalMediaStream(
const std::string& label) {
......
......@@ -87,6 +87,10 @@ class CONTENT_EXPORT PeerConnectionDependencyFactory
virtual std::unique_ptr<P2PPortAllocator> CreatePortAllocator(
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
// RTCPeerConnectionHandler instance.
virtual webrtc::SessionDescriptionInterface* CreateSessionDescription(
......
......@@ -733,6 +733,16 @@ RendererBlinkPlatformImpl::CreateWebRtcPortAllocator(
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>
......
......@@ -160,6 +160,8 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : public BlinkPlatformImpl {
rtc::Thread* GetWebRtcWorkerThreadRtcThread() override;
std::unique_ptr<cricket::PortAllocator> CreateWebRtcPortAllocator(
blink::WebLocalFrame* frame) override;
std::unique_ptr<webrtc::AsyncResolverFactory>
CreateWebRtcAsyncResolverFactory() override;
std::unique_ptr<blink::WebCanvasCaptureHandler> CreateCanvasCaptureHandler(
const blink::WebSize& size,
double frame_rate,
......
......@@ -94,6 +94,7 @@ class Local;
namespace webrtc {
struct RtpCapabilities;
class AsyncResolverFactory;
}
namespace blink {
......@@ -635,6 +636,10 @@ class BLINK_PLATFORM_EXPORT Platform {
virtual std::unique_ptr<cricket::PortAllocator> CreateWebRtcPortAllocator(
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.
virtual std::unique_ptr<WebCanvasCaptureHandler>
CreateCanvasCaptureHandler(const WebSize&, double, WebMediaStreamTrack*);
......
......@@ -11,8 +11,11 @@ namespace blink {
IceTransportAdapterImpl::IceTransportAdapterImpl(
Delegate* delegate,
std::unique_ptr<cricket::PortAllocator> port_allocator,
std::unique_ptr<webrtc::AsyncResolverFactory> async_resolver_factory,
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.
if (!rtc::ThreadManager::Instance()->CurrentThread()) {
rtc::ThreadManager::Instance()->SetCurrentThread(thread);
......@@ -28,7 +31,7 @@ IceTransportAdapterImpl::IceTransportAdapterImpl(
port_allocator_->Initialize();
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(
this, &IceTransportAdapterImpl::OnGatheringStateChanged);
p2p_transport_channel_->SignalCandidateGathered.connect(
......
......@@ -21,6 +21,7 @@ class IceTransportAdapterImpl final : public IceTransportAdapter,
IceTransportAdapterImpl(
Delegate* delegate,
std::unique_ptr<cricket::PortAllocator> port_allocator,
std::unique_ptr<webrtc::AsyncResolverFactory> async_resolver_factory,
rtc::Thread* thread);
~IceTransportAdapterImpl() override;
......@@ -51,6 +52,7 @@ class IceTransportAdapterImpl final : public IceTransportAdapter,
Delegate* const delegate_;
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<P2PQuicPacketTransport> quic_packet_transport_adapter_;
};
......
......@@ -58,8 +58,11 @@ class DefaultIceTransportAdapterCrossThreadFactory
void InitializeOnMainThread(LocalFrame& frame) override {
DCHECK(!port_allocator_);
DCHECK(!worker_thread_rtc_thread_);
DCHECK(!async_resolver_factory_);
port_allocator_ = Platform::Current()->CreateWebRtcPortAllocator(
frame.Client()->GetWebFrame());
async_resolver_factory_ =
Platform::Current()->CreateWebRtcAsyncResolverFactory();
worker_thread_rtc_thread_ =
Platform::Current()->GetWebRtcWorkerThreadRtcThread();
}
......@@ -68,12 +71,15 @@ class DefaultIceTransportAdapterCrossThreadFactory
IceTransportAdapter::Delegate* delegate) override {
DCHECK(port_allocator_);
DCHECK(worker_thread_rtc_thread_);
DCHECK(async_resolver_factory_);
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:
std::unique_ptr<cricket::PortAllocator> port_allocator_;
std::unique_ptr<webrtc::AsyncResolverFactory> async_resolver_factory_;
rtc::Thread* worker_thread_rtc_thread_ = nullptr;
};
......
......@@ -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/thread.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/p2p/base/port_allocator.h"
......@@ -315,6 +316,11 @@ std::unique_ptr<cricket::PortAllocator> Platform::CreateWebRtcPortAllocator(
return nullptr;
}
std::unique_ptr<webrtc::AsyncResolverFactory>
Platform::CreateWebRtcAsyncResolverFactory() {
return nullptr;
}
std::unique_ptr<WebMediaRecorderHandler> Platform::CreateMediaRecorderHandler(
scoped_refptr<base::SingleThreadTaskRunner>) {
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