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

Side by Side Diff: content/renderer/media/media_stream_dispatcher.cc

Issue 1918173002: Add support for device-change notifications to MediaStreamDispatcher and MediaStreamDispatcherHost (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove unnecessary comment Created 4 years, 7 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/media_stream_dispatcher.h" 5 #include "content/renderer/media/media_stream_dispatcher.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "content/common/media/media_stream_messages.h" 10 #include "content/common/media/media_stream_messages.h"
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 base::WeakPtr<MediaStreamDispatcherEventHandler> handler; 61 base::WeakPtr<MediaStreamDispatcherEventHandler> handler;
62 StreamDeviceInfoArray audio_array; 62 StreamDeviceInfoArray audio_array;
63 StreamDeviceInfoArray video_array; 63 StreamDeviceInfoArray video_array;
64 }; 64 };
65 65
66 MediaStreamDispatcher::MediaStreamDispatcher(RenderFrame* render_frame) 66 MediaStreamDispatcher::MediaStreamDispatcher(RenderFrame* render_frame)
67 : RenderFrameObserver(render_frame), 67 : RenderFrameObserver(render_frame),
68 next_ipc_id_(0) { 68 next_ipc_id_(0) {
69 } 69 }
70 70
71 MediaStreamDispatcher::~MediaStreamDispatcher() {} 71 MediaStreamDispatcher::~MediaStreamDispatcher() {
72 DCHECK(device_change_subscribers_.empty());
73 }
72 74
73 void MediaStreamDispatcher::GenerateStream( 75 void MediaStreamDispatcher::GenerateStream(
74 int request_id, 76 int request_id,
75 const base::WeakPtr<MediaStreamDispatcherEventHandler>& event_handler, 77 const base::WeakPtr<MediaStreamDispatcherEventHandler>& event_handler,
76 const StreamControls& controls, 78 const StreamControls& controls,
77 const GURL& security_origin) { 79 const GURL& security_origin) {
78 DCHECK(thread_checker_.CalledOnValidThread()); 80 DCHECK(thread_checker_.CalledOnValidThread());
79 DVLOG(1) << "MediaStreamDispatcher::GenerateStream(" << request_id << ")"; 81 DVLOG(1) << "MediaStreamDispatcher::GenerateStream(" << request_id << ")";
80 82
81 requests_.push_back(Request(event_handler, request_id, next_ipc_id_)); 83 requests_.push_back(Request(event_handler, request_id, next_ipc_id_));
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 << ", {label = " << label << "}"; 204 << ", {label = " << label << "}";
203 205
204 LabelStreamMap::iterator it = label_stream_map_.find(label); 206 LabelStreamMap::iterator it = label_stream_map_.find(label);
205 if (it == label_stream_map_.end()) 207 if (it == label_stream_map_.end())
206 return; 208 return;
207 label_stream_map_.erase(it); 209 label_stream_map_.erase(it);
208 210
209 Send(new MediaStreamHostMsg_CloseDevice(routing_id(), label)); 211 Send(new MediaStreamHostMsg_CloseDevice(routing_id(), label));
210 } 212 }
211 213
214 void MediaStreamDispatcher::SubscribeToDeviceChangeNotifications(
215 const base::WeakPtr<MediaStreamDispatcherEventHandler>& event_handler,
216 const GURL& security_origin) {
217 DCHECK(thread_checker_.CalledOnValidThread());
218 DCHECK(std::find_if(
219 device_change_subscribers_.begin(),
220 device_change_subscribers_.end(),
221 [&event_handler](
222 const base::WeakPtr<MediaStreamDispatcherEventHandler>& item) {
223 return event_handler.get() == item.get();
224 }) == device_change_subscribers_.end());
225 DVLOG(1) << "MediaStreamDispatcher::SubscribeToDeviceChangeNotifications";
226
227 if (device_change_subscribers_.empty()) {
228 Send(new MediaStreamHostMsg_SubscribeToDeviceChangeNotifications(
229 routing_id(), security_origin));
230 }
231 device_change_subscribers_.push_back(event_handler);
232 }
233
234 void MediaStreamDispatcher::CancelDeviceChangeNotifications(
235 const base::WeakPtr<MediaStreamDispatcherEventHandler>& event_handler) {
236 DCHECK(thread_checker_.CalledOnValidThread());
237 DVLOG(1) << "MediaStreamDispatcher::SubscribeToDeviceChangeNotifications";
238 auto it = std::find_if(
239 device_change_subscribers_.begin(), device_change_subscribers_.end(),
240 [&event_handler](
241 const base::WeakPtr<MediaStreamDispatcherEventHandler>& item) {
242 return event_handler.get() == item.get();
243 });
244 DCHECK(it != device_change_subscribers_.end());
245 device_change_subscribers_.erase(it);
246
247 if (device_change_subscribers_.empty())
248 Send(new MediaStreamHostMsg_CancelDeviceChangeNotifications(routing_id()));
249 }
250
212 void MediaStreamDispatcher::OnDestruct() { 251 void MediaStreamDispatcher::OnDestruct() {
213 // Do not self-destruct. UserMediaClientImpl owns |this|. 252 // Do not self-destruct. UserMediaClientImpl owns |this|.
214 } 253 }
215 254
216 bool MediaStreamDispatcher::Send(IPC::Message* message) { 255 bool MediaStreamDispatcher::Send(IPC::Message* message) {
217 if (!RenderThread::Get()) { 256 if (!RenderThread::Get()) {
218 delete message; 257 delete message;
219 return false; 258 return false;
220 } 259 }
221 260
222 return RenderThread::Get()->Send(message); 261 return RenderThread::Get()->Send(message);
223 } 262 }
224 263
225 bool MediaStreamDispatcher::OnMessageReceived(const IPC::Message& message) { 264 bool MediaStreamDispatcher::OnMessageReceived(const IPC::Message& message) {
226 bool handled = true; 265 bool handled = true;
227 IPC_BEGIN_MESSAGE_MAP(MediaStreamDispatcher, message) 266 IPC_BEGIN_MESSAGE_MAP(MediaStreamDispatcher, message)
228 IPC_MESSAGE_HANDLER(MediaStreamMsg_StreamGenerated, 267 IPC_MESSAGE_HANDLER(MediaStreamMsg_StreamGenerated,
229 OnStreamGenerated) 268 OnStreamGenerated)
230 IPC_MESSAGE_HANDLER(MediaStreamMsg_StreamGenerationFailed, 269 IPC_MESSAGE_HANDLER(MediaStreamMsg_StreamGenerationFailed,
231 OnStreamGenerationFailed) 270 OnStreamGenerationFailed)
232 IPC_MESSAGE_HANDLER(MediaStreamMsg_DeviceStopped, 271 IPC_MESSAGE_HANDLER(MediaStreamMsg_DeviceStopped,
233 OnDeviceStopped) 272 OnDeviceStopped)
234 IPC_MESSAGE_HANDLER(MediaStreamMsg_DevicesEnumerated, 273 IPC_MESSAGE_HANDLER(MediaStreamMsg_DevicesEnumerated,
235 OnDevicesEnumerated) 274 OnDevicesEnumerated)
236 IPC_MESSAGE_HANDLER(MediaStreamMsg_DeviceOpened, 275 IPC_MESSAGE_HANDLER(MediaStreamMsg_DeviceOpened,
237 OnDeviceOpened) 276 OnDeviceOpened)
238 IPC_MESSAGE_HANDLER(MediaStreamMsg_DeviceOpenFailed, 277 IPC_MESSAGE_HANDLER(MediaStreamMsg_DeviceOpenFailed,
239 OnDeviceOpenFailed) 278 OnDeviceOpenFailed)
279 IPC_MESSAGE_HANDLER(MediaStreamMsg_DevicesChanged, OnDevicesChanged)
240 IPC_MESSAGE_UNHANDLED(handled = false) 280 IPC_MESSAGE_UNHANDLED(handled = false)
241 IPC_END_MESSAGE_MAP() 281 IPC_END_MESSAGE_MAP()
242 return handled; 282 return handled;
243 } 283 }
244 284
245 void MediaStreamDispatcher::OnStreamGenerated( 285 void MediaStreamDispatcher::OnStreamGenerated(
246 int request_id, 286 int request_id,
247 const std::string& label, 287 const std::string& label,
248 const StreamDeviceInfoArray& audio_array, 288 const StreamDeviceInfoArray& audio_array,
249 const StreamDeviceInfoArray& video_array) { 289 const StreamDeviceInfoArray& video_array) {
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 request.handler->OnDeviceOpenFailed(request.request_id); 411 request.handler->OnDeviceOpenFailed(request.request_id);
372 DVLOG(1) << "MediaStreamDispatcher::OnDeviceOpenFailed(" 412 DVLOG(1) << "MediaStreamDispatcher::OnDeviceOpenFailed("
373 << request.request_id << ")\n"; 413 << request.request_id << ")\n";
374 } 414 }
375 requests_.erase(it); 415 requests_.erase(it);
376 break; 416 break;
377 } 417 }
378 } 418 }
379 } 419 }
380 420
421 void MediaStreamDispatcher::OnDevicesChanged() {
tommi (sloooow) - chröme 2016/04/26 10:11:36 DCHECK(thread_checker_.CalledOnValidThread()); ?
Guido Urdaneta 2016/04/26 11:07:54 Done.
422 for (auto event_handler : device_change_subscribers_) {
423 DCHECK(event_handler);
424 event_handler->OnDevicesChanged();
425 }
426 }
427
381 int MediaStreamDispatcher::audio_session_id(const std::string& label, 428 int MediaStreamDispatcher::audio_session_id(const std::string& label,
382 int index) { 429 int index) {
383 DCHECK(thread_checker_.CalledOnValidThread()); 430 DCHECK(thread_checker_.CalledOnValidThread());
384 LabelStreamMap::iterator it = label_stream_map_.find(label); 431 LabelStreamMap::iterator it = label_stream_map_.find(label);
385 if (it == label_stream_map_.end() || 432 if (it == label_stream_map_.end() ||
386 it->second.audio_array.size() <= static_cast<size_t>(index)) { 433 it->second.audio_array.size() <= static_cast<size_t>(index)) {
387 return StreamDeviceInfo::kNoId; 434 return StreamDeviceInfo::kNoId;
388 } 435 }
389 return it->second.audio_array[index].session_id; 436 return it->second.audio_array[index].session_id;
390 } 437 }
391 438
392 bool MediaStreamDispatcher::IsStream(const std::string& label) { 439 bool MediaStreamDispatcher::IsStream(const std::string& label) {
393 DCHECK(thread_checker_.CalledOnValidThread()); 440 DCHECK(thread_checker_.CalledOnValidThread());
394 return label_stream_map_.find(label) != label_stream_map_.end(); 441 return label_stream_map_.find(label) != label_stream_map_.end();
395 } 442 }
396 443
397 int MediaStreamDispatcher::video_session_id(const std::string& label, 444 int MediaStreamDispatcher::video_session_id(const std::string& label,
398 int index) { 445 int index) {
399 DCHECK(thread_checker_.CalledOnValidThread()); 446 DCHECK(thread_checker_.CalledOnValidThread());
400 LabelStreamMap::iterator it = label_stream_map_.find(label); 447 LabelStreamMap::iterator it = label_stream_map_.find(label);
401 if (it == label_stream_map_.end() || 448 if (it == label_stream_map_.end() ||
402 it->second.video_array.size() <= static_cast<size_t>(index)) { 449 it->second.video_array.size() <= static_cast<size_t>(index)) {
403 return StreamDeviceInfo::kNoId; 450 return StreamDeviceInfo::kNoId;
404 } 451 }
405 return it->second.video_array[index].session_id; 452 return it->second.video_array[index].session_id;
406 } 453 }
407 454
408 } // namespace content 455 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698