Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(127)

Side by Side Diff: content/renderer/media/webrtc/peer_connection_dependency_factory.cc

Issue 916873004: Add a Preference to allow WebRTC only bind to "any address" (all 0s) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « content/public/common/renderer_preferences.cc ('k') | content/renderer/p2p/port_allocator.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h" 5 #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
11 #include "base/synchronization/waitable_event.h" 11 #include "base/synchronization/waitable_event.h"
12 #include "content/common/media/media_stream_messages.h" 12 #include "content/common/media/media_stream_messages.h"
13 #include "content/public/common/content_switches.h" 13 #include "content/public/common/content_switches.h"
14 #include "content/public/common/renderer_preferences.h"
14 #include "content/renderer/media/media_stream.h" 15 #include "content/renderer/media/media_stream.h"
15 #include "content/renderer/media/media_stream_audio_processor.h" 16 #include "content/renderer/media/media_stream_audio_processor.h"
16 #include "content/renderer/media/media_stream_audio_processor_options.h" 17 #include "content/renderer/media/media_stream_audio_processor_options.h"
17 #include "content/renderer/media/media_stream_audio_source.h" 18 #include "content/renderer/media/media_stream_audio_source.h"
18 #include "content/renderer/media/media_stream_video_source.h" 19 #include "content/renderer/media/media_stream_video_source.h"
19 #include "content/renderer/media/media_stream_video_track.h" 20 #include "content/renderer/media/media_stream_video_track.h"
20 #include "content/renderer/media/peer_connection_identity_service.h" 21 #include "content/renderer/media/peer_connection_identity_service.h"
21 #include "content/renderer/media/rtc_media_constraints.h" 22 #include "content/renderer/media/rtc_media_constraints.h"
22 #include "content/renderer/media/rtc_peer_connection_handler.h" 23 #include "content/renderer/media/rtc_peer_connection_handler.h"
23 #include "content/renderer/media/rtc_video_decoder_factory.h" 24 #include "content/renderer/media/rtc_video_decoder_factory.h"
24 #include "content/renderer/media/rtc_video_encoder_factory.h" 25 #include "content/renderer/media/rtc_video_encoder_factory.h"
25 #include "content/renderer/media/webaudio_capturer_source.h" 26 #include "content/renderer/media/webaudio_capturer_source.h"
26 #include "content/renderer/media/webrtc/webrtc_local_audio_track_adapter.h" 27 #include "content/renderer/media/webrtc/webrtc_local_audio_track_adapter.h"
27 #include "content/renderer/media/webrtc/webrtc_video_capturer_adapter.h" 28 #include "content/renderer/media/webrtc/webrtc_video_capturer_adapter.h"
28 #include "content/renderer/media/webrtc_audio_device_impl.h" 29 #include "content/renderer/media/webrtc_audio_device_impl.h"
29 #include "content/renderer/media/webrtc_local_audio_track.h" 30 #include "content/renderer/media/webrtc_local_audio_track.h"
30 #include "content/renderer/media/webrtc_logging.h" 31 #include "content/renderer/media/webrtc_logging.h"
31 #include "content/renderer/media/webrtc_uma_histograms.h" 32 #include "content/renderer/media/webrtc_uma_histograms.h"
32 #include "content/renderer/p2p/ipc_network_manager.h" 33 #include "content/renderer/p2p/ipc_network_manager.h"
33 #include "content/renderer/p2p/ipc_socket_factory.h" 34 #include "content/renderer/p2p/ipc_socket_factory.h"
34 #include "content/renderer/p2p/port_allocator.h" 35 #include "content/renderer/p2p/port_allocator.h"
35 #include "content/renderer/render_thread_impl.h" 36 #include "content/renderer/render_thread_impl.h"
37 #include "content/renderer/render_view_impl.h"
36 #include "jingle/glue/thread_wrapper.h" 38 #include "jingle/glue/thread_wrapper.h"
37 #include "media/filters/gpu_video_accelerator_factories.h" 39 #include "media/filters/gpu_video_accelerator_factories.h"
38 #include "third_party/WebKit/public/platform/WebMediaConstraints.h" 40 #include "third_party/WebKit/public/platform/WebMediaConstraints.h"
39 #include "third_party/WebKit/public/platform/WebMediaStream.h" 41 #include "third_party/WebKit/public/platform/WebMediaStream.h"
40 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" 42 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
41 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" 43 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
42 #include "third_party/WebKit/public/platform/WebURL.h" 44 #include "third_party/WebKit/public/platform/WebURL.h"
43 #include "third_party/WebKit/public/web/WebDocument.h" 45 #include "third_party/WebKit/public/web/WebDocument.h"
44 #include "third_party/WebKit/public/web/WebFrame.h" 46 #include "third_party/WebKit/public/web/WebFrame.h"
45 #include "third_party/libjingle/source/talk/app/webrtc/mediaconstraintsinterface .h" 47 #include "third_party/libjingle/source/talk/app/webrtc/mediaconstraintsinterface .h"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 webrtc::MediaConstraintsInterface::kValueFalse, true); 109 webrtc::MediaConstraintsInterface::kValueFalse, true);
108 // No need to modify |effects| since the ducking flag is already off. 110 // No need to modify |effects| since the ducking flag is already off.
109 DCHECK((*effects & media::AudioParameters::DUCKING) == 0); 111 DCHECK((*effects & media::AudioParameters::DUCKING) == 0);
110 } 112 }
111 } 113 }
112 } 114 }
113 } 115 }
114 116
115 class P2PPortAllocatorFactory : public webrtc::PortAllocatorFactoryInterface { 117 class P2PPortAllocatorFactory : public webrtc::PortAllocatorFactoryInterface {
116 public: 118 public:
117 P2PPortAllocatorFactory( 119 P2PPortAllocatorFactory(P2PSocketDispatcher* socket_dispatcher,
118 P2PSocketDispatcher* socket_dispatcher, 120 rtc::NetworkManager* network_manager,
119 rtc::NetworkManager* network_manager, 121 rtc::PacketSocketFactory* socket_factory,
120 rtc::PacketSocketFactory* socket_factory) 122 bool enable_multiple_routes)
121 : socket_dispatcher_(socket_dispatcher), 123 : socket_dispatcher_(socket_dispatcher),
122 network_manager_(network_manager), 124 network_manager_(network_manager),
123 socket_factory_(socket_factory) { 125 socket_factory_(socket_factory),
124 } 126 enable_multiple_routes_(enable_multiple_routes) {}
125 127
126 cricket::PortAllocator* CreatePortAllocator( 128 cricket::PortAllocator* CreatePortAllocator(
127 const std::vector<StunConfiguration>& stun_servers, 129 const std::vector<StunConfiguration>& stun_servers,
128 const std::vector<TurnConfiguration>& turn_configurations) override { 130 const std::vector<TurnConfiguration>& turn_configurations) override {
129 P2PPortAllocator::Config config; 131 P2PPortAllocator::Config config;
130 for (size_t i = 0; i < stun_servers.size(); ++i) { 132 for (size_t i = 0; i < stun_servers.size(); ++i) {
131 config.stun_servers.insert(rtc::SocketAddress( 133 config.stun_servers.insert(rtc::SocketAddress(
132 stun_servers[i].server.hostname(), 134 stun_servers[i].server.hostname(),
133 stun_servers[i].server.port())); 135 stun_servers[i].server.port()));
134 } 136 }
135 for (size_t i = 0; i < turn_configurations.size(); ++i) { 137 for (size_t i = 0; i < turn_configurations.size(); ++i) {
136 P2PPortAllocator::Config::RelayServerConfig relay_config; 138 P2PPortAllocator::Config::RelayServerConfig relay_config;
137 relay_config.server_address = turn_configurations[i].server.hostname(); 139 relay_config.server_address = turn_configurations[i].server.hostname();
138 relay_config.port = turn_configurations[i].server.port(); 140 relay_config.port = turn_configurations[i].server.port();
139 relay_config.username = turn_configurations[i].username; 141 relay_config.username = turn_configurations[i].username;
140 relay_config.password = turn_configurations[i].password; 142 relay_config.password = turn_configurations[i].password;
141 relay_config.transport_type = turn_configurations[i].transport_type; 143 relay_config.transport_type = turn_configurations[i].transport_type;
142 relay_config.secure = turn_configurations[i].secure; 144 relay_config.secure = turn_configurations[i].secure;
143 config.relays.push_back(relay_config); 145 config.relays.push_back(relay_config);
144 146
145 // Use turn servers as stun servers. 147 // Use turn servers as stun servers.
146 config.stun_servers.insert(rtc::SocketAddress( 148 config.stun_servers.insert(rtc::SocketAddress(
147 turn_configurations[i].server.hostname(), 149 turn_configurations[i].server.hostname(),
148 turn_configurations[i].server.port())); 150 turn_configurations[i].server.port()));
149 } 151 }
152 config.enable_multiple_routes = enable_multiple_routes_;
150 153
151 return new P2PPortAllocator( 154 return new P2PPortAllocator(
152 socket_dispatcher_.get(), network_manager_, socket_factory_, config); 155 socket_dispatcher_.get(), network_manager_, socket_factory_, config);
153 } 156 }
154 157
155 protected: 158 protected:
156 ~P2PPortAllocatorFactory() override {} 159 ~P2PPortAllocatorFactory() override {}
157 160
158 private: 161 private:
159 scoped_refptr<P2PSocketDispatcher> socket_dispatcher_; 162 scoped_refptr<P2PSocketDispatcher> socket_dispatcher_;
160 // |network_manager_| and |socket_factory_| are a weak references, owned by 163 // |network_manager_| and |socket_factory_| are a weak references, owned by
161 // PeerConnectionDependencyFactory. 164 // PeerConnectionDependencyFactory.
162 rtc::NetworkManager* network_manager_; 165 rtc::NetworkManager* network_manager_;
163 rtc::PacketSocketFactory* socket_factory_; 166 rtc::PacketSocketFactory* socket_factory_;
167
168 // When false, only 'any' address (all 0s) will be bound for address
169 // discovery.
170 bool enable_multiple_routes_;
164 }; 171 };
165 172
166 PeerConnectionDependencyFactory::PeerConnectionDependencyFactory( 173 PeerConnectionDependencyFactory::PeerConnectionDependencyFactory(
167 P2PSocketDispatcher* p2p_socket_dispatcher) 174 P2PSocketDispatcher* p2p_socket_dispatcher)
168 : network_manager_(NULL), 175 : network_manager_(NULL),
169 p2p_socket_dispatcher_(p2p_socket_dispatcher), 176 p2p_socket_dispatcher_(p2p_socket_dispatcher),
170 signaling_thread_(NULL), 177 signaling_thread_(NULL),
171 worker_thread_(NULL), 178 worker_thread_(NULL),
172 chrome_signaling_thread_("Chrome_libJingle_Signaling"), 179 chrome_signaling_thread_("Chrome_libJingle_Signaling"),
173 chrome_worker_thread_("Chrome_libJingle_WorkerThread") { 180 chrome_worker_thread_("Chrome_libJingle_WorkerThread") {
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 PeerConnectionDependencyFactory::CreatePeerConnection( 394 PeerConnectionDependencyFactory::CreatePeerConnection(
388 const webrtc::PeerConnectionInterface::RTCConfiguration& config, 395 const webrtc::PeerConnectionInterface::RTCConfiguration& config,
389 const webrtc::MediaConstraintsInterface* constraints, 396 const webrtc::MediaConstraintsInterface* constraints,
390 blink::WebFrame* web_frame, 397 blink::WebFrame* web_frame,
391 webrtc::PeerConnectionObserver* observer) { 398 webrtc::PeerConnectionObserver* observer) {
392 CHECK(web_frame); 399 CHECK(web_frame);
393 CHECK(observer); 400 CHECK(observer);
394 if (!GetPcFactory().get()) 401 if (!GetPcFactory().get())
395 return NULL; 402 return NULL;
396 403
404 // Copy the flag from Preference associated with this WebFrame.
405 bool enable_multiple_routes = true;
406 if (web_frame && web_frame->view()) {
407 RenderViewImpl* renderer_view_impl =
408 RenderViewImpl::FromWebView(web_frame->view());
409 if (renderer_view_impl) {
410 enable_multiple_routes = renderer_view_impl->renderer_preferences()
411 .enable_webrtc_multiple_routes;
412 }
413 }
414
397 scoped_refptr<P2PPortAllocatorFactory> pa_factory = 415 scoped_refptr<P2PPortAllocatorFactory> pa_factory =
398 new rtc::RefCountedObject<P2PPortAllocatorFactory>( 416 new rtc::RefCountedObject<P2PPortAllocatorFactory>(
399 p2p_socket_dispatcher_.get(), 417 p2p_socket_dispatcher_.get(), network_manager_, socket_factory_.get(),
400 network_manager_, 418 enable_multiple_routes);
401 socket_factory_.get());
402 419
403 PeerConnectionIdentityService* identity_service = 420 PeerConnectionIdentityService* identity_service =
404 new PeerConnectionIdentityService( 421 new PeerConnectionIdentityService(
405 GURL(web_frame->document().url().spec()).GetOrigin()); 422 GURL(web_frame->document().url().spec()).GetOrigin());
406 423
407 return GetPcFactory()->CreatePeerConnection(config, 424 return GetPcFactory()->CreatePeerConnection(config,
408 constraints, 425 constraints,
409 pa_factory.get(), 426 pa_factory.get(),
410 identity_service, 427 identity_service,
411 observer).get(); 428 observer).get();
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 } 639 }
623 640
624 void PeerConnectionDependencyFactory::EnsureWebRtcAudioDeviceImpl() { 641 void PeerConnectionDependencyFactory::EnsureWebRtcAudioDeviceImpl() {
625 if (audio_device_.get()) 642 if (audio_device_.get())
626 return; 643 return;
627 644
628 audio_device_ = new WebRtcAudioDeviceImpl(); 645 audio_device_ = new WebRtcAudioDeviceImpl();
629 } 646 }
630 647
631 } // namespace content 648 } // namespace content
OLDNEW
« no previous file with comments | « content/public/common/renderer_preferences.cc ('k') | content/renderer/p2p/port_allocator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698