Changeset 233425 in webkit
- Timestamp:
- Jul 2, 2018 10:29:03 AM (6 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r233414 r233425 1 2018-07-02 Youenn Fablet <youenn@apple.com> 2 3 Reject getUserMedia promise if capture fails 4 https://bugs.webkit.org/show_bug.cgi?id=187190 5 6 Reviewed by Eric Carlson. 7 8 In case PendingActivationMediaStream is notified of a change, 9 Check whether any track failed to capture. 10 If so, reject the promise. 11 Add more release logging in error case. 12 13 Covered by manual testing. 14 15 * Modules/mediastream/UserMediaRequest.cpp: 16 (WebCore::UserMediaRequest::PendingActivationMediaStream::~PendingActivationMediaStream): 17 (WebCore::UserMediaRequest::PendingActivationMediaStream::characteristicsChanged): 18 (WebCore::UserMediaRequest::mediaStreamIsReady): 19 (WebCore::UserMediaRequest::mediaStreamDidFail): 20 * Modules/mediastream/UserMediaRequest.h: 21 * platform/mediastream/MediaStreamPrivate.h: 22 * platform/mediastream/RealtimeMediaSource.cpp: 23 (WebCore::RealtimeMediaSource::captureFailed): 24 * platform/mediastream/mac/AVVideoCaptureSource.mm: 25 (WebCore::AVVideoCaptureSource::setupCaptureSession): 26 1 27 2018-07-01 Fujii Hironori <Hironori.Fujii@sony.com> 2 28 -
trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp
r233122 r233425 348 348 void UserMediaRequest::PendingActivationMediaStream::characteristicsChanged() 349 349 { 350 if (m_mediaStream->privateStream().hasVideo() || m_mediaStream->privateStream().hasAudio()) 351 m_userMediaRequest.mediaStreamIsReady(m_mediaStream.copyRef()); 350 if (!m_userMediaRequest.m_pendingActivationMediaStream) 351 return; 352 353 for (auto& track : m_mediaStream->privateStream().tracks()) { 354 if (track->source().captureDidFail()) { 355 m_userMediaRequest.mediaStreamDidFail(track->source().type()); 356 return; 357 } 358 } 359 360 if (m_mediaStream->privateStream().hasVideo() || m_mediaStream->privateStream().hasAudio()) { 361 m_userMediaRequest.mediaStreamIsReady(WTFMove(m_mediaStream)); 362 return; 363 } 352 364 } 353 365 354 366 void UserMediaRequest::mediaStreamIsReady(Ref<MediaStream>&& stream) 355 367 { 368 RELEASE_LOG(MediaStream, "UserMediaRequest::mediaStreamIsReady"); 356 369 stream->document()->setHasCaptureMediaStreamTrack(); 357 370 m_promise.resolve(WTFMove(stream)); … … 360 373 } 361 374 375 void UserMediaRequest::mediaStreamDidFail(RealtimeMediaSource::Type type) 376 { 377 RELEASE_LOG(MediaStream, "UserMediaRequest::mediaStreamDidFail"); 378 const char* typeDescription = ""; 379 switch (type) { 380 case RealtimeMediaSource::Type::Audio: 381 typeDescription = "audio"; 382 break; 383 case RealtimeMediaSource::Type::Video: 384 typeDescription = "video"; 385 break; 386 case RealtimeMediaSource::Type::None: 387 typeDescription = "unknown"; 388 break; 389 } 390 m_promise.reject(NotReadableError, makeString("Failed starting capture of a "_s, typeDescription, " track"_s)); 391 // We are in an observer iterator loop, we do not want to change the observers within this loop. 392 callOnMainThread([stream = WTFMove(m_pendingActivationMediaStream)] { }); 393 } 394 362 395 } // namespace WebCore 363 396 -
trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.h
r231979 r233425 80 80 81 81 void mediaStreamIsReady(Ref<MediaStream>&&); 82 void mediaStreamDidFail(RealtimeMediaSource::Type); 82 83 83 84 class PendingActivationMediaStream : public RefCounted<PendingActivationMediaStream>, private MediaStreamPrivate::Observer { -
trunk/Source/WebCore/platform/mediastream/MediaStreamPrivate.h
r232613 r233425 91 91 bool isProducingData() const; 92 92 93 void endStream();94 95 93 bool hasVideo() const; 96 94 bool hasAudio() const; -
trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp
r233122 r233425 37 37 #include "RealtimeMediaSource.h" 38 38 39 #include "Logging.h" 39 40 #include "MediaConstraints.h" 40 41 #include "NotImplemented.h" … … 188 189 void RealtimeMediaSource::captureFailed() 189 190 { 191 RELEASE_LOG_ERROR(MediaStream, "RealtimeMediaSource::captureFailed"); 192 190 193 m_isProducingData = false; 191 194 m_captureDidFailed = true; -
trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm
r232643 r233425 385 385 RetainPtr<AVCaptureDeviceInputType> videoIn = adoptNS([allocAVCaptureDeviceInputInstance() initWithDevice:device() error:&error]); 386 386 if (error) { 387 LOG(Media, "AVVideoCaptureSource::setupCaptureSession(%p), failed to allocate AVCaptureDeviceInput: %s", this, [[error localizedDescription] UTF8String]);387 RELEASE_LOG(Media, "AVVideoCaptureSource::setupCaptureSession(%p), failed to allocate AVCaptureDeviceInput: %s", this, [[error localizedDescription] UTF8String]); 388 388 return false; 389 389 } 390 390 391 391 if (![session() canAddInput:videoIn.get()]) { 392 LOG(Media, "AVVideoCaptureSource::setupCaptureSession(%p), unable to add video input device", this);392 RELEASE_LOG(Media, "AVVideoCaptureSource::setupCaptureSession(%p), unable to add video input device", this); 393 393 return false; 394 394 } … … 410 410 411 411 if (![session() canAddOutput:m_videoOutput.get()]) { 412 LOG(Media, "AVVideoCaptureSource::setupCaptureSession(%p), unable to add video sample buffer output delegate", this);412 RELEASE_LOG(Media, "AVVideoCaptureSource::setupCaptureSession(%p), unable to add video sample buffer output delegate", this); 413 413 return false; 414 414 }
Note: See TracChangeset
for help on using the changeset viewer.