Index: content/renderer/media/webrtc/peer_connection_dependency_factory.cc |
diff --git a/content/renderer/media/webrtc/peer_connection_dependency_factory.cc b/content/renderer/media/webrtc/peer_connection_dependency_factory.cc |
index fb09fafb11beb8b2aff5c3db0ccc1334ceaa1e9f..d9f485bcb363823c225743d6f5384ba80f696748 100644 |
--- a/content/renderer/media/webrtc/peer_connection_dependency_factory.cc |
+++ b/content/renderer/media/webrtc/peer_connection_dependency_factory.cc |
@@ -11,6 +11,7 @@ |
#include "base/synchronization/waitable_event.h" |
#include "content/common/media/media_stream_messages.h" |
#include "content/public/common/content_switches.h" |
+#include "content/public/common/renderer_preferences.h" |
#include "content/renderer/media/media_stream.h" |
#include "content/renderer/media/media_stream_audio_processor.h" |
#include "content/renderer/media/media_stream_audio_processor_options.h" |
@@ -33,6 +34,7 @@ |
#include "content/renderer/p2p/ipc_socket_factory.h" |
#include "content/renderer/p2p/port_allocator.h" |
#include "content/renderer/render_thread_impl.h" |
+#include "content/renderer/render_view_impl.h" |
#include "jingle/glue/thread_wrapper.h" |
#include "media/filters/gpu_video_accelerator_factories.h" |
#include "third_party/WebKit/public/platform/WebMediaConstraints.h" |
@@ -114,14 +116,14 @@ void HarmonizeConstraintsAndEffects(RTCMediaConstraints* constraints, |
class P2PPortAllocatorFactory : public webrtc::PortAllocatorFactoryInterface { |
public: |
- P2PPortAllocatorFactory( |
- P2PSocketDispatcher* socket_dispatcher, |
- rtc::NetworkManager* network_manager, |
- rtc::PacketSocketFactory* socket_factory) |
+ P2PPortAllocatorFactory(P2PSocketDispatcher* socket_dispatcher, |
+ rtc::NetworkManager* network_manager, |
+ rtc::PacketSocketFactory* socket_factory, |
+ bool enable_multiple_routes) |
: socket_dispatcher_(socket_dispatcher), |
network_manager_(network_manager), |
- socket_factory_(socket_factory) { |
- } |
+ socket_factory_(socket_factory), |
+ enable_multiple_routes_(enable_multiple_routes) {} |
cricket::PortAllocator* CreatePortAllocator( |
const std::vector<StunConfiguration>& stun_servers, |
@@ -147,6 +149,7 @@ class P2PPortAllocatorFactory : public webrtc::PortAllocatorFactoryInterface { |
turn_configurations[i].server.hostname(), |
turn_configurations[i].server.port())); |
} |
+ config.enable_multiple_routes = enable_multiple_routes_; |
return new P2PPortAllocator( |
socket_dispatcher_.get(), network_manager_, socket_factory_, config); |
@@ -161,6 +164,10 @@ class P2PPortAllocatorFactory : public webrtc::PortAllocatorFactoryInterface { |
// PeerConnectionDependencyFactory. |
rtc::NetworkManager* network_manager_; |
rtc::PacketSocketFactory* socket_factory_; |
+ |
+ // When false, only 'any' address (all 0s) will be bound for address |
+ // discovery. |
+ bool enable_multiple_routes_; |
}; |
PeerConnectionDependencyFactory::PeerConnectionDependencyFactory( |
@@ -394,11 +401,21 @@ PeerConnectionDependencyFactory::CreatePeerConnection( |
if (!GetPcFactory().get()) |
return NULL; |
+ // Copy the flag from Preference associated with this WebFrame. |
+ bool enable_multiple_routes = true; |
+ if (web_frame && web_frame->view()) { |
+ RenderViewImpl* renderer_view_impl = |
+ RenderViewImpl::FromWebView(web_frame->view()); |
+ if (renderer_view_impl) { |
+ enable_multiple_routes = renderer_view_impl->renderer_preferences() |
+ .enable_webrtc_multiple_routes; |
+ } |
+ } |
+ |
scoped_refptr<P2PPortAllocatorFactory> pa_factory = |
- new rtc::RefCountedObject<P2PPortAllocatorFactory>( |
- p2p_socket_dispatcher_.get(), |
- network_manager_, |
- socket_factory_.get()); |
+ new rtc::RefCountedObject<P2PPortAllocatorFactory>( |
+ p2p_socket_dispatcher_.get(), network_manager_, socket_factory_.get(), |
+ enable_multiple_routes); |
PeerConnectionIdentityService* identity_service = |
new PeerConnectionIdentityService( |