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

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

Issue 1464183002: media: Simplify MediaPermissionDispatcher. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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
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 <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 << kConstraintEffectMap[i].constraint; 132 << kConstraintEffectMap[i].constraint;
133 } 133 }
134 } 134 }
135 } 135 }
136 } 136 }
137 137
138 class P2PPortAllocatorFactory 138 class P2PPortAllocatorFactory
139 : public rtc::RefCountedObject<webrtc::PortAllocatorFactoryInterface> { 139 : public rtc::RefCountedObject<webrtc::PortAllocatorFactoryInterface> {
140 public: 140 public:
141 P2PPortAllocatorFactory( 141 P2PPortAllocatorFactory(
142 scoped_ptr<media::MediaPermission> media_permission, 142 media::MediaPermission* media_permission,
143 const scoped_refptr<P2PSocketDispatcher>& socket_dispatcher, 143 const scoped_refptr<P2PSocketDispatcher>& socket_dispatcher,
144 rtc::NetworkManager* network_manager, 144 rtc::NetworkManager* network_manager,
145 rtc::PacketSocketFactory* socket_factory, 145 rtc::PacketSocketFactory* socket_factory,
146 const P2PPortAllocator::Config& config, 146 const P2PPortAllocator::Config& config,
147 const GURL& origin, 147 const GURL& origin,
148 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) 148 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner)
149 : media_permission_(media_permission.Pass()), 149 : media_permission_(media_permission),
150 socket_dispatcher_(socket_dispatcher), 150 socket_dispatcher_(socket_dispatcher),
151 network_manager_(network_manager), 151 network_manager_(network_manager),
152 socket_factory_(socket_factory), 152 socket_factory_(socket_factory),
153 config_(config), 153 config_(config),
154 origin_(origin), 154 origin_(origin),
155 task_runner_(task_runner) {} 155 task_runner_(task_runner) {}
156 156
157 cricket::PortAllocator* CreatePortAllocator( 157 cricket::PortAllocator* CreatePortAllocator(
158 const std::vector<StunConfiguration>& stun_servers, 158 const std::vector<StunConfiguration>& stun_servers,
159 const std::vector<TurnConfiguration>& turn_configurations) override { 159 const std::vector<TurnConfiguration>& turn_configurations) override {
160 P2PPortAllocator::Config config = config_; 160 P2PPortAllocator::Config config = config_;
161 for (size_t i = 0; i < stun_servers.size(); ++i) { 161 for (size_t i = 0; i < stun_servers.size(); ++i) {
162 config.stun_servers.insert(rtc::SocketAddress( 162 config.stun_servers.insert(rtc::SocketAddress(
163 stun_servers[i].server.hostname(), 163 stun_servers[i].server.hostname(),
164 stun_servers[i].server.port())); 164 stun_servers[i].server.port()));
165 } 165 }
166 for (size_t i = 0; i < turn_configurations.size(); ++i) { 166 for (size_t i = 0; i < turn_configurations.size(); ++i) {
167 P2PPortAllocator::Config::RelayServerConfig relay_config; 167 P2PPortAllocator::Config::RelayServerConfig relay_config;
168 relay_config.server_address = turn_configurations[i].server.hostname(); 168 relay_config.server_address = turn_configurations[i].server.hostname();
169 relay_config.port = turn_configurations[i].server.port(); 169 relay_config.port = turn_configurations[i].server.port();
170 relay_config.username = turn_configurations[i].username; 170 relay_config.username = turn_configurations[i].username;
171 relay_config.password = turn_configurations[i].password; 171 relay_config.password = turn_configurations[i].password;
172 relay_config.transport_type = turn_configurations[i].transport_type; 172 relay_config.transport_type = turn_configurations[i].transport_type;
173 relay_config.secure = turn_configurations[i].secure; 173 relay_config.secure = turn_configurations[i].secure;
174 config.relays.push_back(relay_config); 174 config.relays.push_back(relay_config);
175 } 175 }
176 176
177 scoped_ptr<rtc::NetworkManager> network_manager; 177 scoped_ptr<rtc::NetworkManager> network_manager;
178 if (config.enable_multiple_routes) { 178 if (config.enable_multiple_routes) {
179 media::MediaPermission* media_permission = media_permission_.get();
180 FilteringNetworkManager* filtering_network_manager = 179 FilteringNetworkManager* filtering_network_manager =
181 new FilteringNetworkManager(network_manager_, origin_, 180 new FilteringNetworkManager(network_manager_, origin_,
182 media_permission_.Pass()); 181 media_permission_);
183 if (media_permission) { 182 if (media_permission_) {
184 // Start permission check earlier to reduce any impact to call set up 183 // Start permission check earlier to reduce any impact to call set up
185 // time. It's safe to use Unretained here since both destructor and 184 // time. It's safe to use Unretained here since both destructor and
186 // Initialize can only be called on the worker thread. 185 // Initialize can only be called on the worker thread.
187 task_runner_->PostTask( 186 task_runner_->PostTask(
188 FROM_HERE, base::Bind(&FilteringNetworkManager::Initialize, 187 FROM_HERE, base::Bind(&FilteringNetworkManager::Initialize,
189 base::Unretained(filtering_network_manager))); 188 base::Unretained(filtering_network_manager)));
190 } 189 }
191 network_manager.reset(filtering_network_manager); 190 network_manager.reset(filtering_network_manager);
192 } else { 191 } else {
193 network_manager.reset(new EmptyNetworkManager(network_manager_)); 192 network_manager.reset(new EmptyNetworkManager(network_manager_));
194 } 193 }
195 194
196 return new P2PPortAllocator(socket_dispatcher_, network_manager.Pass(), 195 return new P2PPortAllocator(socket_dispatcher_, network_manager.Pass(),
197 socket_factory_, config, origin_, task_runner_); 196 socket_factory_, config, origin_, task_runner_);
198 } 197 }
199 198
200 protected: 199 protected:
201 ~P2PPortAllocatorFactory() override {} 200 ~P2PPortAllocatorFactory() override {}
202 201
203 private: 202 private:
204 // Ownership of |media_permission_| will be passed to FilteringNetworkManager 203 media::MediaPermission* media_permission_;
205 // during CreatePortAllocator.
206 scoped_ptr<media::MediaPermission> media_permission_;
207
208 scoped_refptr<P2PSocketDispatcher> socket_dispatcher_; 204 scoped_refptr<P2PSocketDispatcher> socket_dispatcher_;
209 rtc::NetworkManager* network_manager_; 205 rtc::NetworkManager* network_manager_;
210 rtc::PacketSocketFactory* socket_factory_; 206 rtc::PacketSocketFactory* socket_factory_;
211 P2PPortAllocator::Config config_; 207 P2PPortAllocator::Config config_;
212 GURL origin_; 208 GURL origin_;
213 209
214 // This is the worker thread where |media_permission_| and |network_manager_| 210 // This is the worker thread where |network_manager_| live on.
215 // live on.
216 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 211 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
217 }; 212 };
218 213
219 PeerConnectionDependencyFactory::PeerConnectionDependencyFactory( 214 PeerConnectionDependencyFactory::PeerConnectionDependencyFactory(
220 P2PSocketDispatcher* p2p_socket_dispatcher) 215 P2PSocketDispatcher* p2p_socket_dispatcher)
221 : network_manager_(NULL), 216 : network_manager_(NULL),
222 p2p_socket_dispatcher_(p2p_socket_dispatcher), 217 p2p_socket_dispatcher_(p2p_socket_dispatcher),
223 signaling_thread_(NULL), 218 signaling_thread_(NULL),
224 worker_thread_(NULL), 219 worker_thread_(NULL),
225 chrome_signaling_thread_("Chrome_libJingle_Signaling"), 220 chrome_signaling_thread_("Chrome_libJingle_Signaling"),
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 459
465 // Copy the flag from Preference associated with this WebFrame. 460 // Copy the flag from Preference associated with this WebFrame.
466 P2PPortAllocator::Config port_config; 461 P2PPortAllocator::Config port_config;
467 462
468 // |media_permission| will be called to check mic/camera permission. If at 463 // |media_permission| will be called to check mic/camera permission. If at
469 // least one of them is granted, P2PPortAllocator is allowed to gather local 464 // least one of them is granted, P2PPortAllocator is allowed to gather local
470 // host IP addresses as ICE candidates. |media_permission| could be nullptr, 465 // host IP addresses as ICE candidates. |media_permission| could be nullptr,
471 // which means the permission will be granted automatically. This could be the 466 // which means the permission will be granted automatically. This could be the
472 // case when either the experiment is not enabled or the preference is not 467 // case when either the experiment is not enabled or the preference is not
473 // enforced. 468 // enforced.
474 scoped_ptr<media::MediaPermission> media_permission; 469 media::MediaPermission* media_permission = nullptr;
475 if (!GetContentClient() 470 if (!GetContentClient()
476 ->renderer() 471 ->renderer()
477 ->ShouldEnforceWebRTCRoutingPreferences()) { 472 ->ShouldEnforceWebRTCRoutingPreferences()) {
478 port_config.enable_multiple_routes = true; 473 port_config.enable_multiple_routes = true;
479 port_config.enable_nonproxied_udp = true; 474 port_config.enable_nonproxied_udp = true;
480 VLOG(3) << "WebRTC routing preferences will not be enforced"; 475 VLOG(3) << "WebRTC routing preferences will not be enforced";
481 } else { 476 } else {
482 if (web_frame && web_frame->view()) { 477 if (web_frame && web_frame->view()) {
483 RenderViewImpl* renderer_view_impl = 478 RenderViewImpl* renderer_view_impl =
484 RenderViewImpl::FromWebView(web_frame->view()); 479 RenderViewImpl::FromWebView(web_frame->view());
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 base::CommandLine::ForCurrentProcess()->HasSwitch( 516 base::CommandLine::ForCurrentProcess()->HasSwitch(
522 switches::kEnforceWebRtcIPPermissionCheck); 517 switches::kEnforceWebRtcIPPermissionCheck);
523 create_media_permission = 518 create_media_permission =
524 create_media_permission || 519 create_media_permission ||
525 StartsWith(base::FieldTrialList::FindFullName( 520 StartsWith(base::FieldTrialList::FindFullName(
526 "WebRTC-LocalIPPermissionCheck"), 521 "WebRTC-LocalIPPermissionCheck"),
527 "Enabled", base::CompareCase::SENSITIVE); 522 "Enabled", base::CompareCase::SENSITIVE);
528 if (create_media_permission) { 523 if (create_media_permission) {
529 content::RenderFrameImpl* render_frame = 524 content::RenderFrameImpl* render_frame =
530 content::RenderFrameImpl::FromWebFrame(web_frame); 525 content::RenderFrameImpl::FromWebFrame(web_frame);
531 if (render_frame) { 526 if (render_frame)
532 media_permission = render_frame->CreateMediaPermissionProxy( 527 media_permission = render_frame->GetMediaPermission();
533 chrome_worker_thread_.task_runner());
534 }
535 DCHECK(media_permission); 528 DCHECK(media_permission);
536 } 529 }
537 } 530 }
538 } 531 }
539 532
540 const GURL& requesting_origin = 533 const GURL& requesting_origin =
541 GURL(web_frame->document().url().spec()).GetOrigin(); 534 GURL(web_frame->document().url().spec()).GetOrigin();
542 535
543 scoped_refptr<P2PPortAllocatorFactory> pa_factory = 536 scoped_refptr<P2PPortAllocatorFactory> pa_factory =
544 new P2PPortAllocatorFactory( 537 new P2PPortAllocatorFactory(media_permission, p2p_socket_dispatcher_,
545 media_permission.Pass(), p2p_socket_dispatcher_, network_manager_, 538 network_manager_, socket_factory_.get(),
546 socket_factory_.get(), port_config, requesting_origin, 539 port_config, requesting_origin,
547 chrome_worker_thread_.task_runner()); 540 chrome_worker_thread_.task_runner());
548 541
549 return GetPcFactory() 542 return GetPcFactory()
550 ->CreatePeerConnection(config, constraints, pa_factory.get(), 543 ->CreatePeerConnection(config, constraints, pa_factory.get(),
551 std::move(identity_store), observer) 544 std::move(identity_store), observer)
552 .get(); 545 .get();
553 } 546 }
554 547
555 scoped_refptr<webrtc::MediaStreamInterface> 548 scoped_refptr<webrtc::MediaStreamInterface>
556 PeerConnectionDependencyFactory::CreateLocalMediaStream( 549 PeerConnectionDependencyFactory::CreateLocalMediaStream(
557 const std::string& label) { 550 const std::string& label) {
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
813 } 806 }
814 807
815 void PeerConnectionDependencyFactory::EnsureWebRtcAudioDeviceImpl() { 808 void PeerConnectionDependencyFactory::EnsureWebRtcAudioDeviceImpl() {
816 if (audio_device_.get()) 809 if (audio_device_.get())
817 return; 810 return;
818 811
819 audio_device_ = new WebRtcAudioDeviceImpl(); 812 audio_device_ = new WebRtcAudioDeviceImpl();
820 } 813 }
821 814
822 } // namespace content 815 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698