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

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

Issue 2550493003: Add new device ID unit tests to UserMediaClientImpl. (Closed)
Patch Set: hta@'s comments Created 4 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 (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/user_media_client_impl.h" 5 #include "content/renderer/media/user_media_client_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <utility> 10 #include <utility>
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 WillCommitProvisionalLoad(); 233 WillCommitProvisionalLoad();
234 } 234 }
235 235
236 void UserMediaClientImpl::requestUserMedia( 236 void UserMediaClientImpl::requestUserMedia(
237 const blink::WebUserMediaRequest& user_media_request) { 237 const blink::WebUserMediaRequest& user_media_request) {
238 // Save histogram data so we can see how much GetUserMedia is used. 238 // Save histogram data so we can see how much GetUserMedia is used.
239 // The histogram counts the number of calls to the JS API 239 // The histogram counts the number of calls to the JS API
240 // webGetUserMedia. 240 // webGetUserMedia.
241 UpdateWebRTCMethodCount(WEBKIT_GET_USER_MEDIA); 241 UpdateWebRTCMethodCount(WEBKIT_GET_USER_MEDIA);
242 DCHECK(CalledOnValidThread()); 242 DCHECK(CalledOnValidThread());
243 DCHECK(!user_media_request.isNull());
244 // ownerDocument may be null if we are in a test.
245 // In that case, it's OK to not check frame().
246 DCHECK(user_media_request.ownerDocument().isNull() ||
247 render_frame()->GetWebFrame() ==
248 static_cast<blink::WebFrame*>(
249 user_media_request.ownerDocument().frame()));
hbos_chromium 2016/12/05 16:30:31 I take it that this is still needed even though th
Guido Urdaneta 2016/12/05 17:23:52 For some definition of needed :) It doesn't seem t
243 250
244 if (RenderThreadImpl::current()) { 251 if (RenderThreadImpl::current()) {
245 RenderThreadImpl::current()->peer_connection_tracker()->TrackGetUserMedia( 252 RenderThreadImpl::current()->peer_connection_tracker()->TrackGetUserMedia(
246 user_media_request); 253 user_media_request);
247 } 254 }
248 255
249 int request_id = g_next_request_id++; 256 int request_id = g_next_request_id++;
250 std::unique_ptr<StreamControls> controls = base::MakeUnique<StreamControls>(); 257 std::unique_ptr<StreamControls> controls = base::MakeUnique<StreamControls>();
251 258
252 // |user_media_request| can't be mocked. So in order to test at all we check 259 bool enable_automatic_output_device_selection = false;
253 // if it isNull. 260 bool request_audio_input_devices = false;
254 // TODO(guidou): Remove this test-specific code path. 261 if (user_media_request.audio()) {
255 if (user_media_request.isNull()) { 262 CopyConstraintsToTrackControls(user_media_request.audioConstraints(),
256 // We are in a test. 263 &controls->audio,
257 controls->audio.requested = true; 264 &request_audio_input_devices);
258 controls->video.requested = true; 265 CopyHotwordAndLocalEchoToStreamControls(
266 user_media_request.audioConstraints(), controls.get());
267 // Check if this input device should be used to select a matching output
268 // device for audio rendering.
269 GetConstraintValueAsBoolean(
270 user_media_request.audioConstraints(),
271 &blink::WebMediaTrackConstraintSet::renderToAssociatedSink,
272 &enable_automatic_output_device_selection);
273 }
274 bool request_video_input_devices = false;
275 if (user_media_request.video()) {
276 CopyConstraintsToTrackControls(user_media_request.videoConstraints(),
277 &controls->video,
278 &request_video_input_devices);
279 }
280
281 url::Origin security_origin = user_media_request.getSecurityOrigin();
282 if (request_audio_input_devices || request_video_input_devices) {
283 GetMediaDevicesDispatcher()->EnumerateDevices(
284 request_audio_input_devices, request_video_input_devices,
285 false /* request_audio_output_devices */, security_origin,
286 base::Bind(&UserMediaClientImpl::SelectUserMediaDevice,
287 weak_factory_.GetWeakPtr(), request_id, user_media_request,
288 base::Passed(&controls),
289 enable_automatic_output_device_selection, security_origin));
290 } else {
259 FinalizeRequestUserMedia( 291 FinalizeRequestUserMedia(
260 request_id, user_media_request, std::move(controls), 292 request_id, user_media_request, std::move(controls),
261 false /* automatic_output_device_selection */, url::Origin()); 293 enable_automatic_output_device_selection, security_origin);
262 } else {
263 // ownerDocument may be null if we are in a test.
264 // In that case, it's OK to not check frame().
265 DCHECK(user_media_request.ownerDocument().isNull() ||
266 render_frame()->GetWebFrame() ==
267 static_cast<blink::WebFrame*>(
268 user_media_request.ownerDocument().frame()));
269
270 bool enable_automatic_output_device_selection = false;
271 bool request_audio_input_devices = false;
272 if (user_media_request.audio()) {
273 CopyConstraintsToTrackControls(user_media_request.audioConstraints(),
274 &controls->audio,
275 &request_audio_input_devices);
276 CopyHotwordAndLocalEchoToStreamControls(
277 user_media_request.audioConstraints(), controls.get());
278 // Check if this input device should be used to select a matching output
279 // device for audio rendering.
280 GetConstraintValueAsBoolean(
281 user_media_request.audioConstraints(),
282 &blink::WebMediaTrackConstraintSet::renderToAssociatedSink,
283 &enable_automatic_output_device_selection);
284 }
285 bool request_video_input_devices = false;
286 if (user_media_request.video()) {
287 CopyConstraintsToTrackControls(user_media_request.videoConstraints(),
288 &controls->video,
289 &request_video_input_devices);
290 }
291
292 url::Origin security_origin = user_media_request.getSecurityOrigin();
293 if (request_audio_input_devices || request_video_input_devices) {
294 GetMediaDevicesDispatcher()->EnumerateDevices(
295 request_audio_input_devices, request_video_input_devices,
296 false /* request_audio_output_devices */, security_origin,
297 base::Bind(&UserMediaClientImpl::SelectUserMediaDevice,
298 weak_factory_.GetWeakPtr(), request_id, user_media_request,
299 base::Passed(&controls),
300 enable_automatic_output_device_selection,
301 security_origin));
302 } else {
303 FinalizeRequestUserMedia(
304 request_id, user_media_request, std::move(controls),
305 enable_automatic_output_device_selection, security_origin);
306 }
307 } 294 }
308 } 295 }
309 296
310 void UserMediaClientImpl::SelectUserMediaDevice( 297 void UserMediaClientImpl::SelectUserMediaDevice(
311 int request_id, 298 int request_id,
312 const blink::WebUserMediaRequest& user_media_request, 299 const blink::WebUserMediaRequest& user_media_request,
313 std::unique_ptr<StreamControls> controls, 300 std::unique_ptr<StreamControls> controls,
314 bool enable_automatic_output_device_selection, 301 bool enable_automatic_output_device_selection,
315 const url::Origin& security_origin, 302 const url::Origin& security_origin,
316 const EnumerationResult& device_enumeration) { 303 const EnumerationResult& device_enumeration) {
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 UserMediaRequestInfo* request_info = FindUserMediaRequestInfo(request_id); 425 UserMediaRequestInfo* request_info = FindUserMediaRequestInfo(request_id);
439 if (!request_info) { 426 if (!request_info) {
440 // This can happen if the request is canceled or the frame reloads while 427 // This can happen if the request is canceled or the frame reloads while
441 // MediaStreamDispatcher is processing the request. 428 // MediaStreamDispatcher is processing the request.
442 DVLOG(1) << "Request ID not found"; 429 DVLOG(1) << "Request ID not found";
443 OnStreamGeneratedForCancelledRequest(audio_array, video_array); 430 OnStreamGeneratedForCancelledRequest(audio_array, video_array);
444 return; 431 return;
445 } 432 }
446 request_info->generated = true; 433 request_info->generated = true;
447 434
448 // WebUserMediaRequest don't have an implementation in unit tests. 435 DCHECK(!request_info->request.isNull());
449 // Therefore we need to check for isNull here and initialize the
450 // constraints.
451 blink::WebUserMediaRequest* request = &(request_info->request);
452 blink::WebMediaConstraints audio_constraints;
453 blink::WebMediaConstraints video_constraints;
454 if (request->isNull()) {
455 audio_constraints.initialize();
456 video_constraints.initialize();
457 } else {
458 audio_constraints = request->audioConstraints();
459 video_constraints = request->videoConstraints();
460 }
461
462 blink::WebVector<blink::WebMediaStreamTrack> audio_track_vector( 436 blink::WebVector<blink::WebMediaStreamTrack> audio_track_vector(
463 audio_array.size()); 437 audio_array.size());
464 CreateAudioTracks(audio_array, audio_constraints, &audio_track_vector, 438 CreateAudioTracks(audio_array, request_info->request.audioConstraints(),
465 request_info); 439 &audio_track_vector, request_info);
466 440
467 blink::WebVector<blink::WebMediaStreamTrack> video_track_vector( 441 blink::WebVector<blink::WebMediaStreamTrack> video_track_vector(
468 video_array.size()); 442 video_array.size());
469 CreateVideoTracks(video_array, video_constraints, &video_track_vector, 443 CreateVideoTracks(video_array, request_info->request.videoConstraints(),
470 request_info); 444 &video_track_vector, request_info);
471 445
472 blink::WebString webkit_id = base::UTF8ToUTF16(label); 446 blink::WebString webkit_id = base::UTF8ToUTF16(label);
473 blink::WebMediaStream* web_stream = &(request_info->web_stream); 447 blink::WebMediaStream* web_stream = &(request_info->web_stream);
474 448
475 web_stream->initialize(webkit_id, audio_track_vector, 449 web_stream->initialize(webkit_id, audio_track_vector,
476 video_track_vector); 450 video_track_vector);
477 web_stream->setExtraData(new MediaStream()); 451 web_stream->setExtraData(new MediaStream());
478 452
479 // Wait for the tracks to be started successfully or to fail. 453 // Wait for the tracks to be started successfully or to fail.
480 request_info->CallbackOnTracksStarted( 454 request_info->CallbackOnTracksStarted(
(...skipping 612 matching lines...) Expand 10 before | Expand all | Expand 10 after
1093 1067
1094 bool UserMediaClientImpl::UserMediaRequestInfo::HasPendingSources() const { 1068 bool UserMediaClientImpl::UserMediaRequestInfo::HasPendingSources() const {
1095 return !sources_waiting_for_callback_.empty(); 1069 return !sources_waiting_for_callback_.empty();
1096 } 1070 }
1097 1071
1098 void UserMediaClientImpl::OnDestruct() { 1072 void UserMediaClientImpl::OnDestruct() {
1099 delete this; 1073 delete this;
1100 } 1074 }
1101 1075
1102 } // namespace content 1076 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698