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

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

Issue 63253002: Rename WebKit namespace to blink (part 3) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month 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 | Annotate | Revision Log
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_impl.h" 5 #include "content/renderer/media/media_stream_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 16 matching lines...) Expand all
27 #include "third_party/WebKit/public/platform/WebMediaConstraints.h" 27 #include "third_party/WebKit/public/platform/WebMediaConstraints.h"
28 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" 28 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
29 #include "third_party/WebKit/public/web/WebDocument.h" 29 #include "third_party/WebKit/public/web/WebDocument.h"
30 #include "third_party/WebKit/public/web/WebFrame.h" 30 #include "third_party/WebKit/public/web/WebFrame.h"
31 #include "third_party/WebKit/public/web/WebMediaStreamRegistry.h" 31 #include "third_party/WebKit/public/web/WebMediaStreamRegistry.h"
32 32
33 namespace content { 33 namespace content {
34 namespace { 34 namespace {
35 35
36 std::string GetStreamConstraint( 36 std::string GetStreamConstraint(
37 const WebKit::WebMediaConstraints& constraints, const std::string& key, 37 const blink::WebMediaConstraints& constraints, const std::string& key,
38 bool is_mandatory) { 38 bool is_mandatory) {
39 if (constraints.isNull()) 39 if (constraints.isNull())
40 return std::string(); 40 return std::string();
41 41
42 WebKit::WebString value; 42 blink::WebString value;
43 if (is_mandatory) { 43 if (is_mandatory) {
44 constraints.getMandatoryConstraintValue(UTF8ToUTF16(key), value); 44 constraints.getMandatoryConstraintValue(UTF8ToUTF16(key), value);
45 } else { 45 } else {
46 constraints.getOptionalConstraintValue(UTF8ToUTF16(key), value); 46 constraints.getOptionalConstraintValue(UTF8ToUTF16(key), value);
47 } 47 }
48 return UTF16ToUTF8(value); 48 return UTF16ToUTF8(value);
49 } 49 }
50 50
51 void UpdateRequestOptions( 51 void UpdateRequestOptions(
52 const WebKit::WebUserMediaRequest& user_media_request, 52 const blink::WebUserMediaRequest& user_media_request,
53 StreamOptions* options) { 53 StreamOptions* options) {
54 if (options->audio_type != content::MEDIA_NO_SERVICE) { 54 if (options->audio_type != content::MEDIA_NO_SERVICE) {
55 std::string audio_stream_source = GetStreamConstraint( 55 std::string audio_stream_source = GetStreamConstraint(
56 user_media_request.audioConstraints(), kMediaStreamSource, true); 56 user_media_request.audioConstraints(), kMediaStreamSource, true);
57 if (audio_stream_source == kMediaStreamSourceTab) { 57 if (audio_stream_source == kMediaStreamSourceTab) {
58 options->audio_type = content::MEDIA_TAB_AUDIO_CAPTURE; 58 options->audio_type = content::MEDIA_TAB_AUDIO_CAPTURE;
59 options->audio_device_id = GetStreamConstraint( 59 options->audio_device_id = GetStreamConstraint(
60 user_media_request.audioConstraints(), 60 user_media_request.audioConstraints(),
61 kMediaStreamSourceId, true); 61 kMediaStreamSourceId, true);
62 } else if (audio_stream_source == kMediaStreamSourceSystem) { 62 } else if (audio_stream_source == kMediaStreamSourceSystem) {
(...skipping 18 matching lines...) Expand all
81 options->video_device_id = GetStreamConstraint( 81 options->video_device_id = GetStreamConstraint(
82 user_media_request.videoConstraints(), 82 user_media_request.videoConstraints(),
83 kMediaStreamSourceId, true); 83 kMediaStreamSourceId, true);
84 } 84 }
85 } 85 }
86 } 86 }
87 87
88 static int g_next_request_id = 0; 88 static int g_next_request_id = 0;
89 89
90 webrtc::MediaStreamInterface* GetNativeMediaStream( 90 webrtc::MediaStreamInterface* GetNativeMediaStream(
91 const WebKit::WebMediaStream& web_stream) { 91 const blink::WebMediaStream& web_stream) {
92 content::MediaStreamExtraData* extra_data = 92 content::MediaStreamExtraData* extra_data =
93 static_cast<content::MediaStreamExtraData*>(web_stream.extraData()); 93 static_cast<content::MediaStreamExtraData*>(web_stream.extraData());
94 if (!extra_data) 94 if (!extra_data)
95 return NULL; 95 return NULL;
96 return extra_data->stream().get(); 96 return extra_data->stream().get();
97 } 97 }
98 98
99 void GetDefaultOutputDeviceParams( 99 void GetDefaultOutputDeviceParams(
100 int* output_sample_rate, int* output_buffer_size) { 100 int* output_sample_rate, int* output_buffer_size) {
101 // Fetch the default audio output hardware config. 101 // Fetch the default audio output hardware config.
102 media::AudioHardwareConfig* hardware_config = 102 media::AudioHardwareConfig* hardware_config =
103 RenderThreadImpl::current()->GetAudioHardwareConfig(); 103 RenderThreadImpl::current()->GetAudioHardwareConfig();
104 *output_sample_rate = hardware_config->GetOutputSampleRate(); 104 *output_sample_rate = hardware_config->GetOutputSampleRate();
105 *output_buffer_size = hardware_config->GetOutputBufferSize(); 105 *output_buffer_size = hardware_config->GetOutputBufferSize();
106 } 106 }
107 107
108 void RemoveSource(const WebKit::WebMediaStreamSource& source, 108 void RemoveSource(const blink::WebMediaStreamSource& source,
109 std::vector<WebKit::WebMediaStreamSource>* sources) { 109 std::vector<blink::WebMediaStreamSource>* sources) {
110 for (std::vector<WebKit::WebMediaStreamSource>::iterator it = 110 for (std::vector<blink::WebMediaStreamSource>::iterator it =
111 sources->begin(); 111 sources->begin();
112 it != sources->end(); ++it) { 112 it != sources->end(); ++it) {
113 if (source.id() == it->id()) { 113 if (source.id() == it->id()) {
114 sources->erase(it); 114 sources->erase(it);
115 return; 115 return;
116 } 116 }
117 } 117 }
118 } 118 }
119 119
120 } // namespace 120 } // namespace
121 121
122 MediaStreamImpl::MediaStreamImpl( 122 MediaStreamImpl::MediaStreamImpl(
123 RenderView* render_view, 123 RenderView* render_view,
124 MediaStreamDispatcher* media_stream_dispatcher, 124 MediaStreamDispatcher* media_stream_dispatcher,
125 MediaStreamDependencyFactory* dependency_factory) 125 MediaStreamDependencyFactory* dependency_factory)
126 : RenderViewObserver(render_view), 126 : RenderViewObserver(render_view),
127 dependency_factory_(dependency_factory), 127 dependency_factory_(dependency_factory),
128 media_stream_dispatcher_(media_stream_dispatcher) { 128 media_stream_dispatcher_(media_stream_dispatcher) {
129 } 129 }
130 130
131 MediaStreamImpl::~MediaStreamImpl() { 131 MediaStreamImpl::~MediaStreamImpl() {
132 } 132 }
133 133
134 void MediaStreamImpl::requestUserMedia( 134 void MediaStreamImpl::requestUserMedia(
135 const WebKit::WebUserMediaRequest& user_media_request) { 135 const blink::WebUserMediaRequest& user_media_request) {
136 // Save histogram data so we can see how much GetUserMedia is used. 136 // Save histogram data so we can see how much GetUserMedia is used.
137 // The histogram counts the number of calls to the JS API 137 // The histogram counts the number of calls to the JS API
138 // webGetUserMedia. 138 // webGetUserMedia.
139 UpdateWebRTCMethodCount(WEBKIT_GET_USER_MEDIA); 139 UpdateWebRTCMethodCount(WEBKIT_GET_USER_MEDIA);
140 DCHECK(CalledOnValidThread()); 140 DCHECK(CalledOnValidThread());
141 int request_id = g_next_request_id++; 141 int request_id = g_next_request_id++;
142 StreamOptions options(MEDIA_NO_SERVICE, MEDIA_NO_SERVICE); 142 StreamOptions options(MEDIA_NO_SERVICE, MEDIA_NO_SERVICE);
143 WebKit::WebFrame* frame = NULL; 143 blink::WebFrame* frame = NULL;
144 GURL security_origin; 144 GURL security_origin;
145 bool enable_automatic_output_device_selection = false; 145 bool enable_automatic_output_device_selection = false;
146 146
147 // |user_media_request| can't be mocked. So in order to test at all we check 147 // |user_media_request| can't be mocked. So in order to test at all we check
148 // if it isNull. 148 // if it isNull.
149 if (user_media_request.isNull()) { 149 if (user_media_request.isNull()) {
150 // We are in a test. 150 // We are in a test.
151 options.audio_type = MEDIA_DEVICE_AUDIO_CAPTURE; 151 options.audio_type = MEDIA_DEVICE_AUDIO_CAPTURE;
152 options.video_type = MEDIA_DEVICE_VIDEO_CAPTURE; 152 options.video_type = MEDIA_DEVICE_VIDEO_CAPTURE;
153 } else { 153 } else {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 enable_automatic_output_device_selection)); 193 enable_automatic_output_device_selection));
194 194
195 media_stream_dispatcher_->GenerateStream( 195 media_stream_dispatcher_->GenerateStream(
196 request_id, 196 request_id,
197 AsWeakPtr(), 197 AsWeakPtr(),
198 options, 198 options,
199 security_origin); 199 security_origin);
200 } 200 }
201 201
202 void MediaStreamImpl::cancelUserMediaRequest( 202 void MediaStreamImpl::cancelUserMediaRequest(
203 const WebKit::WebUserMediaRequest& user_media_request) { 203 const blink::WebUserMediaRequest& user_media_request) {
204 DCHECK(CalledOnValidThread()); 204 DCHECK(CalledOnValidThread());
205 UserMediaRequestInfo* request = FindUserMediaRequestInfo(user_media_request); 205 UserMediaRequestInfo* request = FindUserMediaRequestInfo(user_media_request);
206 if (request) { 206 if (request) {
207 // We can't abort the stream generation process. 207 // We can't abort the stream generation process.
208 // Instead, erase the request. Once the stream is generated we will stop the 208 // Instead, erase the request. Once the stream is generated we will stop the
209 // stream if the request does not exist. 209 // stream if the request does not exist.
210 DeleteUserMediaRequestInfo(request); 210 DeleteUserMediaRequestInfo(request);
211 } 211 }
212 } 212 }
213 213
214 WebKit::WebMediaStream MediaStreamImpl::GetMediaStream( 214 blink::WebMediaStream MediaStreamImpl::GetMediaStream(
215 const GURL& url) { 215 const GURL& url) {
216 return WebKit::WebMediaStreamRegistry::lookupMediaStreamDescriptor(url); 216 return blink::WebMediaStreamRegistry::lookupMediaStreamDescriptor(url);
217 } 217 }
218 218
219 bool MediaStreamImpl::IsMediaStream(const GURL& url) { 219 bool MediaStreamImpl::IsMediaStream(const GURL& url) {
220 WebKit::WebMediaStream web_stream( 220 blink::WebMediaStream web_stream(
221 WebKit::WebMediaStreamRegistry::lookupMediaStreamDescriptor(url)); 221 blink::WebMediaStreamRegistry::lookupMediaStreamDescriptor(url));
222 222
223 if (web_stream.isNull() || !web_stream.extraData()) 223 if (web_stream.isNull() || !web_stream.extraData())
224 return false; // This is not a valid stream. 224 return false; // This is not a valid stream.
225 225
226 webrtc::MediaStreamInterface* stream = GetNativeMediaStream(web_stream); 226 webrtc::MediaStreamInterface* stream = GetNativeMediaStream(web_stream);
227 return (stream && 227 return (stream &&
228 (!stream->GetVideoTracks().empty() || !stream->GetAudioTracks().empty())); 228 (!stream->GetVideoTracks().empty() || !stream->GetAudioTracks().empty()));
229 } 229 }
230 230
231 scoped_refptr<VideoFrameProvider> 231 scoped_refptr<VideoFrameProvider>
232 MediaStreamImpl::GetVideoFrameProvider( 232 MediaStreamImpl::GetVideoFrameProvider(
233 const GURL& url, 233 const GURL& url,
234 const base::Closure& error_cb, 234 const base::Closure& error_cb,
235 const VideoFrameProvider::RepaintCB& repaint_cb) { 235 const VideoFrameProvider::RepaintCB& repaint_cb) {
236 DCHECK(CalledOnValidThread()); 236 DCHECK(CalledOnValidThread());
237 WebKit::WebMediaStream web_stream(GetMediaStream(url)); 237 blink::WebMediaStream web_stream(GetMediaStream(url));
238 238
239 if (web_stream.isNull() || !web_stream.extraData()) 239 if (web_stream.isNull() || !web_stream.extraData())
240 return NULL; // This is not a valid stream. 240 return NULL; // This is not a valid stream.
241 241
242 DVLOG(1) << "MediaStreamImpl::GetVideoFrameProvider stream:" 242 DVLOG(1) << "MediaStreamImpl::GetVideoFrameProvider stream:"
243 << UTF16ToUTF8(web_stream.id()); 243 << UTF16ToUTF8(web_stream.id());
244 244
245 webrtc::MediaStreamInterface* stream = GetNativeMediaStream(web_stream); 245 webrtc::MediaStreamInterface* stream = GetNativeMediaStream(web_stream);
246 if (stream) 246 if (stream)
247 return CreateVideoFrameProvider(stream, error_cb, repaint_cb); 247 return CreateVideoFrameProvider(stream, error_cb, repaint_cb);
248 NOTREACHED(); 248 NOTREACHED();
249 return NULL; 249 return NULL;
250 } 250 }
251 251
252 scoped_refptr<MediaStreamAudioRenderer> 252 scoped_refptr<MediaStreamAudioRenderer>
253 MediaStreamImpl::GetAudioRenderer(const GURL& url) { 253 MediaStreamImpl::GetAudioRenderer(const GURL& url) {
254 DCHECK(CalledOnValidThread()); 254 DCHECK(CalledOnValidThread());
255 WebKit::WebMediaStream web_stream(GetMediaStream(url)); 255 blink::WebMediaStream web_stream(GetMediaStream(url));
256 256
257 if (web_stream.isNull() || !web_stream.extraData()) 257 if (web_stream.isNull() || !web_stream.extraData())
258 return NULL; // This is not a valid stream. 258 return NULL; // This is not a valid stream.
259 259
260 DVLOG(1) << "MediaStreamImpl::GetAudioRenderer stream:" 260 DVLOG(1) << "MediaStreamImpl::GetAudioRenderer stream:"
261 << UTF16ToUTF8(web_stream.id()); 261 << UTF16ToUTF8(web_stream.id());
262 262
263 MediaStreamExtraData* extra_data = 263 MediaStreamExtraData* extra_data =
264 static_cast<MediaStreamExtraData*>(web_stream.extraData()); 264 static_cast<MediaStreamExtraData*>(web_stream.extraData());
265 265
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 device_it != video_array.end(); ++device_it) { 313 device_it != video_array.end(); ++device_it) {
314 if (!FindLocalSource(*device_it)) 314 if (!FindLocalSource(*device_it))
315 media_stream_dispatcher_->StopStreamDevice(*device_it); 315 media_stream_dispatcher_->StopStreamDevice(*device_it);
316 } 316 }
317 317
318 DVLOG(1) << "Request ID not found"; 318 DVLOG(1) << "Request ID not found";
319 return; 319 return;
320 } 320 }
321 request_info->generated = true; 321 request_info->generated = true;
322 322
323 WebKit::WebVector<WebKit::WebMediaStreamSource> audio_source_vector( 323 blink::WebVector<blink::WebMediaStreamSource> audio_source_vector(
324 audio_array.size()); 324 audio_array.size());
325 325
326 StreamDeviceInfoArray overridden_audio_array = audio_array; 326 StreamDeviceInfoArray overridden_audio_array = audio_array;
327 if (!request_info->enable_automatic_output_device_selection) { 327 if (!request_info->enable_automatic_output_device_selection) {
328 // If the GetUserMedia request did not explicitly set the constraint 328 // If the GetUserMedia request did not explicitly set the constraint
329 // kMediaStreamRenderToAssociatedSink, the output device parameters must 329 // kMediaStreamRenderToAssociatedSink, the output device parameters must
330 // be removed. 330 // be removed.
331 for (StreamDeviceInfoArray::iterator it = overridden_audio_array.begin(); 331 for (StreamDeviceInfoArray::iterator it = overridden_audio_array.begin();
332 it != overridden_audio_array.end(); ++it) { 332 it != overridden_audio_array.end(); ++it) {
333 it->device.matched_output_device_id = ""; 333 it->device.matched_output_device_id = "";
334 it->device.matched_output = MediaStreamDevice::AudioDeviceParameters(); 334 it->device.matched_output = MediaStreamDevice::AudioDeviceParameters();
335 } 335 }
336 } 336 }
337 CreateWebKitSourceVector(label, overridden_audio_array, 337 CreateWebKitSourceVector(label, overridden_audio_array,
338 WebKit::WebMediaStreamSource::TypeAudio, 338 blink::WebMediaStreamSource::TypeAudio,
339 request_info->frame, 339 request_info->frame,
340 audio_source_vector); 340 audio_source_vector);
341 341
342 WebKit::WebVector<WebKit::WebMediaStreamSource> video_source_vector( 342 blink::WebVector<blink::WebMediaStreamSource> video_source_vector(
343 video_array.size()); 343 video_array.size());
344 CreateWebKitSourceVector(label, video_array, 344 CreateWebKitSourceVector(label, video_array,
345 WebKit::WebMediaStreamSource::TypeVideo, 345 blink::WebMediaStreamSource::TypeVideo,
346 request_info->frame, 346 request_info->frame,
347 video_source_vector); 347 video_source_vector);
348 WebKit::WebUserMediaRequest* request = &(request_info->request); 348 blink::WebUserMediaRequest* request = &(request_info->request);
349 WebKit::WebString webkit_id = UTF8ToUTF16(label); 349 blink::WebString webkit_id = UTF8ToUTF16(label);
350 WebKit::WebMediaStream* web_stream = &(request_info->web_stream); 350 blink::WebMediaStream* web_stream = &(request_info->web_stream);
351 351
352 WebKit::WebVector<WebKit::WebMediaStreamTrack> audio_track_vector( 352 blink::WebVector<blink::WebMediaStreamTrack> audio_track_vector(
353 audio_array.size()); 353 audio_array.size());
354 for (size_t i = 0; i < audio_track_vector.size(); ++i) { 354 for (size_t i = 0; i < audio_track_vector.size(); ++i) {
355 audio_track_vector[i].initialize(audio_source_vector[i]); 355 audio_track_vector[i].initialize(audio_source_vector[i]);
356 request_info->sources.push_back(audio_source_vector[i]); 356 request_info->sources.push_back(audio_source_vector[i]);
357 } 357 }
358 358
359 WebKit::WebVector<WebKit::WebMediaStreamTrack> video_track_vector( 359 blink::WebVector<blink::WebMediaStreamTrack> video_track_vector(
360 video_array.size()); 360 video_array.size());
361 for (size_t i = 0; i < video_track_vector.size(); ++i) { 361 for (size_t i = 0; i < video_track_vector.size(); ++i) {
362 video_track_vector[i].initialize(video_source_vector[i]); 362 video_track_vector[i].initialize(video_source_vector[i]);
363 request_info->sources.push_back(video_source_vector[i]); 363 request_info->sources.push_back(video_source_vector[i]);
364 } 364 }
365 365
366 web_stream->initialize(webkit_id, audio_track_vector, 366 web_stream->initialize(webkit_id, audio_track_vector,
367 video_track_vector); 367 video_track_vector);
368 368
369 // WebUserMediaRequest don't have an implementation in unit tests. 369 // WebUserMediaRequest don't have an implementation in unit tests.
370 // Therefore we need to check for isNull here. 370 // Therefore we need to check for isNull here.
371 WebKit::WebMediaConstraints audio_constraints = request->isNull() ? 371 blink::WebMediaConstraints audio_constraints = request->isNull() ?
372 WebKit::WebMediaConstraints() : request->audioConstraints(); 372 blink::WebMediaConstraints() : request->audioConstraints();
373 WebKit::WebMediaConstraints video_constraints = request->isNull() ? 373 blink::WebMediaConstraints video_constraints = request->isNull() ?
374 WebKit::WebMediaConstraints() : request->videoConstraints(); 374 blink::WebMediaConstraints() : request->videoConstraints();
375 375
376 dependency_factory_->CreateNativeMediaSources( 376 dependency_factory_->CreateNativeMediaSources(
377 RenderViewObserver::routing_id(), 377 RenderViewObserver::routing_id(),
378 audio_constraints, video_constraints, web_stream, 378 audio_constraints, video_constraints, web_stream,
379 base::Bind(&MediaStreamImpl::OnCreateNativeSourcesComplete, AsWeakPtr())); 379 base::Bind(&MediaStreamImpl::OnCreateNativeSourcesComplete, AsWeakPtr()));
380 } 380 }
381 381
382 // Callback from MediaStreamDispatcher. 382 // Callback from MediaStreamDispatcher.
383 // The requested stream failed to be generated. 383 // The requested stream failed to be generated.
384 void MediaStreamImpl::OnStreamGenerationFailed(int request_id) { 384 void MediaStreamImpl::OnStreamGenerationFailed(int request_id) {
(...skipping 22 matching lines...) Expand all
407 UserMediaRequestInfo* user_media_request = FindUserMediaRequestInfo(label); 407 UserMediaRequestInfo* user_media_request = FindUserMediaRequestInfo(label);
408 if (user_media_request) { 408 if (user_media_request) {
409 DeleteUserMediaRequestInfo(user_media_request); 409 DeleteUserMediaRequestInfo(user_media_request);
410 } 410 }
411 StopUnreferencedSources(false); 411 StopUnreferencedSources(false);
412 } 412 }
413 413
414 void MediaStreamImpl::CreateWebKitSourceVector( 414 void MediaStreamImpl::CreateWebKitSourceVector(
415 const std::string& label, 415 const std::string& label,
416 const StreamDeviceInfoArray& devices, 416 const StreamDeviceInfoArray& devices,
417 WebKit::WebMediaStreamSource::Type type, 417 blink::WebMediaStreamSource::Type type,
418 WebKit::WebFrame* frame, 418 blink::WebFrame* frame,
419 WebKit::WebVector<WebKit::WebMediaStreamSource>& webkit_sources) { 419 blink::WebVector<blink::WebMediaStreamSource>& webkit_sources) {
420 CHECK_EQ(devices.size(), webkit_sources.size()); 420 CHECK_EQ(devices.size(), webkit_sources.size());
421 for (size_t i = 0; i < devices.size(); ++i) { 421 for (size_t i = 0; i < devices.size(); ++i) {
422 const char* track_type = 422 const char* track_type =
423 (type == WebKit::WebMediaStreamSource::TypeAudio) ? "a" : "v"; 423 (type == blink::WebMediaStreamSource::TypeAudio) ? "a" : "v";
424 std::string source_id = base::StringPrintf("%s%s%u", label.c_str(), 424 std::string source_id = base::StringPrintf("%s%s%u", label.c_str(),
425 track_type, 425 track_type,
426 static_cast<unsigned int>(i)); 426 static_cast<unsigned int>(i));
427 427
428 const WebKit::WebMediaStreamSource* existing_source = 428 const blink::WebMediaStreamSource* existing_source =
429 FindLocalSource(devices[i]); 429 FindLocalSource(devices[i]);
430 if (existing_source) { 430 if (existing_source) {
431 webkit_sources[i] = *existing_source; 431 webkit_sources[i] = *existing_source;
432 DVLOG(1) << "Source already exist. Reusing source with id " 432 DVLOG(1) << "Source already exist. Reusing source with id "
433 << webkit_sources[i]. id().utf8(); 433 << webkit_sources[i]. id().utf8();
434 continue; 434 continue;
435 } 435 }
436 webkit_sources[i].initialize( 436 webkit_sources[i].initialize(
437 UTF8ToUTF16(source_id), 437 UTF8ToUTF16(source_id),
438 type, 438 type,
439 UTF8ToUTF16(devices[i].device.name)); 439 UTF8ToUTF16(devices[i].device.name));
440 MediaStreamSourceExtraData* source_extra_data( 440 MediaStreamSourceExtraData* source_extra_data(
441 new content::MediaStreamSourceExtraData( 441 new content::MediaStreamSourceExtraData(
442 devices[i], 442 devices[i],
443 base::Bind(&MediaStreamImpl::OnLocalSourceStop, AsWeakPtr()))); 443 base::Bind(&MediaStreamImpl::OnLocalSourceStop, AsWeakPtr())));
444 // |source_extra_data| is owned by webkit_sources[i]. 444 // |source_extra_data| is owned by webkit_sources[i].
445 webkit_sources[i].setExtraData(source_extra_data); 445 webkit_sources[i].setExtraData(source_extra_data);
446 webkit_sources[i].setDeviceId(UTF8ToUTF16( 446 webkit_sources[i].setDeviceId(UTF8ToUTF16(
447 base::IntToString(devices[i].session_id))); 447 base::IntToString(devices[i].session_id)));
448 local_sources_.push_back(LocalStreamSource(frame, webkit_sources[i])); 448 local_sources_.push_back(LocalStreamSource(frame, webkit_sources[i]));
449 } 449 }
450 } 450 }
451 451
452 // Callback from MediaStreamDependencyFactory when the sources in |web_stream| 452 // Callback from MediaStreamDependencyFactory when the sources in |web_stream|
453 // have been generated. 453 // have been generated.
454 void MediaStreamImpl::OnCreateNativeSourcesComplete( 454 void MediaStreamImpl::OnCreateNativeSourcesComplete(
455 WebKit::WebMediaStream* web_stream, 455 blink::WebMediaStream* web_stream,
456 bool request_succeeded) { 456 bool request_succeeded) {
457 UserMediaRequestInfo* request_info = FindUserMediaRequestInfo(web_stream); 457 UserMediaRequestInfo* request_info = FindUserMediaRequestInfo(web_stream);
458 if (!request_info) { 458 if (!request_info) {
459 // This can happen if the request is canceled or the frame reloads while 459 // This can happen if the request is canceled or the frame reloads while
460 // MediaStreamDependencyFactory is creating the sources. 460 // MediaStreamDependencyFactory is creating the sources.
461 DVLOG(1) << "Request ID not found"; 461 DVLOG(1) << "Request ID not found";
462 return; 462 return;
463 } 463 }
464 464
465 // Create a native representation of the stream. 465 // Create a native representation of the stream.
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 NOTIMPLEMENTED(); 504 NOTIMPLEMENTED();
505 } 505 }
506 506
507 void MediaStreamImpl::OnDeviceOpenFailed(int request_id) { 507 void MediaStreamImpl::OnDeviceOpenFailed(int request_id) {
508 DVLOG(1) << "MediaStreamImpl::VideoDeviceOpenFailed(" 508 DVLOG(1) << "MediaStreamImpl::VideoDeviceOpenFailed("
509 << request_id << ")"; 509 << request_id << ")";
510 NOTIMPLEMENTED(); 510 NOTIMPLEMENTED();
511 } 511 }
512 512
513 void MediaStreamImpl::CompleteGetUserMediaRequest( 513 void MediaStreamImpl::CompleteGetUserMediaRequest(
514 const WebKit::WebMediaStream& stream, 514 const blink::WebMediaStream& stream,
515 WebKit::WebUserMediaRequest* request_info, 515 blink::WebUserMediaRequest* request_info,
516 bool request_succeeded) { 516 bool request_succeeded) {
517 if (request_succeeded) { 517 if (request_succeeded) {
518 request_info->requestSucceeded(stream); 518 request_info->requestSucceeded(stream);
519 } else { 519 } else {
520 request_info->requestFailed(); 520 request_info->requestFailed();
521 } 521 }
522 } 522 }
523 523
524 const WebKit::WebMediaStreamSource* MediaStreamImpl::FindLocalSource( 524 const blink::WebMediaStreamSource* MediaStreamImpl::FindLocalSource(
525 const StreamDeviceInfo& device) const { 525 const StreamDeviceInfo& device) const {
526 for (LocalStreamSources::const_iterator it = local_sources_.begin(); 526 for (LocalStreamSources::const_iterator it = local_sources_.begin();
527 it != local_sources_.end(); ++it) { 527 it != local_sources_.end(); ++it) {
528 MediaStreamSourceExtraData* extra_data = 528 MediaStreamSourceExtraData* extra_data =
529 static_cast<MediaStreamSourceExtraData*>( 529 static_cast<MediaStreamSourceExtraData*>(
530 it->source.extraData()); 530 it->source.extraData());
531 const StreamDeviceInfo& active_device = extra_data->device_info(); 531 const StreamDeviceInfo& active_device = extra_data->device_info();
532 if (active_device.device.id == device.device.id && 532 if (active_device.device.id == device.device.id &&
533 active_device.session_id == device.session_id) { 533 active_device.session_id == device.session_id) {
534 return &it->source; 534 return &it->source;
535 } 535 }
536 } 536 }
537 return NULL; 537 return NULL;
538 } 538 }
539 539
540 bool MediaStreamImpl::FindSourceInRequests( 540 bool MediaStreamImpl::FindSourceInRequests(
541 const WebKit::WebMediaStreamSource& source) const { 541 const blink::WebMediaStreamSource& source) const {
542 for (UserMediaRequests::const_iterator req_it = user_media_requests_.begin(); 542 for (UserMediaRequests::const_iterator req_it = user_media_requests_.begin();
543 req_it != user_media_requests_.end(); ++req_it) { 543 req_it != user_media_requests_.end(); ++req_it) {
544 const std::vector<WebKit::WebMediaStreamSource>& sources = 544 const std::vector<blink::WebMediaStreamSource>& sources =
545 (*req_it)->sources; 545 (*req_it)->sources;
546 for (std::vector<WebKit::WebMediaStreamSource>::const_iterator source_it = 546 for (std::vector<blink::WebMediaStreamSource>::const_iterator source_it =
547 sources.begin(); 547 sources.begin();
548 source_it != sources.end(); ++source_it) { 548 source_it != sources.end(); ++source_it) {
549 if (source_it->id() == source.id()) { 549 if (source_it->id() == source.id()) {
550 return true; 550 return true;
551 } 551 }
552 } 552 }
553 } 553 }
554 return false; 554 return false;
555 } 555 }
556 556
557 MediaStreamImpl::UserMediaRequestInfo* 557 MediaStreamImpl::UserMediaRequestInfo*
558 MediaStreamImpl::FindUserMediaRequestInfo(int request_id) { 558 MediaStreamImpl::FindUserMediaRequestInfo(int request_id) {
559 UserMediaRequests::iterator it = user_media_requests_.begin(); 559 UserMediaRequests::iterator it = user_media_requests_.begin();
560 for (; it != user_media_requests_.end(); ++it) { 560 for (; it != user_media_requests_.end(); ++it) {
561 if ((*it)->request_id == request_id) 561 if ((*it)->request_id == request_id)
562 return (*it); 562 return (*it);
563 } 563 }
564 return NULL; 564 return NULL;
565 } 565 }
566 566
567 MediaStreamImpl::UserMediaRequestInfo* 567 MediaStreamImpl::UserMediaRequestInfo*
568 MediaStreamImpl::FindUserMediaRequestInfo( 568 MediaStreamImpl::FindUserMediaRequestInfo(
569 const WebKit::WebUserMediaRequest& request) { 569 const blink::WebUserMediaRequest& request) {
570 UserMediaRequests::iterator it = user_media_requests_.begin(); 570 UserMediaRequests::iterator it = user_media_requests_.begin();
571 for (; it != user_media_requests_.end(); ++it) { 571 for (; it != user_media_requests_.end(); ++it) {
572 if ((*it)->request == request) 572 if ((*it)->request == request)
573 return (*it); 573 return (*it);
574 } 574 }
575 return NULL; 575 return NULL;
576 } 576 }
577 577
578 MediaStreamImpl::UserMediaRequestInfo* 578 MediaStreamImpl::UserMediaRequestInfo*
579 MediaStreamImpl::FindUserMediaRequestInfo(const std::string& label) { 579 MediaStreamImpl::FindUserMediaRequestInfo(const std::string& label) {
580 UserMediaRequests::iterator it = user_media_requests_.begin(); 580 UserMediaRequests::iterator it = user_media_requests_.begin();
581 for (; it != user_media_requests_.end(); ++it) { 581 for (; it != user_media_requests_.end(); ++it) {
582 if ((*it)->generated && (*it)->web_stream.id() == UTF8ToUTF16(label)) 582 if ((*it)->generated && (*it)->web_stream.id() == UTF8ToUTF16(label))
583 return (*it); 583 return (*it);
584 } 584 }
585 return NULL; 585 return NULL;
586 } 586 }
587 587
588 MediaStreamImpl::UserMediaRequestInfo* 588 MediaStreamImpl::UserMediaRequestInfo*
589 MediaStreamImpl::FindUserMediaRequestInfo( 589 MediaStreamImpl::FindUserMediaRequestInfo(
590 WebKit::WebMediaStream* web_stream) { 590 blink::WebMediaStream* web_stream) {
591 UserMediaRequests::iterator it = user_media_requests_.begin(); 591 UserMediaRequests::iterator it = user_media_requests_.begin();
592 for (; it != user_media_requests_.end(); ++it) { 592 for (; it != user_media_requests_.end(); ++it) {
593 if (&((*it)->web_stream) == web_stream) 593 if (&((*it)->web_stream) == web_stream)
594 return (*it); 594 return (*it);
595 } 595 }
596 return NULL; 596 return NULL;
597 } 597 }
598 598
599 void MediaStreamImpl::DeleteUserMediaRequestInfo( 599 void MediaStreamImpl::DeleteUserMediaRequestInfo(
600 UserMediaRequestInfo* request) { 600 UserMediaRequestInfo* request) {
601 UserMediaRequests::iterator it = user_media_requests_.begin(); 601 UserMediaRequests::iterator it = user_media_requests_.begin();
602 for (; it != user_media_requests_.end(); ++it) { 602 for (; it != user_media_requests_.end(); ++it) {
603 if ((*it) == request) { 603 if ((*it) == request) {
604 user_media_requests_.erase(it); 604 user_media_requests_.erase(it);
605 return; 605 return;
606 } 606 }
607 } 607 }
608 NOTREACHED(); 608 NOTREACHED();
609 } 609 }
610 610
611 void MediaStreamImpl::FrameDetached(WebKit::WebFrame* frame) { 611 void MediaStreamImpl::FrameDetached(blink::WebFrame* frame) {
612 // Do same thing as FrameWillClose. 612 // Do same thing as FrameWillClose.
613 FrameWillClose(frame); 613 FrameWillClose(frame);
614 } 614 }
615 615
616 void MediaStreamImpl::FrameWillClose(WebKit::WebFrame* frame) { 616 void MediaStreamImpl::FrameWillClose(blink::WebFrame* frame) {
617 // Loop through all UserMediaRequests and find the requests that belong to the 617 // Loop through all UserMediaRequests and find the requests that belong to the
618 // frame that is being closed. 618 // frame that is being closed.
619 UserMediaRequests::iterator request_it = user_media_requests_.begin(); 619 UserMediaRequests::iterator request_it = user_media_requests_.begin();
620 while (request_it != user_media_requests_.end()) { 620 while (request_it != user_media_requests_.end()) {
621 if ((*request_it)->frame == frame) { 621 if ((*request_it)->frame == frame) {
622 DVLOG(1) << "MediaStreamImpl::FrameWillClose: " 622 DVLOG(1) << "MediaStreamImpl::FrameWillClose: "
623 << "Cancel user media request " << (*request_it)->request_id; 623 << "Cancel user media request " << (*request_it)->request_id;
624 // If the request is not generated, it means that a request 624 // If the request is not generated, it means that a request
625 // has been sent to the MediaStreamDispatcher to generate a stream 625 // has been sent to the MediaStreamDispatcher to generate a stream
626 // but MediaStreamDispatcher has not yet responded and we need to cancel 626 // but MediaStreamDispatcher has not yet responded and we need to cancel
(...skipping 26 matching lines...) Expand all
653 DVLOG(1) << "MediaStreamImpl::OnLocalMediaStreamStop(" << label << ")"; 653 DVLOG(1) << "MediaStreamImpl::OnLocalMediaStreamStop(" << label << ")";
654 654
655 UserMediaRequestInfo* user_media_request = FindUserMediaRequestInfo(label); 655 UserMediaRequestInfo* user_media_request = FindUserMediaRequestInfo(label);
656 if (user_media_request) { 656 if (user_media_request) {
657 DeleteUserMediaRequestInfo(user_media_request); 657 DeleteUserMediaRequestInfo(user_media_request);
658 } 658 }
659 StopUnreferencedSources(true); 659 StopUnreferencedSources(true);
660 } 660 }
661 661
662 void MediaStreamImpl::OnLocalSourceStop( 662 void MediaStreamImpl::OnLocalSourceStop(
663 const WebKit::WebMediaStreamSource& source) { 663 const blink::WebMediaStreamSource& source) {
664 DCHECK(CalledOnValidThread()); 664 DCHECK(CalledOnValidThread());
665 665
666 StopLocalSource(source, true); 666 StopLocalSource(source, true);
667 667
668 bool device_found = false; 668 bool device_found = false;
669 for (LocalStreamSources::iterator device_it = local_sources_.begin(); 669 for (LocalStreamSources::iterator device_it = local_sources_.begin();
670 device_it != local_sources_.end(); ++device_it) { 670 device_it != local_sources_.end(); ++device_it) {
671 if (device_it->source.id() == source.id()) { 671 if (device_it->source.id() == source.id()) {
672 device_found = true; 672 device_found = true;
673 local_sources_.erase(device_it); 673 local_sources_.erase(device_it);
(...skipping 10 matching lines...) Expand all
684 RemoveSource(source, &(*it)->sources); 684 RemoveSource(source, &(*it)->sources);
685 if ((*it)->sources.empty()) { 685 if ((*it)->sources.empty()) {
686 it = user_media_requests_.erase(it); 686 it = user_media_requests_.erase(it);
687 } else { 687 } else {
688 ++it; 688 ++it;
689 } 689 }
690 } 690 }
691 } 691 }
692 692
693 void MediaStreamImpl::StopLocalSource( 693 void MediaStreamImpl::StopLocalSource(
694 const WebKit::WebMediaStreamSource& source, 694 const blink::WebMediaStreamSource& source,
695 bool notify_dispatcher) { 695 bool notify_dispatcher) {
696 MediaStreamSourceExtraData* extra_data = 696 MediaStreamSourceExtraData* extra_data =
697 static_cast<MediaStreamSourceExtraData*> (source.extraData()); 697 static_cast<MediaStreamSourceExtraData*> (source.extraData());
698 CHECK(extra_data); 698 CHECK(extra_data);
699 DVLOG(1) << "MediaStreamImpl::StopLocalSource(" 699 DVLOG(1) << "MediaStreamImpl::StopLocalSource("
700 << "{device_id = " << extra_data->device_info().device.id << "})"; 700 << "{device_id = " << extra_data->device_info().device.id << "})";
701 701
702 if (source.type() == WebKit::WebMediaStreamSource::TypeAudio) { 702 if (source.type() == blink::WebMediaStreamSource::TypeAudio) {
703 if (extra_data->GetAudioCapturer()) { 703 if (extra_data->GetAudioCapturer()) {
704 extra_data->GetAudioCapturer()->Stop(); 704 extra_data->GetAudioCapturer()->Stop();
705 } 705 }
706 } 706 }
707 707
708 if (notify_dispatcher) 708 if (notify_dispatcher)
709 media_stream_dispatcher_->StopStreamDevice(extra_data->device_info()); 709 media_stream_dispatcher_->StopStreamDevice(extra_data->device_info());
710 710
711 WebKit::WebMediaStreamSource writable_source(source); 711 blink::WebMediaStreamSource writable_source(source);
712 writable_source.setReadyState( 712 writable_source.setReadyState(
713 WebKit::WebMediaStreamSource::ReadyStateEnded); 713 blink::WebMediaStreamSource::ReadyStateEnded);
714 writable_source.setExtraData(NULL); 714 writable_source.setExtraData(NULL);
715 } 715 }
716 716
717 void MediaStreamImpl::StopUnreferencedSources(bool notify_dispatcher) { 717 void MediaStreamImpl::StopUnreferencedSources(bool notify_dispatcher) {
718 LocalStreamSources::iterator source_it = local_sources_.begin(); 718 LocalStreamSources::iterator source_it = local_sources_.begin();
719 while (source_it != local_sources_.end()) { 719 while (source_it != local_sources_.end()) {
720 if (!FindSourceInRequests(source_it->source)) { 720 if (!FindSourceInRequests(source_it->source)) {
721 StopLocalSource(source_it->source, notify_dispatcher); 721 StopLocalSource(source_it->source, notify_dispatcher);
722 source_it = local_sources_.erase(source_it); 722 source_it = local_sources_.erase(source_it);
723 } else { 723 } else {
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
848 stream_stop_callback_ = stop_callback; 848 stream_stop_callback_ = stop_callback;
849 } 849 }
850 850
851 void MediaStreamExtraData::OnLocalStreamStop() { 851 void MediaStreamExtraData::OnLocalStreamStop() {
852 if (!stream_stop_callback_.is_null()) 852 if (!stream_stop_callback_.is_null())
853 stream_stop_callback_.Run(stream_->label()); 853 stream_stop_callback_.Run(stream_->label());
854 } 854 }
855 855
856 MediaStreamImpl::UserMediaRequestInfo::UserMediaRequestInfo( 856 MediaStreamImpl::UserMediaRequestInfo::UserMediaRequestInfo(
857 int request_id, 857 int request_id,
858 WebKit::WebFrame* frame, 858 blink::WebFrame* frame,
859 const WebKit::WebUserMediaRequest& request, 859 const blink::WebUserMediaRequest& request,
860 bool enable_automatic_output_device_selection) 860 bool enable_automatic_output_device_selection)
861 : request_id(request_id), 861 : request_id(request_id),
862 generated(false), 862 generated(false),
863 enable_automatic_output_device_selection( 863 enable_automatic_output_device_selection(
864 enable_automatic_output_device_selection), 864 enable_automatic_output_device_selection),
865 frame(frame), 865 frame(frame),
866 request(request) { 866 request(request) {
867 } 867 }
868 868
869 MediaStreamImpl::UserMediaRequestInfo::~UserMediaRequestInfo() { 869 MediaStreamImpl::UserMediaRequestInfo::~UserMediaRequestInfo() {
870 } 870 }
871 871
872 } // namespace content 872 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/media_stream_impl.h ('k') | content/renderer/media/media_stream_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698