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

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

Issue 2127653002: Add policy to control valid UDP port range in WebRTC (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: tnagel's comments Created 4 years, 4 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') | tools/metrics/histograms/histograms.xml » ('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 <stddef.h> 7 #include <stddef.h>
8 8
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 const std::string& preference) { 84 const std::string& preference) {
85 if (preference == kWebRTCIPHandlingDefaultPublicAndPrivateInterfaces) 85 if (preference == kWebRTCIPHandlingDefaultPublicAndPrivateInterfaces)
86 return DEFAULT_PUBLIC_AND_PRIVATE_INTERFACES; 86 return DEFAULT_PUBLIC_AND_PRIVATE_INTERFACES;
87 if (preference == kWebRTCIPHandlingDefaultPublicInterfaceOnly) 87 if (preference == kWebRTCIPHandlingDefaultPublicInterfaceOnly)
88 return DEFAULT_PUBLIC_INTERFACE_ONLY; 88 return DEFAULT_PUBLIC_INTERFACE_ONLY;
89 if (preference == kWebRTCIPHandlingDisableNonProxiedUdp) 89 if (preference == kWebRTCIPHandlingDisableNonProxiedUdp)
90 return DISABLE_NON_PROXIED_UDP; 90 return DISABLE_NON_PROXIED_UDP;
91 return DEFAULT; 91 return DEFAULT;
92 } 92 }
93 93
94 bool IsValidPortRange(uint16_t min_port, uint16_t max_port) {
95 DCHECK(min_port <= max_port);
96 return min_port != 0 && max_port != 0;
97 }
98
94 } // namespace 99 } // namespace
95 100
96 PeerConnectionDependencyFactory::PeerConnectionDependencyFactory( 101 PeerConnectionDependencyFactory::PeerConnectionDependencyFactory(
97 P2PSocketDispatcher* p2p_socket_dispatcher) 102 P2PSocketDispatcher* p2p_socket_dispatcher)
98 : network_manager_(NULL), 103 : network_manager_(NULL),
99 p2p_socket_dispatcher_(p2p_socket_dispatcher), 104 p2p_socket_dispatcher_(p2p_socket_dispatcher),
100 signaling_thread_(NULL), 105 signaling_thread_(NULL),
101 worker_thread_(NULL), 106 worker_thread_(NULL),
102 chrome_signaling_thread_("Chrome_libJingle_Signaling"), 107 chrome_signaling_thread_("Chrome_libJingle_Signaling"),
103 chrome_worker_thread_("Chrome_libJingle_WorkerThread") { 108 chrome_worker_thread_("Chrome_libJingle_WorkerThread") {
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 const webrtc::PeerConnectionInterface::RTCConfiguration& config, 295 const webrtc::PeerConnectionInterface::RTCConfiguration& config,
291 blink::WebFrame* web_frame, 296 blink::WebFrame* web_frame,
292 webrtc::PeerConnectionObserver* observer) { 297 webrtc::PeerConnectionObserver* observer) {
293 CHECK(web_frame); 298 CHECK(web_frame);
294 CHECK(observer); 299 CHECK(observer);
295 if (!GetPcFactory().get()) 300 if (!GetPcFactory().get())
296 return NULL; 301 return NULL;
297 302
298 // Copy the flag from Preference associated with this WebFrame. 303 // Copy the flag from Preference associated with this WebFrame.
299 P2PPortAllocator::Config port_config; 304 P2PPortAllocator::Config port_config;
305 uint16_t min_port = 0;
306 uint16_t max_port = 0;
300 307
301 // |media_permission| will be called to check mic/camera permission. If at 308 // |media_permission| will be called to check mic/camera permission. If at
302 // least one of them is granted, P2PPortAllocator is allowed to gather local 309 // least one of them is granted, P2PPortAllocator is allowed to gather local
303 // host IP addresses as ICE candidates. |media_permission| could be nullptr, 310 // host IP addresses as ICE candidates. |media_permission| could be nullptr,
304 // which means the permission will be granted automatically. This could be the 311 // which means the permission will be granted automatically. This could be the
305 // case when either the experiment is not enabled or the preference is not 312 // case when either the experiment is not enabled or the preference is not
306 // enforced. 313 // enforced.
307 // 314 //
308 // Note on |media_permission| lifetime: |media_permission| is owned by a frame 315 // Note on |media_permission| lifetime: |media_permission| is owned by a frame
309 // (RenderFrameImpl). It is also stored as an indirect member of 316 // (RenderFrameImpl). It is also stored as an indirect member of
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 case DISABLE_NON_PROXIED_UDP: 353 case DISABLE_NON_PROXIED_UDP:
347 port_config.enable_multiple_routes = false; 354 port_config.enable_multiple_routes = false;
348 port_config.enable_nonproxied_udp = false; 355 port_config.enable_nonproxied_udp = false;
349 break; 356 break;
350 case DEFAULT: 357 case DEFAULT:
351 port_config.enable_multiple_routes = true; 358 port_config.enable_multiple_routes = true;
352 port_config.enable_nonproxied_udp = true; 359 port_config.enable_nonproxied_udp = true;
353 break; 360 break;
354 } 361 }
355 362
363 min_port =
364 renderer_view_impl->renderer_preferences().webrtc_udp_min_port;
365 max_port =
366 renderer_view_impl->renderer_preferences().webrtc_udp_max_port;
367
356 VLOG(3) << "WebRTC routing preferences: " 368 VLOG(3) << "WebRTC routing preferences: "
357 << "policy: " << policy 369 << "policy: " << policy
358 << ", multiple_routes: " << port_config.enable_multiple_routes 370 << ", multiple_routes: " << port_config.enable_multiple_routes
359 << ", nonproxied_udp: " << port_config.enable_nonproxied_udp; 371 << ", nonproxied_udp: " << port_config.enable_nonproxied_udp
372 << ", min_udp_port: " << min_port
373 << ", max_udp_port: " << max_port;
360 } 374 }
361 } 375 }
362 if (port_config.enable_multiple_routes) { 376 if (port_config.enable_multiple_routes) {
363 bool create_media_permission = 377 bool create_media_permission =
364 base::CommandLine::ForCurrentProcess()->HasSwitch( 378 base::CommandLine::ForCurrentProcess()->HasSwitch(
365 switches::kEnforceWebRtcIPPermissionCheck); 379 switches::kEnforceWebRtcIPPermissionCheck);
366 create_media_permission = 380 create_media_permission =
367 create_media_permission || 381 create_media_permission ||
368 !StartsWith(base::FieldTrialList::FindFullName( 382 !StartsWith(base::FieldTrialList::FindFullName(
369 "WebRTC-LocalIPPermissionCheck"), 383 "WebRTC-LocalIPPermissionCheck"),
(...skipping 16 matching lines...) Expand all
386 FilteringNetworkManager* filtering_network_manager = 400 FilteringNetworkManager* filtering_network_manager =
387 new FilteringNetworkManager(network_manager_, requesting_origin, 401 new FilteringNetworkManager(network_manager_, requesting_origin,
388 media_permission); 402 media_permission);
389 network_manager.reset(filtering_network_manager); 403 network_manager.reset(filtering_network_manager);
390 } else { 404 } else {
391 network_manager.reset(new EmptyNetworkManager(network_manager_)); 405 network_manager.reset(new EmptyNetworkManager(network_manager_));
392 } 406 }
393 std::unique_ptr<P2PPortAllocator> port_allocator(new P2PPortAllocator( 407 std::unique_ptr<P2PPortAllocator> port_allocator(new P2PPortAllocator(
394 p2p_socket_dispatcher_, std::move(network_manager), socket_factory_.get(), 408 p2p_socket_dispatcher_, std::move(network_manager), socket_factory_.get(),
395 port_config, requesting_origin)); 409 port_config, requesting_origin));
410 if (IsValidPortRange(min_port, max_port))
411 port_allocator->SetPortRange(min_port, max_port);
396 412
397 return GetPcFactory() 413 return GetPcFactory()
398 ->CreatePeerConnection(config, std::move(port_allocator), 414 ->CreatePeerConnection(config, std::move(port_allocator),
399 nullptr, observer) 415 nullptr, observer)
400 .get(); 416 .get();
401 } 417 }
402 418
403 scoped_refptr<webrtc::MediaStreamInterface> 419 scoped_refptr<webrtc::MediaStreamInterface>
404 PeerConnectionDependencyFactory::CreateLocalMediaStream( 420 PeerConnectionDependencyFactory::CreateLocalMediaStream(
405 const std::string& label) { 421 const std::string& label) {
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 575
560 void PeerConnectionDependencyFactory::EnsureWebRtcAudioDeviceImpl() { 576 void PeerConnectionDependencyFactory::EnsureWebRtcAudioDeviceImpl() {
561 DCHECK(CalledOnValidThread()); 577 DCHECK(CalledOnValidThread());
562 if (audio_device_.get()) 578 if (audio_device_.get())
563 return; 579 return;
564 580
565 audio_device_ = new WebRtcAudioDeviceImpl(); 581 audio_device_ = new WebRtcAudioDeviceImpl();
566 } 582 }
567 583
568 } // namespace content 584 } // namespace content
OLDNEW
« no previous file with comments | « content/public/common/renderer_preferences.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698