Changeset 249651 in webkit
- Timestamp:
- Sep 9, 2019 10:52:15 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/imported/w3c/ChangeLog
r249645 r249651 1 2019-09-09 Ryan Haddad <ryanhaddad@apple.com> 2 3 Unreviewed, rolling out r249574. 4 5 Caused fast/mediastream/media-stream-track-source-failure.html 6 to become flaky. 7 8 Reverted changeset: 9 10 "Remove MediaStreamPrivate::scheduleDeferredTask" 11 https://bugs.webkit.org/show_bug.cgi?id=200975 12 https://trac.webkit.org/changeset/249574 13 1 14 2019-09-09 Rob Buis <rbuis@igalia.com> 2 15 -
trunk/LayoutTests/imported/w3c/web-platform-tests/mediacapture-streams/MediaStream-finished-add.https-expected.txt
r249574 r249651 6 6 7 7 8 PASS Tests that adding a track to an inactive MediaStream is allowed 8 FAIL Tests that adding a track to an inactive MediaStream is allowed assert_false: audio stream is inactive after stopping its only audio track expected false got true 9 9 -
trunk/Source/WebCore/ChangeLog
r249645 r249651 1 2019-09-09 Ryan Haddad <ryanhaddad@apple.com> 2 3 Unreviewed, rolling out r249574. 4 5 Caused fast/mediastream/media-stream-track-source-failure.html 6 to become flaky. 7 8 Reverted changeset: 9 10 "Remove MediaStreamPrivate::scheduleDeferredTask" 11 https://bugs.webkit.org/show_bug.cgi?id=200975 12 https://trac.webkit.org/changeset/249574 13 1 14 2019-09-09 Rob Buis <rbuis@igalia.com> 2 15 -
trunk/Source/WebCore/Modules/mediastream/MediaStream.cpp
r249574 r249651 102 102 ALWAYS_LOG(LOGIDENTIFIER); 103 103 104 setIsActive(m_private->active()); 105 m_private->addObserver(*this); 106 104 107 for (auto& trackPrivate : m_private->tracks()) { 105 108 auto track = MediaStreamTrack::create(document, *trackPrivate); … … 107 110 m_trackSet.add(track->id(), WTFMove(track)); 108 111 } 109 110 setIsActive(m_private->active());111 m_private->addObserver(*this);112 112 suspendIfNeeded(); 113 113 } -
trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp
r249574 r249651 216 216 } 217 217 218 static inline bool isMediaStreamCorrectlyStarted(const MediaStream& stream)219 {220 if (stream.getTracks().isEmpty())221 return false;222 223 return WTF::allOf(stream.getTracks(), [](auto& track) {224 return !track->source().captureDidFail();225 });226 }227 228 218 void UserMediaRequest::allow(CaptureDevice&& audioDevice, CaptureDevice&& videoDevice, String&& deviceIdentifierHashSalt, CompletionHandler<void()>&& completionHandler) 229 219 { … … 231 221 232 222 auto callback = [this, protector = makePendingActivity(*this), completionHandler = WTFMove(completionHandler)](RefPtr<MediaStreamPrivate>&& privateStream) mutable { 233 auto scopeExit = makeScopeExit([ completionHandler = WTFMove(completionHandler)]() mutable{223 auto scopeExit = makeScopeExit([&] { 234 224 completionHandler(); 235 225 }); 236 if ( isContextStopped())226 if (!m_scriptExecutionContext) 237 227 return; 238 228 … … 242 232 return; 243 233 } 244 245 auto& document = downcast<Document>(*m_scriptExecutionContext); 246 privateStream->monitorOrientation(document.orientationNotifier()); 247 248 auto stream = MediaStream::create(document, privateStream.releaseNonNull()); 249 stream->startProducingData(); 250 251 if (!isMediaStreamCorrectlyStarted(stream)) { 234 privateStream->monitorOrientation(downcast<Document>(m_scriptExecutionContext)->orientationNotifier()); 235 236 auto stream = MediaStream::create(*downcast<Document>(m_scriptExecutionContext), privateStream.releaseNonNull()); 237 if (stream->getTracks().isEmpty()) { 252 238 deny(MediaAccessDenialReason::HardwareError); 253 239 return; 254 240 } 255 241 256 ASSERT(document.isCapturing()); 257 stream->document()->setHasCaptureMediaStreamTrack(); 258 m_promise.resolve(WTFMove(stream)); 242 scopeExit.release(); 243 m_pendingActivationMediaStream = makeUnique<PendingActivationMediaStream>(WTFMove(protector), *this, WTFMove(stream), WTFMove(completionHandler)); 259 244 }; 260 245 … … 326 311 void UserMediaRequest::stop() 327 312 { 313 // Protecting 'this' since nulling m_pendingActivationMediaStream might destroy it. 314 Ref<UserMediaRequest> protectedThis(*this); 315 316 m_pendingActivationMediaStream = nullptr; 317 328 318 auto& document = downcast<Document>(*m_scriptExecutionContext); 329 319 if (auto* controller = UserMediaController::from(document.page())) … … 344 334 { 345 335 return downcast<Document>(m_scriptExecutionContext); 336 } 337 338 UserMediaRequest::PendingActivationMediaStream::PendingActivationMediaStream(Ref<PendingActivity<UserMediaRequest>>&& protectingUserMediaRequest, UserMediaRequest& userMediaRequest, Ref<MediaStream>&& stream, CompletionHandler<void()>&& completionHandler) 339 : m_protectingUserMediaRequest(WTFMove(protectingUserMediaRequest)) 340 , m_userMediaRequest(userMediaRequest) 341 , m_mediaStream(WTFMove(stream)) 342 , m_completionHandler(WTFMove(completionHandler)) 343 { 344 m_mediaStream->privateStream().addObserver(*this); 345 m_mediaStream->startProducingData(); 346 } 347 348 UserMediaRequest::PendingActivationMediaStream::~PendingActivationMediaStream() 349 { 350 m_mediaStream->privateStream().removeObserver(*this); 351 m_completionHandler(); 352 if (auto* document = m_mediaStream->document()) 353 document->updateIsPlayingMedia(); 354 } 355 356 void UserMediaRequest::PendingActivationMediaStream::characteristicsChanged() 357 { 358 if (!m_userMediaRequest.m_pendingActivationMediaStream) 359 return; 360 361 for (auto& track : m_mediaStream->privateStream().tracks()) { 362 if (track->source().captureDidFail()) { 363 m_userMediaRequest.mediaStreamDidFail(track->source().type()); 364 return; 365 } 366 } 367 368 if (m_mediaStream->privateStream().hasVideo() || m_mediaStream->privateStream().hasAudio()) { 369 m_userMediaRequest.mediaStreamIsReady(WTFMove(m_mediaStream)); 370 return; 371 } 372 } 373 374 void UserMediaRequest::mediaStreamIsReady(Ref<MediaStream>&& stream) 375 { 376 RELEASE_LOG(MediaStream, "UserMediaRequest::mediaStreamIsReady"); 377 stream->document()->setHasCaptureMediaStreamTrack(); 378 m_promise.resolve(WTFMove(stream)); 379 m_pendingActivationMediaStream = nullptr; 346 380 } 347 381 … … 362 396 } 363 397 m_promise.reject(NotReadableError, makeString("Failed starting capture of a "_s, typeDescription, " track"_s)); 398 m_pendingActivationMediaStream = nullptr; 364 399 } 365 400 -
trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.h
r249574 r249651 80 80 bool canSuspendForDocumentSuspension() const final; 81 81 82 void mediaStreamIsReady(Ref<MediaStream>&&); 82 83 void mediaStreamDidFail(RealtimeMediaSource::Type); 84 85 class PendingActivationMediaStream : private MediaStreamPrivate::Observer { 86 WTF_MAKE_FAST_ALLOCATED; 87 public: 88 PendingActivationMediaStream(Ref<PendingActivity<UserMediaRequest>>&&, UserMediaRequest&, Ref<MediaStream>&&, CompletionHandler<void()>&&); 89 ~PendingActivationMediaStream(); 90 91 private: 92 void characteristicsChanged() final; 93 94 Ref<PendingActivity<UserMediaRequest>> m_protectingUserMediaRequest; 95 UserMediaRequest& m_userMediaRequest; 96 Ref<MediaStream> m_mediaStream; 97 CompletionHandler<void()> m_completionHandler; 98 }; 83 99 84 100 Vector<String> m_videoDeviceUIDs; … … 86 102 87 103 DOMPromiseDeferred<IDLInterface<MediaStream>> m_promise; 104 std::unique_ptr<PendingActivationMediaStream> m_pendingActivationMediaStream; 88 105 MediaStreamRequest m_request; 89 106 }; -
trunk/Source/WebCore/page/MediaProducer.h
r249574 r249651 59 59 VideoCaptureMask = HasActiveVideoCaptureDevice | HasMutedVideoCaptureDevice | HasInterruptedVideoCaptureDevice, 60 60 DisplayCaptureMask = HasActiveDisplayCaptureDevice | HasMutedDisplayCaptureDevice | HasInterruptedDisplayCaptureDevice, 61 ActiveCaptureMask = HasActiveAudioCaptureDevice | HasActiveVideoCaptureDevice | HasActiveDisplayCaptureDevice,62 61 MutedCaptureMask = HasMutedAudioCaptureDevice | HasMutedVideoCaptureDevice | HasMutedDisplayCaptureDevice, 63 62 MediaCaptureMask = AudioCaptureMask | VideoCaptureMask | DisplayCaptureMask, … … 65 64 typedef unsigned MediaStateFlags; 66 65 67 static bool isCapturing(MediaStateFlags state) { return (state & ActiveCaptureMask) || (state & MutedCaptureMask); }66 static bool isCapturing(MediaStateFlags state) { return (state & HasActiveAudioCaptureDevice) || (state & HasActiveVideoCaptureDevice) || (state & HasMutedAudioCaptureDevice) || (state & HasMutedVideoCaptureDevice); } 68 67 69 68 virtual MediaStateFlags mediaState() const = 0; -
trunk/Source/WebCore/platform/mediastream/MediaStreamPrivate.cpp
r249574 r249651 283 283 284 284 ALWAYS_LOG(LOGIDENTIFIER, track.logIdentifier(), " ", track.muted()); 285 characteristicsChanged(); 285 scheduleDeferredTask([this] { 286 characteristicsChanged(); 287 }); 286 288 } 287 289 … … 300 302 updateActiveVideoTrack(); 301 303 302 characteristicsChanged(); 304 scheduleDeferredTask([this] { 305 characteristicsChanged(); 306 }); 303 307 } 304 308 … … 310 314 311 315 ALWAYS_LOG(LOGIDENTIFIER, track.logIdentifier()); 312 characteristicsChanged(); 316 scheduleDeferredTask([this] { 317 characteristicsChanged(); 318 }); 313 319 } 314 320 … … 320 326 321 327 ALWAYS_LOG(LOGIDENTIFIER, track.logIdentifier()); 322 updateActiveState(NotifyClientOption::Notify); 323 characteristicsChanged(); 328 scheduleDeferredTask([this] { 329 updateActiveState(NotifyClientOption::Notify); 330 characteristicsChanged(); 331 }); 332 } 333 334 void MediaStreamPrivate::scheduleDeferredTask(Function<void ()>&& function) 335 { 336 ASSERT(function); 337 callOnMainThread([weakThis = makeWeakPtr(*this), function = WTFMove(function)] { 338 if (!weakThis) 339 return; 340 341 function(); 342 }); 324 343 } 325 344 -
trunk/Source/WebCore/platform/mediastream/MediaStreamPrivate.h
r249574 r249651 48 48 #include <wtf/UUID.h> 49 49 #include <wtf/Vector.h> 50 #include <wtf/WeakPtr.h> 50 51 51 52 namespace WebCore { … … 57 58 : public MediaStreamTrackPrivate::Observer 58 59 , public RefCounted<MediaStreamPrivate> 60 , public CanMakeWeakPtr<MediaStreamPrivate> 59 61 #if !RELEASE_LOG_DISABLED 60 62 , private LoggerHelper … … 127 129 void updateActiveVideoTrack(); 128 130 131 void scheduleDeferredTask(Function<void ()>&&); 129 132 void forEachObserver(const WTF::Function<void(Observer&)>&) const; 130 133
Note: See TracChangeset
for help on using the changeset viewer.