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

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

Issue 524363003: Changed name of MediaStreamImpl to UserMediaClientImpl. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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.
Henrik Grunell 2014/09/02 06:47:53 Same here.
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_impl.h" 5 #include "content/renderer/media/user_media_client_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/hash.h" 9 #include "base/hash.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/strings/string_number_conversions.h" 11 #include "base/strings/string_number_conversions.h"
12 #include "base/strings/string_util.h" 12 #include "base/strings/string_util.h"
13 #include "base/strings/stringprintf.h" 13 #include "base/strings/stringprintf.h"
14 #include "base/strings/utf_string_conversions.h" 14 #include "base/strings/utf_string_conversions.h"
15 #include "content/public/renderer/render_frame.h" 15 #include "content/public/renderer/render_frame.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 optional->push_back(StreamOptions::Constraint( 50 optional->push_back(StreamOptions::Constraint(
51 optional_constraints[i].m_name.utf8(), 51 optional_constraints[i].m_name.utf8(),
52 optional_constraints[i].m_value.utf8())); 52 optional_constraints[i].m_value.utf8()));
53 } 53 }
54 } 54 }
55 55
56 static int g_next_request_id = 0; 56 static int g_next_request_id = 0;
57 57
58 } // namespace 58 } // namespace
59 59
60 struct MediaStreamImpl::MediaDevicesRequestInfo { 60 struct UserMediaClientImpl::MediaDevicesRequestInfo {
61 MediaDevicesRequestInfo(const blink::WebMediaDevicesRequest& request, 61 MediaDevicesRequestInfo(const blink::WebMediaDevicesRequest& request,
62 int audio_input_request_id, 62 int audio_input_request_id,
63 int video_input_request_id, 63 int video_input_request_id,
64 int audio_output_request_id) 64 int audio_output_request_id)
65 : request(request), 65 : request(request),
66 audio_input_request_id(audio_input_request_id), 66 audio_input_request_id(audio_input_request_id),
67 video_input_request_id(video_input_request_id), 67 video_input_request_id(video_input_request_id),
68 audio_output_request_id(audio_output_request_id), 68 audio_output_request_id(audio_output_request_id),
69 has_audio_input_returned(false), 69 has_audio_input_returned(false),
70 has_video_input_returned(false), 70 has_video_input_returned(false),
71 has_audio_output_returned(false) {} 71 has_audio_output_returned(false) {}
72 72
73 blink::WebMediaDevicesRequest request; 73 blink::WebMediaDevicesRequest request;
74 int audio_input_request_id; 74 int audio_input_request_id;
75 int video_input_request_id; 75 int video_input_request_id;
76 int audio_output_request_id; 76 int audio_output_request_id;
77 bool has_audio_input_returned; 77 bool has_audio_input_returned;
78 bool has_video_input_returned; 78 bool has_video_input_returned;
79 bool has_audio_output_returned; 79 bool has_audio_output_returned;
80 StreamDeviceInfoArray audio_input_devices; 80 StreamDeviceInfoArray audio_input_devices;
81 StreamDeviceInfoArray video_input_devices; 81 StreamDeviceInfoArray video_input_devices;
82 StreamDeviceInfoArray audio_output_devices; 82 StreamDeviceInfoArray audio_output_devices;
83 }; 83 };
84 84
85 MediaStreamImpl::MediaStreamImpl( 85 UserMediaClientImpl::UserMediaClientImpl(
86 RenderFrame* render_frame, 86 RenderFrame* render_frame,
87 PeerConnectionDependencyFactory* dependency_factory, 87 PeerConnectionDependencyFactory* dependency_factory,
88 scoped_ptr<MediaStreamDispatcher> media_stream_dispatcher) 88 scoped_ptr<MediaStreamDispatcher> media_stream_dispatcher)
89 : RenderFrameObserver(render_frame), 89 : RenderFrameObserver(render_frame),
90 dependency_factory_(dependency_factory), 90 dependency_factory_(dependency_factory),
91 media_stream_dispatcher_(media_stream_dispatcher.Pass()), 91 media_stream_dispatcher_(media_stream_dispatcher.Pass()),
92 weak_factory_(this) { 92 weak_factory_(this) {
93 DCHECK(dependency_factory_); 93 DCHECK(dependency_factory_);
94 DCHECK(media_stream_dispatcher_.get()); 94 DCHECK(media_stream_dispatcher_.get());
95 } 95 }
96 96
97 MediaStreamImpl::~MediaStreamImpl() { 97 UserMediaClientImpl::~UserMediaClientImpl() {
98 // Force-close all outstanding user media requests and local sources here, 98 // Force-close all outstanding user media requests and local sources here,
99 // before the outstanding WeakPtrs are invalidated, to ensure a clean 99 // before the outstanding WeakPtrs are invalidated, to ensure a clean
100 // shutdown. 100 // shutdown.
101 FrameWillClose(); 101 FrameWillClose();
102 } 102 }
103 103
104 void MediaStreamImpl::requestUserMedia( 104 void UserMediaClientImpl::requestUserMedia(
105 const blink::WebUserMediaRequest& user_media_request) { 105 const blink::WebUserMediaRequest& user_media_request) {
106 // Save histogram data so we can see how much GetUserMedia is used. 106 // Save histogram data so we can see how much GetUserMedia is used.
107 // The histogram counts the number of calls to the JS API 107 // The histogram counts the number of calls to the JS API
108 // webGetUserMedia. 108 // webGetUserMedia.
109 UpdateWebRTCMethodCount(WEBKIT_GET_USER_MEDIA); 109 UpdateWebRTCMethodCount(WEBKIT_GET_USER_MEDIA);
110 DCHECK(CalledOnValidThread()); 110 DCHECK(CalledOnValidThread());
111 111
112 if (RenderThreadImpl::current()) { 112 if (RenderThreadImpl::current()) {
113 RenderThreadImpl::current()->peer_connection_tracker()->TrackGetUserMedia( 113 RenderThreadImpl::current()->peer_connection_tracker()->TrackGetUserMedia(
114 user_media_request); 114 user_media_request);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 &options.mandatory_video, 147 &options.mandatory_video,
148 &options.optional_video); 148 &options.optional_video);
149 } 149 }
150 150
151 security_origin = GURL(user_media_request.securityOrigin().toString()); 151 security_origin = GURL(user_media_request.securityOrigin().toString());
152 DCHECK(render_frame()->GetWebFrame() == 152 DCHECK(render_frame()->GetWebFrame() ==
153 static_cast<blink::WebFrame*>( 153 static_cast<blink::WebFrame*>(
154 user_media_request.ownerDocument().frame())); 154 user_media_request.ownerDocument().frame()));
155 } 155 }
156 156
157 DVLOG(1) << "MediaStreamImpl::requestUserMedia(" << request_id << ", [ " 157 DVLOG(1) << "UserMediaClientImpl::requestUserMedia(" << request_id << ", [ "
158 << "audio=" << (options.audio_requested) 158 << "audio=" << (options.audio_requested)
159 << " select associated sink: " 159 << " select associated sink: "
160 << enable_automatic_output_device_selection 160 << enable_automatic_output_device_selection
161 << ", video=" << (options.video_requested) << " ], " 161 << ", video=" << (options.video_requested) << " ], "
162 << security_origin.spec() << ")"; 162 << security_origin.spec() << ")";
163 163
164 std::string audio_device_id; 164 std::string audio_device_id;
165 bool mandatory_audio; 165 bool mandatory_audio;
166 options.GetFirstAudioConstraintByName(kMediaStreamSourceInfoId, 166 options.GetFirstAudioConstraintByName(kMediaStreamSourceInfoId,
167 &audio_device_id, &mandatory_audio); 167 &audio_device_id, &mandatory_audio);
(...skipping 16 matching lines...) Expand all
184 new UserMediaRequestInfo(request_id, user_media_request, 184 new UserMediaRequestInfo(request_id, user_media_request,
185 enable_automatic_output_device_selection)); 185 enable_automatic_output_device_selection));
186 186
187 media_stream_dispatcher_->GenerateStream( 187 media_stream_dispatcher_->GenerateStream(
188 request_id, 188 request_id,
189 weak_factory_.GetWeakPtr(), 189 weak_factory_.GetWeakPtr(),
190 options, 190 options,
191 security_origin); 191 security_origin);
192 } 192 }
193 193
194 void MediaStreamImpl::cancelUserMediaRequest( 194 void UserMediaClientImpl::cancelUserMediaRequest(
195 const blink::WebUserMediaRequest& user_media_request) { 195 const blink::WebUserMediaRequest& user_media_request) {
196 DCHECK(CalledOnValidThread()); 196 DCHECK(CalledOnValidThread());
197 UserMediaRequestInfo* request = FindUserMediaRequestInfo(user_media_request); 197 UserMediaRequestInfo* request = FindUserMediaRequestInfo(user_media_request);
198 if (request) { 198 if (request) {
199 // We can't abort the stream generation process. 199 // We can't abort the stream generation process.
200 // Instead, erase the request. Once the stream is generated we will stop the 200 // Instead, erase the request. Once the stream is generated we will stop the
201 // stream if the request does not exist. 201 // stream if the request does not exist.
202 LogUserMediaRequestWithNoResult(MEDIA_STREAM_REQUEST_EXPLICITLY_CANCELLED); 202 LogUserMediaRequestWithNoResult(MEDIA_STREAM_REQUEST_EXPLICITLY_CANCELLED);
203 DeleteUserMediaRequestInfo(request); 203 DeleteUserMediaRequestInfo(request);
204 } 204 }
205 } 205 }
206 206
207 void MediaStreamImpl::requestMediaDevices( 207 void UserMediaClientImpl::requestMediaDevices(
208 const blink::WebMediaDevicesRequest& media_devices_request) { 208 const blink::WebMediaDevicesRequest& media_devices_request) {
209 UpdateWebRTCMethodCount(WEBKIT_GET_MEDIA_DEVICES); 209 UpdateWebRTCMethodCount(WEBKIT_GET_MEDIA_DEVICES);
210 DCHECK(CalledOnValidThread()); 210 DCHECK(CalledOnValidThread());
211 211
212 int audio_input_request_id = g_next_request_id++; 212 int audio_input_request_id = g_next_request_id++;
213 int video_input_request_id = g_next_request_id++; 213 int video_input_request_id = g_next_request_id++;
214 int audio_output_request_id = g_next_request_id++; 214 int audio_output_request_id = g_next_request_id++;
215 215
216 // |media_devices_request| can't be mocked, so in tests it will be empty (the 216 // |media_devices_request| can't be mocked, so in tests it will be empty (the
217 // underlying pointer is null). In order to use this function in a test we 217 // underlying pointer is null). In order to use this function in a test we
218 // need to check if it isNull. 218 // need to check if it isNull.
219 GURL security_origin; 219 GURL security_origin;
220 if (!media_devices_request.isNull()) 220 if (!media_devices_request.isNull())
221 security_origin = GURL(media_devices_request.securityOrigin().toString()); 221 security_origin = GURL(media_devices_request.securityOrigin().toString());
222 222
223 DVLOG(1) << "MediaStreamImpl::requestMediaDevices(" << audio_input_request_id 223 DVLOG(1) << "UserMediaClientImpl::requestMediaDevices("
224 << audio_input_request_id
224 << ", " << video_input_request_id << ", " << audio_output_request_id 225 << ", " << video_input_request_id << ", " << audio_output_request_id
225 << ", " << security_origin.spec() << ")"; 226 << ", " << security_origin.spec() << ")";
226 227
227 media_devices_requests_.push_back(new MediaDevicesRequestInfo( 228 media_devices_requests_.push_back(new MediaDevicesRequestInfo(
228 media_devices_request, 229 media_devices_request,
229 audio_input_request_id, 230 audio_input_request_id,
230 video_input_request_id, 231 video_input_request_id,
231 audio_output_request_id)); 232 audio_output_request_id));
232 233
233 media_stream_dispatcher_->EnumerateDevices( 234 media_stream_dispatcher_->EnumerateDevices(
234 audio_input_request_id, 235 audio_input_request_id,
235 weak_factory_.GetWeakPtr(), 236 weak_factory_.GetWeakPtr(),
236 MEDIA_DEVICE_AUDIO_CAPTURE, 237 MEDIA_DEVICE_AUDIO_CAPTURE,
237 security_origin); 238 security_origin);
238 239
239 media_stream_dispatcher_->EnumerateDevices( 240 media_stream_dispatcher_->EnumerateDevices(
240 video_input_request_id, 241 video_input_request_id,
241 weak_factory_.GetWeakPtr(), 242 weak_factory_.GetWeakPtr(),
242 MEDIA_DEVICE_VIDEO_CAPTURE, 243 MEDIA_DEVICE_VIDEO_CAPTURE,
243 security_origin); 244 security_origin);
244 245
245 media_stream_dispatcher_->EnumerateDevices( 246 media_stream_dispatcher_->EnumerateDevices(
246 audio_output_request_id, 247 audio_output_request_id,
247 weak_factory_.GetWeakPtr(), 248 weak_factory_.GetWeakPtr(),
248 MEDIA_DEVICE_AUDIO_OUTPUT, 249 MEDIA_DEVICE_AUDIO_OUTPUT,
249 security_origin); 250 security_origin);
250 } 251 }
251 252
252 void MediaStreamImpl::cancelMediaDevicesRequest( 253 void UserMediaClientImpl::cancelMediaDevicesRequest(
253 const blink::WebMediaDevicesRequest& media_devices_request) { 254 const blink::WebMediaDevicesRequest& media_devices_request) {
254 DCHECK(CalledOnValidThread()); 255 DCHECK(CalledOnValidThread());
255 MediaDevicesRequestInfo* request = 256 MediaDevicesRequestInfo* request =
256 FindMediaDevicesRequestInfo(media_devices_request); 257 FindMediaDevicesRequestInfo(media_devices_request);
257 if (!request) 258 if (!request)
258 return; 259 return;
259 CancelAndDeleteMediaDevicesRequest(request); 260 CancelAndDeleteMediaDevicesRequest(request);
260 } 261 }
261 262
262 // Callback from MediaStreamDispatcher. 263 // Callback from MediaStreamDispatcher.
263 // The requested stream have been generated by the MediaStreamDispatcher. 264 // The requested stream have been generated by the MediaStreamDispatcher.
264 void MediaStreamImpl::OnStreamGenerated( 265 void UserMediaClientImpl::OnStreamGenerated(
265 int request_id, 266 int request_id,
266 const std::string& label, 267 const std::string& label,
267 const StreamDeviceInfoArray& audio_array, 268 const StreamDeviceInfoArray& audio_array,
268 const StreamDeviceInfoArray& video_array) { 269 const StreamDeviceInfoArray& video_array) {
269 DCHECK(CalledOnValidThread()); 270 DCHECK(CalledOnValidThread());
270 DVLOG(1) << "MediaStreamImpl::OnStreamGenerated stream:" << label; 271 DVLOG(1) << "UserMediaClientImpl::OnStreamGenerated stream:" << label;
271 272
272 UserMediaRequestInfo* request_info = FindUserMediaRequestInfo(request_id); 273 UserMediaRequestInfo* request_info = FindUserMediaRequestInfo(request_id);
273 if (!request_info) { 274 if (!request_info) {
274 // This can happen if the request is canceled or the frame reloads while 275 // This can happen if the request is canceled or the frame reloads while
275 // MediaStreamDispatcher is processing the request. 276 // MediaStreamDispatcher is processing the request.
276 DVLOG(1) << "Request ID not found"; 277 DVLOG(1) << "Request ID not found";
277 OnStreamGeneratedForCancelledRequest(audio_array, video_array); 278 OnStreamGeneratedForCancelledRequest(audio_array, video_array);
278 return; 279 return;
279 } 280 }
280 request_info->generated = true; 281 request_info->generated = true;
(...skipping 26 matching lines...) Expand all
307 blink::WebMediaStream* web_stream = &(request_info->web_stream); 308 blink::WebMediaStream* web_stream = &(request_info->web_stream);
308 309
309 web_stream->initialize(webkit_id, audio_track_vector, 310 web_stream->initialize(webkit_id, audio_track_vector,
310 video_track_vector); 311 video_track_vector);
311 web_stream->setExtraData( 312 web_stream->setExtraData(
312 new MediaStream( 313 new MediaStream(
313 *web_stream)); 314 *web_stream));
314 315
315 // Wait for the tracks to be started successfully or to fail. 316 // Wait for the tracks to be started successfully or to fail.
316 request_info->CallbackOnTracksStarted( 317 request_info->CallbackOnTracksStarted(
317 base::Bind(&MediaStreamImpl::OnCreateNativeTracksCompleted, 318 base::Bind(&UserMediaClientImpl::OnCreateNativeTracksCompleted,
318 weak_factory_.GetWeakPtr())); 319 weak_factory_.GetWeakPtr()));
319 } 320 }
320 321
321 void MediaStreamImpl::OnStreamGeneratedForCancelledRequest( 322 void UserMediaClientImpl::OnStreamGeneratedForCancelledRequest(
322 const StreamDeviceInfoArray& audio_array, 323 const StreamDeviceInfoArray& audio_array,
323 const StreamDeviceInfoArray& video_array) { 324 const StreamDeviceInfoArray& video_array) {
324 // Only stop the device if the device is not used in another MediaStream. 325 // Only stop the device if the device is not used in another MediaStream.
325 for (StreamDeviceInfoArray::const_iterator device_it = audio_array.begin(); 326 for (StreamDeviceInfoArray::const_iterator device_it = audio_array.begin();
326 device_it != audio_array.end(); ++device_it) { 327 device_it != audio_array.end(); ++device_it) {
327 if (!FindLocalSource(*device_it)) 328 if (!FindLocalSource(*device_it))
328 media_stream_dispatcher_->StopStreamDevice(*device_it); 329 media_stream_dispatcher_->StopStreamDevice(*device_it);
329 } 330 }
330 331
331 for (StreamDeviceInfoArray::const_iterator device_it = video_array.begin(); 332 for (StreamDeviceInfoArray::const_iterator device_it = video_array.begin();
332 device_it != video_array.end(); ++device_it) { 333 device_it != video_array.end(); ++device_it) {
333 if (!FindLocalSource(*device_it)) 334 if (!FindLocalSource(*device_it))
334 media_stream_dispatcher_->StopStreamDevice(*device_it); 335 media_stream_dispatcher_->StopStreamDevice(*device_it);
335 } 336 }
336 } 337 }
337 338
338 // Callback from MediaStreamDispatcher. 339 // Callback from MediaStreamDispatcher.
339 // The requested stream failed to be generated. 340 // The requested stream failed to be generated.
340 void MediaStreamImpl::OnStreamGenerationFailed( 341 void UserMediaClientImpl::OnStreamGenerationFailed(
341 int request_id, 342 int request_id,
342 MediaStreamRequestResult result) { 343 MediaStreamRequestResult result) {
343 DCHECK(CalledOnValidThread()); 344 DCHECK(CalledOnValidThread());
344 DVLOG(1) << "MediaStreamImpl::OnStreamGenerationFailed(" 345 DVLOG(1) << "UserMediaClientImpl::OnStreamGenerationFailed("
345 << request_id << ")"; 346 << request_id << ")";
346 UserMediaRequestInfo* request_info = FindUserMediaRequestInfo(request_id); 347 UserMediaRequestInfo* request_info = FindUserMediaRequestInfo(request_id);
347 if (!request_info) { 348 if (!request_info) {
348 // This can happen if the request is canceled or the frame reloads while 349 // This can happen if the request is canceled or the frame reloads while
349 // MediaStreamDispatcher is processing the request. 350 // MediaStreamDispatcher is processing the request.
350 DVLOG(1) << "Request ID not found"; 351 DVLOG(1) << "Request ID not found";
351 return; 352 return;
352 } 353 }
353 354
354 GetUserMediaRequestFailed(&request_info->request, result); 355 GetUserMediaRequestFailed(&request_info->request, result);
355 DeleteUserMediaRequestInfo(request_info); 356 DeleteUserMediaRequestInfo(request_info);
356 } 357 }
357 358
358 // Callback from MediaStreamDispatcher. 359 // Callback from MediaStreamDispatcher.
359 // The browser process has stopped a device used by a MediaStream. 360 // The browser process has stopped a device used by a MediaStream.
360 void MediaStreamImpl::OnDeviceStopped( 361 void UserMediaClientImpl::OnDeviceStopped(
361 const std::string& label, 362 const std::string& label,
362 const StreamDeviceInfo& device_info) { 363 const StreamDeviceInfo& device_info) {
363 DCHECK(CalledOnValidThread()); 364 DCHECK(CalledOnValidThread());
364 DVLOG(1) << "MediaStreamImpl::OnDeviceStopped(" 365 DVLOG(1) << "UserMediaClientImpl::OnDeviceStopped("
365 << "{device_id = " << device_info.device.id << "})"; 366 << "{device_id = " << device_info.device.id << "})";
366 367
367 const blink::WebMediaStreamSource* source_ptr = FindLocalSource(device_info); 368 const blink::WebMediaStreamSource* source_ptr = FindLocalSource(device_info);
368 if (!source_ptr) { 369 if (!source_ptr) {
369 // This happens if the same device is used in several guM requests or 370 // This happens if the same device is used in several guM requests or
370 // if a user happen stop a track from JS at the same time 371 // if a user happen stop a track from JS at the same time
371 // as the underlying media device is unplugged from the system. 372 // as the underlying media device is unplugged from the system.
372 return; 373 return;
373 } 374 }
374 // By creating |source| it is guaranteed that the blink::WebMediaStreamSource 375 // By creating |source| it is guaranteed that the blink::WebMediaStreamSource
375 // object is valid during the cleanup. 376 // object is valid during the cleanup.
376 blink::WebMediaStreamSource source(*source_ptr); 377 blink::WebMediaStreamSource source(*source_ptr);
377 StopLocalSource(source, false); 378 StopLocalSource(source, false);
378 379
379 for (LocalStreamSources::iterator device_it = local_sources_.begin(); 380 for (LocalStreamSources::iterator device_it = local_sources_.begin();
380 device_it != local_sources_.end(); ++device_it) { 381 device_it != local_sources_.end(); ++device_it) {
381 if (device_it->id() == source.id()) { 382 if (device_it->id() == source.id()) {
382 local_sources_.erase(device_it); 383 local_sources_.erase(device_it);
383 break; 384 break;
384 } 385 }
385 } 386 }
386 } 387 }
387 388
388 void MediaStreamImpl::InitializeSourceObject( 389 void UserMediaClientImpl::InitializeSourceObject(
389 const StreamDeviceInfo& device, 390 const StreamDeviceInfo& device,
390 blink::WebMediaStreamSource::Type type, 391 blink::WebMediaStreamSource::Type type,
391 const blink::WebMediaConstraints& constraints, 392 const blink::WebMediaConstraints& constraints,
392 blink::WebMediaStreamSource* webkit_source) { 393 blink::WebMediaStreamSource* webkit_source) {
393 const blink::WebMediaStreamSource* existing_source = 394 const blink::WebMediaStreamSource* existing_source =
394 FindLocalSource(device); 395 FindLocalSource(device);
395 if (existing_source) { 396 if (existing_source) {
396 *webkit_source = *existing_source; 397 *webkit_source = *existing_source;
397 DVLOG(1) << "Source already exist. Reusing source with id " 398 DVLOG(1) << "Source already exist. Reusing source with id "
398 << webkit_source->id().utf8(); 399 << webkit_source->id().utf8();
399 return; 400 return;
400 } 401 }
401 402
402 webkit_source->initialize( 403 webkit_source->initialize(
403 base::UTF8ToUTF16(device.device.id), 404 base::UTF8ToUTF16(device.device.id),
404 type, 405 type,
405 base::UTF8ToUTF16(device.device.name)); 406 base::UTF8ToUTF16(device.device.name));
406 407
407 DVLOG(1) << "Initialize source object :" 408 DVLOG(1) << "Initialize source object :"
408 << "id = " << webkit_source->id().utf8() 409 << "id = " << webkit_source->id().utf8()
409 << ", name = " << webkit_source->name().utf8(); 410 << ", name = " << webkit_source->name().utf8();
410 411
411 if (type == blink::WebMediaStreamSource::TypeVideo) { 412 if (type == blink::WebMediaStreamSource::TypeVideo) {
412 webkit_source->setExtraData( 413 webkit_source->setExtraData(
413 CreateVideoSource( 414 CreateVideoSource(
414 device, 415 device,
415 base::Bind(&MediaStreamImpl::OnLocalSourceStopped, 416 base::Bind(&UserMediaClientImpl::OnLocalSourceStopped,
416 weak_factory_.GetWeakPtr()))); 417 weak_factory_.GetWeakPtr())));
417 } else { 418 } else {
418 DCHECK_EQ(blink::WebMediaStreamSource::TypeAudio, type); 419 DCHECK_EQ(blink::WebMediaStreamSource::TypeAudio, type);
419 MediaStreamAudioSource* audio_source( 420 MediaStreamAudioSource* audio_source(
420 new MediaStreamAudioSource( 421 new MediaStreamAudioSource(
421 RenderFrameObserver::routing_id(), 422 RenderFrameObserver::routing_id(),
422 device, 423 device,
423 base::Bind(&MediaStreamImpl::OnLocalSourceStopped, 424 base::Bind(&UserMediaClientImpl::OnLocalSourceStopped,
424 weak_factory_.GetWeakPtr()), 425 weak_factory_.GetWeakPtr()),
425 dependency_factory_)); 426 dependency_factory_));
426 webkit_source->setExtraData(audio_source); 427 webkit_source->setExtraData(audio_source);
427 } 428 }
428 local_sources_.push_back(*webkit_source); 429 local_sources_.push_back(*webkit_source);
429 } 430 }
430 431
431 MediaStreamVideoSource* MediaStreamImpl::CreateVideoSource( 432 MediaStreamVideoSource* UserMediaClientImpl::CreateVideoSource(
432 const StreamDeviceInfo& device, 433 const StreamDeviceInfo& device,
433 const MediaStreamSource::SourceStoppedCallback& stop_callback) { 434 const MediaStreamSource::SourceStoppedCallback& stop_callback) {
434 return new content::MediaStreamVideoCapturerSource( 435 return new content::MediaStreamVideoCapturerSource(
435 device, 436 device,
436 stop_callback, 437 stop_callback,
437 new VideoCapturerDelegate(device)); 438 new VideoCapturerDelegate(device));
438 } 439 }
439 440
440 void MediaStreamImpl::CreateVideoTracks( 441 void UserMediaClientImpl::CreateVideoTracks(
441 const StreamDeviceInfoArray& devices, 442 const StreamDeviceInfoArray& devices,
442 const blink::WebMediaConstraints& constraints, 443 const blink::WebMediaConstraints& constraints,
443 blink::WebVector<blink::WebMediaStreamTrack>* webkit_tracks, 444 blink::WebVector<blink::WebMediaStreamTrack>* webkit_tracks,
444 UserMediaRequestInfo* request) { 445 UserMediaRequestInfo* request) {
445 DCHECK_EQ(devices.size(), webkit_tracks->size()); 446 DCHECK_EQ(devices.size(), webkit_tracks->size());
446 447
447 for (size_t i = 0; i < devices.size(); ++i) { 448 for (size_t i = 0; i < devices.size(); ++i) {
448 blink::WebMediaStreamSource webkit_source; 449 blink::WebMediaStreamSource webkit_source;
449 InitializeSourceObject(devices[i], 450 InitializeSourceObject(devices[i],
450 blink::WebMediaStreamSource::TypeVideo, 451 blink::WebMediaStreamSource::TypeVideo,
451 constraints, 452 constraints,
452 &webkit_source); 453 &webkit_source);
453 (*webkit_tracks)[i] = 454 (*webkit_tracks)[i] =
454 request->CreateAndStartVideoTrack(webkit_source, constraints); 455 request->CreateAndStartVideoTrack(webkit_source, constraints);
455 } 456 }
456 } 457 }
457 458
458 void MediaStreamImpl::CreateAudioTracks( 459 void UserMediaClientImpl::CreateAudioTracks(
459 const StreamDeviceInfoArray& devices, 460 const StreamDeviceInfoArray& devices,
460 const blink::WebMediaConstraints& constraints, 461 const blink::WebMediaConstraints& constraints,
461 blink::WebVector<blink::WebMediaStreamTrack>* webkit_tracks, 462 blink::WebVector<blink::WebMediaStreamTrack>* webkit_tracks,
462 UserMediaRequestInfo* request) { 463 UserMediaRequestInfo* request) {
463 DCHECK_EQ(devices.size(), webkit_tracks->size()); 464 DCHECK_EQ(devices.size(), webkit_tracks->size());
464 465
465 // Log the device names for this request. 466 // Log the device names for this request.
466 for (StreamDeviceInfoArray::const_iterator it = devices.begin(); 467 for (StreamDeviceInfoArray::const_iterator it = devices.begin();
467 it != devices.end(); ++it) { 468 it != devices.end(); ++it) {
468 WebRtcLogMessage(base::StringPrintf( 469 WebRtcLogMessage(base::StringPrintf(
(...skipping 19 matching lines...) Expand all
488 blink::WebMediaStreamSource webkit_source; 489 blink::WebMediaStreamSource webkit_source;
489 InitializeSourceObject(overridden_audio_array[i], 490 InitializeSourceObject(overridden_audio_array[i],
490 blink::WebMediaStreamSource::TypeAudio, 491 blink::WebMediaStreamSource::TypeAudio,
491 constraints, 492 constraints,
492 &webkit_source); 493 &webkit_source);
493 (*webkit_tracks)[i].initialize(webkit_source); 494 (*webkit_tracks)[i].initialize(webkit_source);
494 request->StartAudioTrack((*webkit_tracks)[i], constraints); 495 request->StartAudioTrack((*webkit_tracks)[i], constraints);
495 } 496 }
496 } 497 }
497 498
498 void MediaStreamImpl::OnCreateNativeTracksCompleted( 499 void UserMediaClientImpl::OnCreateNativeTracksCompleted(
499 UserMediaRequestInfo* request, 500 UserMediaRequestInfo* request,
500 MediaStreamRequestResult result, 501 MediaStreamRequestResult result,
501 const blink::WebString& result_name) { 502 const blink::WebString& result_name) {
502 DVLOG(1) << "MediaStreamImpl::OnCreateNativeTracksComplete(" 503 DVLOG(1) << "UserMediaClientImpl::OnCreateNativeTracksComplete("
503 << "{request_id = " << request->request_id << "} " 504 << "{request_id = " << request->request_id << "} "
504 << "{result = " << result << "})"; 505 << "{result = " << result << "})";
505 if (result == content::MEDIA_DEVICE_OK) 506 if (result == content::MEDIA_DEVICE_OK)
506 GetUserMediaRequestSucceeded(request->web_stream, &request->request); 507 GetUserMediaRequestSucceeded(request->web_stream, &request->request);
507 else 508 else
508 GetUserMediaRequestTrackStartedFailed(&request->request, 509 GetUserMediaRequestTrackStartedFailed(&request->request,
509 result, 510 result,
510 result_name); 511 result_name);
511 512
512 DeleteUserMediaRequestInfo(request); 513 DeleteUserMediaRequestInfo(request);
513 } 514 }
514 515
515 void MediaStreamImpl::OnDevicesEnumerated( 516 void UserMediaClientImpl::OnDevicesEnumerated(
516 int request_id, 517 int request_id,
517 const StreamDeviceInfoArray& device_array) { 518 const StreamDeviceInfoArray& device_array) {
518 DVLOG(1) << "MediaStreamImpl::OnDevicesEnumerated(" << request_id << ")"; 519 DVLOG(1) << "UserMediaClientImpl::OnDevicesEnumerated(" << request_id << ")";
519 520
520 MediaDevicesRequestInfo* request = FindMediaDevicesRequestInfo(request_id); 521 MediaDevicesRequestInfo* request = FindMediaDevicesRequestInfo(request_id);
521 DCHECK(request); 522 DCHECK(request);
522 523
523 if (request_id == request->audio_input_request_id) { 524 if (request_id == request->audio_input_request_id) {
524 request->has_audio_input_returned = true; 525 request->has_audio_input_returned = true;
525 DCHECK(request->audio_input_devices.empty()); 526 DCHECK(request->audio_input_devices.empty());
526 request->audio_input_devices = device_array; 527 request->audio_input_devices = device_array;
527 } else if (request_id == request->video_input_request_id) { 528 } else if (request_id == request->video_input_request_id) {
528 request->has_video_input_returned = true; 529 request->has_video_input_returned = true;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 blink::WebString::fromUTF8(device.id), 582 blink::WebString::fromUTF8(device.id),
582 blink::WebMediaDeviceInfo::MediaDeviceKindAudioOutput, 583 blink::WebMediaDeviceInfo::MediaDeviceKindAudioOutput,
583 blink::WebString::fromUTF8(device.name), 584 blink::WebString::fromUTF8(device.name),
584 blink::WebString::fromUTF8(base::UintToString(base::Hash(device.id)))); 585 blink::WebString::fromUTF8(base::UintToString(base::Hash(device.id))));
585 } 586 }
586 587
587 EnumerateDevicesSucceded(&request->request, devices); 588 EnumerateDevicesSucceded(&request->request, devices);
588 CancelAndDeleteMediaDevicesRequest(request); 589 CancelAndDeleteMediaDevicesRequest(request);
589 } 590 }
590 591
591 void MediaStreamImpl::OnDeviceOpened( 592 void UserMediaClientImpl::OnDeviceOpened(
592 int request_id, 593 int request_id,
593 const std::string& label, 594 const std::string& label,
594 const StreamDeviceInfo& video_device) { 595 const StreamDeviceInfo& video_device) {
595 DVLOG(1) << "MediaStreamImpl::OnDeviceOpened(" 596 DVLOG(1) << "UserMediaClientImpl::OnDeviceOpened("
596 << request_id << ", " << label << ")"; 597 << request_id << ", " << label << ")";
597 NOTIMPLEMENTED(); 598 NOTIMPLEMENTED();
598 } 599 }
599 600
600 void MediaStreamImpl::OnDeviceOpenFailed(int request_id) { 601 void UserMediaClientImpl::OnDeviceOpenFailed(int request_id) {
601 DVLOG(1) << "MediaStreamImpl::VideoDeviceOpenFailed(" 602 DVLOG(1) << "UserMediaClientImpl::VideoDeviceOpenFailed("
602 << request_id << ")"; 603 << request_id << ")";
603 NOTIMPLEMENTED(); 604 NOTIMPLEMENTED();
604 } 605 }
605 606
606 void MediaStreamImpl::GetUserMediaRequestSucceeded( 607 void UserMediaClientImpl::GetUserMediaRequestSucceeded(
607 const blink::WebMediaStream& stream, 608 const blink::WebMediaStream& stream,
608 blink::WebUserMediaRequest* request_info) { 609 blink::WebUserMediaRequest* request_info) {
609 DVLOG(1) << "MediaStreamImpl::GetUserMediaRequestSucceeded"; 610 DVLOG(1) << "UserMediaClientImpl::GetUserMediaRequestSucceeded";
610 LogUserMediaRequestResult(MEDIA_DEVICE_OK); 611 LogUserMediaRequestResult(MEDIA_DEVICE_OK);
611 request_info->requestSucceeded(stream); 612 request_info->requestSucceeded(stream);
612 } 613 }
613 614
614 void MediaStreamImpl::GetUserMediaRequestFailed( 615 void UserMediaClientImpl::GetUserMediaRequestFailed(
615 blink::WebUserMediaRequest* request_info, 616 blink::WebUserMediaRequest* request_info,
616 MediaStreamRequestResult result) { 617 MediaStreamRequestResult result) {
617 LogUserMediaRequestResult(result); 618 LogUserMediaRequestResult(result);
618 switch (result) { 619 switch (result) {
619 case MEDIA_DEVICE_OK: 620 case MEDIA_DEVICE_OK:
620 NOTREACHED(); 621 NOTREACHED();
621 break; 622 break;
622 case MEDIA_DEVICE_PERMISSION_DENIED: 623 case MEDIA_DEVICE_PERMISSION_DENIED:
623 request_info->requestDenied(); 624 request_info->requestDenied();
624 break; 625 break;
(...skipping 18 matching lines...) Expand all
643 case MEDIA_DEVICE_CAPTURE_FAILURE: 644 case MEDIA_DEVICE_CAPTURE_FAILURE:
644 request_info->requestFailedUASpecific("DeviceCaptureError"); 645 request_info->requestFailedUASpecific("DeviceCaptureError");
645 break; 646 break;
646 default: 647 default:
647 NOTREACHED(); 648 NOTREACHED();
648 request_info->requestFailed(); 649 request_info->requestFailed();
649 break; 650 break;
650 } 651 }
651 } 652 }
652 653
653 void MediaStreamImpl::GetUserMediaRequestTrackStartedFailed( 654 void UserMediaClientImpl::GetUserMediaRequestTrackStartedFailed(
654 blink::WebUserMediaRequest* request_info, 655 blink::WebUserMediaRequest* request_info,
655 MediaStreamRequestResult result, 656 MediaStreamRequestResult result,
656 const blink::WebString& result_name) { 657 const blink::WebString& result_name) {
657 switch (result) { 658 switch (result) {
658 case MEDIA_DEVICE_CONSTRAINT_NOT_SATISFIED: 659 case MEDIA_DEVICE_CONSTRAINT_NOT_SATISFIED:
659 request_info->requestFailedConstraint(result_name); 660 request_info->requestFailedConstraint(result_name);
660 break; 661 break;
661 case MEDIA_DEVICE_TRACK_START_FAILURE: 662 case MEDIA_DEVICE_TRACK_START_FAILURE:
662 request_info->requestFailedUASpecific("TrackStartError"); 663 request_info->requestFailedUASpecific("TrackStartError");
663 break; 664 break;
664 default: 665 default:
665 NOTREACHED(); 666 NOTREACHED();
666 request_info->requestFailed(); 667 request_info->requestFailed();
667 break; 668 break;
668 } 669 }
669 } 670 }
670 671
671 void MediaStreamImpl::EnumerateDevicesSucceded( 672 void UserMediaClientImpl::EnumerateDevicesSucceded(
672 blink::WebMediaDevicesRequest* request, 673 blink::WebMediaDevicesRequest* request,
673 blink::WebVector<blink::WebMediaDeviceInfo>& devices) { 674 blink::WebVector<blink::WebMediaDeviceInfo>& devices) {
674 request->requestSucceeded(devices); 675 request->requestSucceeded(devices);
675 } 676 }
676 677
677 const blink::WebMediaStreamSource* MediaStreamImpl::FindLocalSource( 678 const blink::WebMediaStreamSource* UserMediaClientImpl::FindLocalSource(
678 const StreamDeviceInfo& device) const { 679 const StreamDeviceInfo& device) const {
679 for (LocalStreamSources::const_iterator it = local_sources_.begin(); 680 for (LocalStreamSources::const_iterator it = local_sources_.begin();
680 it != local_sources_.end(); ++it) { 681 it != local_sources_.end(); ++it) {
681 MediaStreamSource* const source = 682 MediaStreamSource* const source =
682 static_cast<MediaStreamSource*>(it->extraData()); 683 static_cast<MediaStreamSource*>(it->extraData());
683 const StreamDeviceInfo& active_device = source->device_info(); 684 const StreamDeviceInfo& active_device = source->device_info();
684 if (active_device.device.id == device.device.id && 685 if (active_device.device.id == device.device.id &&
685 active_device.device.type == device.device.type && 686 active_device.device.type == device.device.type &&
686 active_device.session_id == device.session_id) { 687 active_device.session_id == device.session_id) {
687 return &(*it); 688 return &(*it);
688 } 689 }
689 } 690 }
690 return NULL; 691 return NULL;
691 } 692 }
692 693
693 MediaStreamImpl::UserMediaRequestInfo* 694 UserMediaClientImpl::UserMediaRequestInfo*
694 MediaStreamImpl::FindUserMediaRequestInfo(int request_id) { 695 UserMediaClientImpl::FindUserMediaRequestInfo(int request_id) {
695 UserMediaRequests::iterator it = user_media_requests_.begin(); 696 UserMediaRequests::iterator it = user_media_requests_.begin();
696 for (; it != user_media_requests_.end(); ++it) { 697 for (; it != user_media_requests_.end(); ++it) {
697 if ((*it)->request_id == request_id) 698 if ((*it)->request_id == request_id)
698 return (*it); 699 return (*it);
699 } 700 }
700 return NULL; 701 return NULL;
701 } 702 }
702 703
703 MediaStreamImpl::UserMediaRequestInfo* 704 UserMediaClientImpl::UserMediaRequestInfo*
704 MediaStreamImpl::FindUserMediaRequestInfo( 705 UserMediaClientImpl::FindUserMediaRequestInfo(
705 const blink::WebUserMediaRequest& request) { 706 const blink::WebUserMediaRequest& request) {
706 UserMediaRequests::iterator it = user_media_requests_.begin(); 707 UserMediaRequests::iterator it = user_media_requests_.begin();
707 for (; it != user_media_requests_.end(); ++it) { 708 for (; it != user_media_requests_.end(); ++it) {
708 if ((*it)->request == request) 709 if ((*it)->request == request)
709 return (*it); 710 return (*it);
710 } 711 }
711 return NULL; 712 return NULL;
712 } 713 }
713 714
714 void MediaStreamImpl::DeleteUserMediaRequestInfo( 715 void UserMediaClientImpl::DeleteUserMediaRequestInfo(
715 UserMediaRequestInfo* request) { 716 UserMediaRequestInfo* request) {
716 UserMediaRequests::iterator it = user_media_requests_.begin(); 717 UserMediaRequests::iterator it = user_media_requests_.begin();
717 for (; it != user_media_requests_.end(); ++it) { 718 for (; it != user_media_requests_.end(); ++it) {
718 if ((*it) == request) { 719 if ((*it) == request) {
719 user_media_requests_.erase(it); 720 user_media_requests_.erase(it);
720 return; 721 return;
721 } 722 }
722 } 723 }
723 NOTREACHED(); 724 NOTREACHED();
724 } 725 }
725 726
726 void MediaStreamImpl::DeleteAllUserMediaRequests() { 727 void UserMediaClientImpl::DeleteAllUserMediaRequests() {
727 UserMediaRequests::iterator request_it = user_media_requests_.begin(); 728 UserMediaRequests::iterator request_it = user_media_requests_.begin();
728 while (request_it != user_media_requests_.end()) { 729 while (request_it != user_media_requests_.end()) {
729 DVLOG(1) << "MediaStreamImpl@" << this << "::DeleteAllUserMediaRequests: " 730 DVLOG(1) << "UserMediaClientImpl@" << this
731 << "::DeleteAllUserMediaRequests: "
730 << "Cancel user media request " << (*request_it)->request_id; 732 << "Cancel user media request " << (*request_it)->request_id;
731 // If the request is not generated, it means that a request 733 // If the request is not generated, it means that a request
732 // has been sent to the MediaStreamDispatcher to generate a stream 734 // has been sent to the MediaStreamDispatcher to generate a stream
733 // but MediaStreamDispatcher has not yet responded and we need to cancel 735 // but MediaStreamDispatcher has not yet responded and we need to cancel
734 // the request. 736 // the request.
735 if (!(*request_it)->generated) { 737 if (!(*request_it)->generated) {
736 DCHECK(!(*request_it)->HasPendingSources()); 738 DCHECK(!(*request_it)->HasPendingSources());
737 media_stream_dispatcher_->CancelGenerateStream( 739 media_stream_dispatcher_->CancelGenerateStream(
738 (*request_it)->request_id, weak_factory_.GetWeakPtr()); 740 (*request_it)->request_id, weak_factory_.GetWeakPtr());
739 LogUserMediaRequestWithNoResult(MEDIA_STREAM_REQUEST_NOT_GENERATED); 741 LogUserMediaRequestWithNoResult(MEDIA_STREAM_REQUEST_NOT_GENERATED);
740 } else { 742 } else {
741 DCHECK((*request_it)->HasPendingSources()); 743 DCHECK((*request_it)->HasPendingSources());
742 LogUserMediaRequestWithNoResult( 744 LogUserMediaRequestWithNoResult(
743 MEDIA_STREAM_REQUEST_PENDING_MEDIA_TRACKS); 745 MEDIA_STREAM_REQUEST_PENDING_MEDIA_TRACKS);
744 } 746 }
745 request_it = user_media_requests_.erase(request_it); 747 request_it = user_media_requests_.erase(request_it);
746 } 748 }
747 } 749 }
748 750
749 MediaStreamImpl::MediaDevicesRequestInfo* 751 UserMediaClientImpl::MediaDevicesRequestInfo*
750 MediaStreamImpl::FindMediaDevicesRequestInfo( 752 UserMediaClientImpl::FindMediaDevicesRequestInfo(
751 int request_id) { 753 int request_id) {
752 MediaDevicesRequests::iterator it = media_devices_requests_.begin(); 754 MediaDevicesRequests::iterator it = media_devices_requests_.begin();
753 for (; it != media_devices_requests_.end(); ++it) { 755 for (; it != media_devices_requests_.end(); ++it) {
754 if ((*it)->audio_input_request_id == request_id || 756 if ((*it)->audio_input_request_id == request_id ||
755 (*it)->video_input_request_id == request_id || 757 (*it)->video_input_request_id == request_id ||
756 (*it)->audio_output_request_id == request_id) { 758 (*it)->audio_output_request_id == request_id) {
757 return (*it); 759 return (*it);
758 } 760 }
759 } 761 }
760 return NULL; 762 return NULL;
761 } 763 }
762 764
763 MediaStreamImpl::MediaDevicesRequestInfo* 765 UserMediaClientImpl::MediaDevicesRequestInfo*
764 MediaStreamImpl::FindMediaDevicesRequestInfo( 766 UserMediaClientImpl::FindMediaDevicesRequestInfo(
765 const blink::WebMediaDevicesRequest& request) { 767 const blink::WebMediaDevicesRequest& request) {
766 MediaDevicesRequests::iterator it = media_devices_requests_.begin(); 768 MediaDevicesRequests::iterator it = media_devices_requests_.begin();
767 for (; it != media_devices_requests_.end(); ++it) { 769 for (; it != media_devices_requests_.end(); ++it) {
768 if ((*it)->request == request) 770 if ((*it)->request == request)
769 return (*it); 771 return (*it);
770 } 772 }
771 return NULL; 773 return NULL;
772 } 774 }
773 775
774 void MediaStreamImpl::CancelAndDeleteMediaDevicesRequest( 776 void UserMediaClientImpl::CancelAndDeleteMediaDevicesRequest(
775 MediaDevicesRequestInfo* request) { 777 MediaDevicesRequestInfo* request) {
776 MediaDevicesRequests::iterator it = media_devices_requests_.begin(); 778 MediaDevicesRequests::iterator it = media_devices_requests_.begin();
777 for (; it != media_devices_requests_.end(); ++it) { 779 for (; it != media_devices_requests_.end(); ++it) {
778 if ((*it) == request) { 780 if ((*it) == request) {
779 // Cancel device enumeration. 781 // Cancel device enumeration.
780 media_stream_dispatcher_->StopEnumerateDevices( 782 media_stream_dispatcher_->StopEnumerateDevices(
781 request->audio_input_request_id, weak_factory_.GetWeakPtr()); 783 request->audio_input_request_id, weak_factory_.GetWeakPtr());
782 media_stream_dispatcher_->StopEnumerateDevices( 784 media_stream_dispatcher_->StopEnumerateDevices(
783 request->video_input_request_id, weak_factory_.GetWeakPtr()); 785 request->video_input_request_id, weak_factory_.GetWeakPtr());
784 media_stream_dispatcher_->StopEnumerateDevices( 786 media_stream_dispatcher_->StopEnumerateDevices(
785 request->audio_output_request_id, weak_factory_.GetWeakPtr()); 787 request->audio_output_request_id, weak_factory_.GetWeakPtr());
786 788
787 media_devices_requests_.erase(it); 789 media_devices_requests_.erase(it);
788 return; 790 return;
789 } 791 }
790 } 792 }
791 NOTREACHED(); 793 NOTREACHED();
792 } 794 }
793 795
794 void MediaStreamImpl::FrameWillClose() { 796 void UserMediaClientImpl::FrameWillClose() {
795 // Cancel all outstanding UserMediaRequests. 797 // Cancel all outstanding UserMediaRequests.
796 DeleteAllUserMediaRequests(); 798 DeleteAllUserMediaRequests();
797 799
798 // Loop through all current local sources and stop the sources. 800 // Loop through all current local sources and stop the sources.
799 LocalStreamSources::iterator sources_it = local_sources_.begin(); 801 LocalStreamSources::iterator sources_it = local_sources_.begin();
800 while (sources_it != local_sources_.end()) { 802 while (sources_it != local_sources_.end()) {
801 StopLocalSource(*sources_it, true); 803 StopLocalSource(*sources_it, true);
802 sources_it = local_sources_.erase(sources_it); 804 sources_it = local_sources_.erase(sources_it);
803 } 805 }
804 } 806 }
805 807
806 void MediaStreamImpl::OnLocalSourceStopped( 808 void UserMediaClientImpl::OnLocalSourceStopped(
807 const blink::WebMediaStreamSource& source) { 809 const blink::WebMediaStreamSource& source) {
808 DCHECK(CalledOnValidThread()); 810 DCHECK(CalledOnValidThread());
809 DVLOG(1) << "MediaStreamImpl::OnLocalSourceStopped"; 811 DVLOG(1) << "UserMediaClientImpl::OnLocalSourceStopped";
810 812
811 bool device_found = false; 813 bool device_found = false;
812 for (LocalStreamSources::iterator device_it = local_sources_.begin(); 814 for (LocalStreamSources::iterator device_it = local_sources_.begin();
813 device_it != local_sources_.end(); ++device_it) { 815 device_it != local_sources_.end(); ++device_it) {
814 if (device_it->id() == source.id()) { 816 if (device_it->id() == source.id()) {
815 device_found = true; 817 device_found = true;
816 local_sources_.erase(device_it); 818 local_sources_.erase(device_it);
817 break; 819 break;
818 } 820 }
819 } 821 }
820 CHECK(device_found); 822 CHECK(device_found);
821 823
822 MediaStreamSource* source_impl = 824 MediaStreamSource* source_impl =
823 static_cast<MediaStreamSource*>(source.extraData()); 825 static_cast<MediaStreamSource*>(source.extraData());
824 media_stream_dispatcher_->StopStreamDevice(source_impl->device_info()); 826 media_stream_dispatcher_->StopStreamDevice(source_impl->device_info());
825 } 827 }
826 828
827 void MediaStreamImpl::StopLocalSource( 829 void UserMediaClientImpl::StopLocalSource(
828 const blink::WebMediaStreamSource& source, 830 const blink::WebMediaStreamSource& source,
829 bool notify_dispatcher) { 831 bool notify_dispatcher) {
830 MediaStreamSource* source_impl = 832 MediaStreamSource* source_impl =
831 static_cast<MediaStreamSource*>(source.extraData()); 833 static_cast<MediaStreamSource*>(source.extraData());
832 DVLOG(1) << "MediaStreamImpl::StopLocalSource(" 834 DVLOG(1) << "UserMediaClientImpl::StopLocalSource("
833 << "{device_id = " << source_impl->device_info().device.id << "})"; 835 << "{device_id = " << source_impl->device_info().device.id << "})";
834 836
835 if (notify_dispatcher) 837 if (notify_dispatcher)
836 media_stream_dispatcher_->StopStreamDevice(source_impl->device_info()); 838 media_stream_dispatcher_->StopStreamDevice(source_impl->device_info());
837 839
838 source_impl->ResetSourceStoppedCallback(); 840 source_impl->ResetSourceStoppedCallback();
839 source_impl->StopSource(); 841 source_impl->StopSource();
840 } 842 }
841 843
842 MediaStreamImpl::UserMediaRequestInfo::UserMediaRequestInfo( 844 UserMediaClientImpl::UserMediaRequestInfo::UserMediaRequestInfo(
843 int request_id, 845 int request_id,
844 const blink::WebUserMediaRequest& request, 846 const blink::WebUserMediaRequest& request,
845 bool enable_automatic_output_device_selection) 847 bool enable_automatic_output_device_selection)
846 : request_id(request_id), 848 : request_id(request_id),
847 generated(false), 849 generated(false),
848 enable_automatic_output_device_selection( 850 enable_automatic_output_device_selection(
849 enable_automatic_output_device_selection), 851 enable_automatic_output_device_selection),
850 request(request), 852 request(request),
851 request_result_(MEDIA_DEVICE_OK), 853 request_result_(MEDIA_DEVICE_OK),
852 request_result_name_("") { 854 request_result_name_("") {
853 } 855 }
854 856
855 MediaStreamImpl::UserMediaRequestInfo::~UserMediaRequestInfo() { 857 UserMediaClientImpl::UserMediaRequestInfo::~UserMediaRequestInfo() {
856 DVLOG(1) << "~UserMediaRequestInfo"; 858 DVLOG(1) << "~UserMediaRequestInfo";
857 } 859 }
858 860
859 void MediaStreamImpl::UserMediaRequestInfo::StartAudioTrack( 861 void UserMediaClientImpl::UserMediaRequestInfo::StartAudioTrack(
860 const blink::WebMediaStreamTrack& track, 862 const blink::WebMediaStreamTrack& track,
861 const blink::WebMediaConstraints& constraints) { 863 const blink::WebMediaConstraints& constraints) {
862 DCHECK(track.source().type() == blink::WebMediaStreamSource::TypeAudio); 864 DCHECK(track.source().type() == blink::WebMediaStreamSource::TypeAudio);
863 MediaStreamAudioSource* native_source = 865 MediaStreamAudioSource* native_source =
864 static_cast <MediaStreamAudioSource*>(track.source().extraData()); 866 static_cast <MediaStreamAudioSource*>(track.source().extraData());
865 DCHECK(native_source); 867 DCHECK(native_source);
866 868
867 sources_.push_back(track.source()); 869 sources_.push_back(track.source());
868 sources_waiting_for_callback_.push_back(native_source); 870 sources_waiting_for_callback_.push_back(native_source);
869 native_source->AddTrack( 871 native_source->AddTrack(
870 track, constraints, base::Bind( 872 track, constraints, base::Bind(
871 &MediaStreamImpl::UserMediaRequestInfo::OnTrackStarted, 873 &UserMediaClientImpl::UserMediaRequestInfo::OnTrackStarted,
872 AsWeakPtr())); 874 AsWeakPtr()));
873 } 875 }
874 876
875 blink::WebMediaStreamTrack 877 blink::WebMediaStreamTrack
876 MediaStreamImpl::UserMediaRequestInfo::CreateAndStartVideoTrack( 878 UserMediaClientImpl::UserMediaRequestInfo::CreateAndStartVideoTrack(
877 const blink::WebMediaStreamSource& source, 879 const blink::WebMediaStreamSource& source,
878 const blink::WebMediaConstraints& constraints) { 880 const blink::WebMediaConstraints& constraints) {
879 DCHECK(source.type() == blink::WebMediaStreamSource::TypeVideo); 881 DCHECK(source.type() == blink::WebMediaStreamSource::TypeVideo);
880 MediaStreamVideoSource* native_source = 882 MediaStreamVideoSource* native_source =
881 MediaStreamVideoSource::GetVideoSource(source); 883 MediaStreamVideoSource::GetVideoSource(source);
882 DCHECK(native_source); 884 DCHECK(native_source);
883 sources_.push_back(source); 885 sources_.push_back(source);
884 sources_waiting_for_callback_.push_back(native_source); 886 sources_waiting_for_callback_.push_back(native_source);
885 return MediaStreamVideoTrack::CreateVideoTrack( 887 return MediaStreamVideoTrack::CreateVideoTrack(
886 native_source, constraints, base::Bind( 888 native_source, constraints, base::Bind(
887 &MediaStreamImpl::UserMediaRequestInfo::OnTrackStarted, 889 &UserMediaClientImpl::UserMediaRequestInfo::OnTrackStarted,
888 AsWeakPtr()), 890 AsWeakPtr()),
889 true); 891 true);
890 } 892 }
891 893
892 void MediaStreamImpl::UserMediaRequestInfo::CallbackOnTracksStarted( 894 void UserMediaClientImpl::UserMediaRequestInfo::CallbackOnTracksStarted(
893 const ResourcesReady& callback) { 895 const ResourcesReady& callback) {
894 DCHECK(ready_callback_.is_null()); 896 DCHECK(ready_callback_.is_null());
895 ready_callback_ = callback; 897 ready_callback_ = callback;
896 CheckAllTracksStarted(); 898 CheckAllTracksStarted();
897 } 899 }
898 900
899 void MediaStreamImpl::UserMediaRequestInfo::OnTrackStarted( 901 void UserMediaClientImpl::UserMediaRequestInfo::OnTrackStarted(
900 MediaStreamSource* source, 902 MediaStreamSource* source,
901 MediaStreamRequestResult result, 903 MediaStreamRequestResult result,
902 const blink::WebString& result_name) { 904 const blink::WebString& result_name) {
903 DVLOG(1) << "OnTrackStarted result " << result; 905 DVLOG(1) << "OnTrackStarted result " << result;
904 std::vector<MediaStreamSource*>::iterator it = 906 std::vector<MediaStreamSource*>::iterator it =
905 std::find(sources_waiting_for_callback_.begin(), 907 std::find(sources_waiting_for_callback_.begin(),
906 sources_waiting_for_callback_.end(), 908 sources_waiting_for_callback_.end(),
907 source); 909 source);
908 DCHECK(it != sources_waiting_for_callback_.end()); 910 DCHECK(it != sources_waiting_for_callback_.end());
909 sources_waiting_for_callback_.erase(it); 911 sources_waiting_for_callback_.erase(it);
910 // All tracks must be started successfully. Otherwise the request is a 912 // All tracks must be started successfully. Otherwise the request is a
911 // failure. 913 // failure.
912 if (result != MEDIA_DEVICE_OK) { 914 if (result != MEDIA_DEVICE_OK) {
913 request_result_ = result; 915 request_result_ = result;
914 request_result_name_ = result_name; 916 request_result_name_ = result_name;
915 } 917 }
916 918
917 CheckAllTracksStarted(); 919 CheckAllTracksStarted();
918 } 920 }
919 921
920 void MediaStreamImpl::UserMediaRequestInfo::CheckAllTracksStarted() { 922 void UserMediaClientImpl::UserMediaRequestInfo::CheckAllTracksStarted() {
921 if (!ready_callback_.is_null() && sources_waiting_for_callback_.empty()) { 923 if (!ready_callback_.is_null() && sources_waiting_for_callback_.empty()) {
922 ready_callback_.Run(this, request_result_, request_result_name_); 924 ready_callback_.Run(this, request_result_, request_result_name_);
923 } 925 }
924 } 926 }
925 927
926 bool MediaStreamImpl::UserMediaRequestInfo::IsSourceUsed( 928 bool UserMediaClientImpl::UserMediaRequestInfo::IsSourceUsed(
927 const blink::WebMediaStreamSource& source) const { 929 const blink::WebMediaStreamSource& source) const {
928 for (std::vector<blink::WebMediaStreamSource>::const_iterator source_it = 930 for (std::vector<blink::WebMediaStreamSource>::const_iterator source_it =
929 sources_.begin(); 931 sources_.begin();
930 source_it != sources_.end(); ++source_it) { 932 source_it != sources_.end(); ++source_it) {
931 if (source_it->id() == source.id()) 933 if (source_it->id() == source.id())
932 return true; 934 return true;
933 } 935 }
934 return false; 936 return false;
935 } 937 }
936 938
937 void MediaStreamImpl::UserMediaRequestInfo::RemoveSource( 939 void UserMediaClientImpl::UserMediaRequestInfo::RemoveSource(
938 const blink::WebMediaStreamSource& source) { 940 const blink::WebMediaStreamSource& source) {
939 for (std::vector<blink::WebMediaStreamSource>::iterator it = 941 for (std::vector<blink::WebMediaStreamSource>::iterator it =
940 sources_.begin(); 942 sources_.begin();
941 it != sources_.end(); ++it) { 943 it != sources_.end(); ++it) {
942 if (source.id() == it->id()) { 944 if (source.id() == it->id()) {
943 sources_.erase(it); 945 sources_.erase(it);
944 return; 946 return;
945 } 947 }
946 } 948 }
947 } 949 }
948 950
949 bool MediaStreamImpl::UserMediaRequestInfo::HasPendingSources() const { 951 bool UserMediaClientImpl::UserMediaRequestInfo::HasPendingSources() const {
950 return !sources_waiting_for_callback_.empty(); 952 return !sources_waiting_for_callback_.empty();
951 } 953 }
952 954
953 } // namespace content 955 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698